使用 Docker 的个性化排名 API
使用 Docker 的个性化排名 API
在这篇文章中,我们将探讨如何设置和使用 Metarank 的个性化排名 API 和 Redis 持久化 和 码头工人撰写 .
数据准备
Metarank 是一个 开源 个性化排名服务,您可以快速设置并通过个性化增强您的用户体验。从社交网络到送货服务和约会应用程序,个性化可以通过在发送新电子邮件时提供联系建议来提高您的用户转化率、参与度或使您的用户生活更简单。
在创建一个可以为任何类型的排名执行个性化的系统时,大多数时候最大的问题是数据管理。 Metarank 解决了其模型训练的数据存储和管理问题,但是您仍然需要为初始模型训练提供历史数据。
Metarank 预计历史数据将 格式为 JSON 并保存到 JSON 文件中。这是一个示例 项目元数据 描述需要个性化的项目属性的事件:
您至少需要提供 物品 , 排行 和 相互作用 Metarank 的元数据事件,用于为您的用例创建个性化模型。
当 Metarank 逐行读取数据时,历史数据应按时间戳升序排列。如果您的数据未排序,您可以使用[ 种类](https://docs.metarank.ai/reference/cli#historical-data-sorting)
模式 Metarank 的 CLI 在提供数据进行训练之前对数据进行排序。
我们将使用我们的 Ranklens 数据集 这为我们的 演示 它提供了这 3 种类型的事件,并且已经按时间戳排序。您可以使用以下命令下载完整的事件文件:
curl -o events.jsonl.gz[ https://media.githubusercontent.com/media/metarank/metarank/master/src/test/resources/ranklens/events/events.jsonl.gz](https://media.githubusercontent.com/media/metarank/metarank/master/src/test/resources/ranklens/events/events.jsonl.gz)
元排名配置文件
Metarank的 YAML 配置 提供了一种简单的方法来配置如何个性化您的数据。个性化排名基于 特征 由机器学习模型使用。您可以查看我们之前的博客文章 使用 Metarank 进行特征工程 ,对于这篇文章,我们将只使用一组最少的功能: 类型
, 喜欢的流派
和 喜欢的演员
.您可以使用不同的功能来查看结果将如何变化。或者,您可以使用[ 自动特征](https://docs.metarank.ai/reference/cli#auto-feature-generation)
模式 Metarank 根据您的数据自动生成特征。
我们还将使用 Redis 持久化模式 在配置中,使启动 Metarank 后发生的训练数据和交互在重启过程中不会丢失。我们建议仅将 In-Memory 模式用于本地开发和测试。
具有以上 3 个特性和 Redis 的配置文件如下:
请注意,我们明确设置 _api_
可以从 docker 环境中访问 Metarank 的配置属性。
码头工人撰写
Metarank 提供了一个 Docker 镜像 ,因此您可以创建一个 docker compose 文件来轻松地将 Metarank 与 Redis 结合起来:
为了运行 Metarank,我们使用它的[ 独立的](https://docs.metarank.ai/reference/cli#running-modes)
结合读取数据、训练模型和启动 API 的模式。
玩个性化排名
现在我们已经准备就绪,让我们开始个性化排名 API 并开始使用它吧!
这是包含 docker compose 文件、配置和事件文件的项目结构
现在让我们用一个简单的 docker compose 命令启动 API:
码头工人组成
处理完所有数据后,Metarank 将输出一个漂亮的日志,表明它已准备好开始接收数据:
metarank_standalone | 11:42:11.883 INFO ai.metarank.main.command.Train$ - like_genre: weight=334.0 zero=66785 nz=143767 dist=[0.00,0.00,0.02,0.10,0.16,0.21,0.27,0.33,0.45]
metarank_standalone | 11:42:11.883 INFO a.metarank.main.command.Standalone$ - 模型训练完成
metarank_standalone | 11:42:12.742 信息 ai.metarank.main.command.Serve$ - 启动 API ...
metarank_standalone | 11:42:12.934 信息 ohblaze.server.BlazeServerBuilder -
metarank_standalone | _ _ _ _ _
metarank_standalone | | |_| |_| |_ _ __| | | ___
metarank_standalone | | '\_| _| '_ \_ _(_-
metarank_standalone | |_||_\__|\__| .__/ |_|/__/
metarank_standalone | |_|
metarank_standalone | 11:42:12.959 信息 ohblaze.server.BlazeServerBuilder - blaze v1.0.0-M36 上的 http4s v1.0.0-M36 开始于[ http://127.0.0.1:8080/](http://127.0.0.1:8080/)
默认情况下,Metarank 在端口上启动 8080
,所以我们可以发送一些 curl 请求来获得个性化的响应。
-
让我们使用以下请求来获取一组项目的初始排名
卷曲 http://0.0.0.0:8080/rank/xgboost?explain=true -d'{
“事件”:“排名”,
“id”:“id1”,
“项目”: [
{"id":"72998"}, {"id":"67197"}, {"id":"77561"},
{"id":"68358"}, {"id":"79132"}, {"id":"103228"}
],
“用户”:“test1”,
“会话”:“测试1”,
“时间戳”:1663164199915
}'
我们正在使用 _解释=真_
参数来显示我们的请求后计算的特征是如何变化的。
这是 Metarank 的回应:
{
“项目”: [
{
“特征”: {
“类型”:“冒险@5”,
“喜欢的演员”:0,
“喜欢的流派”:0
},
“项目”:“77561”,
“分数”:0.059091829552052236
},
{
“特征”: {
“流派”:“动作@4”,
“喜欢的演员”:0,
“喜欢的流派”:0
},
“项目”:“72998”,
“分数”:0.03967099890674036
},
{
“特征”: {
“流派”:“动作@4”,
“喜欢的演员”:0,
“喜欢的流派”:0
},
“项目”:“67197”,
“分数”:0.03967099890674036
},
{
“特征”: {
“流派”:“动作@4”,
“喜欢的演员”:0,
“喜欢的流派”:0
},
“项目”:“79132”,
“分数”:0.03967099890674036
},
{
“特征”: {
“流派”:“动作@4”,
“喜欢的演员”:0,
“喜欢的流派”:0
},
“项目”:“103228”,
“分数”:0.03967099890674036
},
{
“特征”: {
"genre": "科幻@8",
“喜欢的演员”:0,
“喜欢的流派”:0
},
“项目”:“68358”,
“分数”:-0.034844059827564444
}
],
“状态”: {
...
}
}
2. 我们需要指示 Metarank 向用户显示的项目的顺序。这是通过 反馈 API调用 排名事件有效负载 :
卷曲[ http://localhost:8080/反馈](http://localhost:8080/feedback) -d'{
“事件”:“排名”,
“id”:“id1”,
“项目”: [
{"id":"72998"}, {"id":"67197"}, {"id":"77561"},
{"id":"68358"}, {"id":"79132"}, {"id":"103228"}
],
“用户”:“test1”,
“会话”:“测试1”,
“时间戳”:1663164200915
}'
3. 执行一个 点击
对带有 id 的电影的动作 103228
.请注意,我们正在使用 id1
在里面 排行
指示交互发生在哪个排名的调用参数:
卷曲[ http://localhost:8080/反馈](http://localhost:8080/feedback) -d'{
“事件”:“交互”,
“类型”:“点击”,
“id”:“id2”,
“排名”:“id1”,
“项目”:“103228”,
“用户”:“test1”,
“会话”:“测试1”,
“时间戳”:1663164202915
}'
4. 现在让我们让 Metarank 在我们的交互发生后个性化同一组项目:
{
“项目”: [
{
“特征”: {
“流派”:“动作@4”,
“喜欢的演员”:1,
“喜欢的流派”:1
},
“项目”:“103228”,
“分数”:3.4156795975319816
},
{
“特征”: {
“类型”:“冒险@5”,
“喜欢的演员”:0,
“喜欢的流派”:1
},
“项目”:“77561”,
“分数”:0.559094548886528
},
{
“特征”: {
“流派”:“动作@4”,
“喜欢的演员”:0,
“喜欢的流派”:1
},
“项目”:“72998”,
“分数”:0.4854114126690249
},
{
“特征”: {
“流派”:“动作@4”,
“喜欢的演员”:0,
“喜欢的流派”:1
},
“项目”:“79132”,
“分数”:0.4854114126690249
},
{
“特征”: {
"genre": "科幻@8",
“喜欢的演员”:0,
“喜欢的流派”:1
},
“项目”:“68358”,
“分数”:0.33323295913272516
},
{
“特征”: {
“流派”:“动作@4”,
“喜欢的演员”:0,
“喜欢的流派”:0.6666666666666666
},
“项目”:“67197”,
“分数”:0.08805971814908203
}
],
“状态”: {...}
}
您可以看到项目的顺序发生了变化,特征也发生了变化 喜欢的流派
和 喜欢的演员
根据我们的互动改变了他们的价值观。
您进行的交互越多,个性化排名 API 为您的用户生成的预测就越好。
下一步是什么?
您可以在此博客文章中找到所有示例 存储库 .尝试从我们的演示配置中启用不同的功能,并将 Metarank 应用于您的数据!
如果您对我们的网站有任何疑问或问题,请告诉我们 松弛通道 .
Metarank Labs Company 为 Metarank 安装提供全面的入职和持续支持, 联系我们 获取更多信息。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明