推荐系统修行之路

实战_电商场景中精排服务的实践

2022-02-09  本文已影响0人  Nefelibatas

精排服务框架介绍

框架流程图

03.png

机器学习平台

数据流服务: 产生训练所需的训练样本

训练平台: 模型开发和训练的统一平台

模型部署平台: 负责各种模型的文件的部署后用于线上预估

未命名文件.jpg 6.jpg 5.jpg 7.jpg

排序服务相关参数服务器

小样本无需分布式

分布式机器学习分成两个部分,即参数和训练

参数服务器通常对外提供两个方法:push(对应值传给参数服务器) 和 pull(从参数服务器中拉取对应的值)

在参数服务中,参数都是可以被表示成(key, value)的集合,key就是feature ID,而value就是它

的权值。把参数表示成k-v, 形式更自然, 易于理,更易于编程解。workers跟servers之间通过push与pull来通信的。

worker通过push将计算好的梯度发送到server,然后通过pull从server更新参数。

参数服务器架构:

image-20220124165430439.png

server 节点可以跟其他 server 节点通信

server group 共同维持所有参数的更新

server manager node 负责维护一致性

worker 节点之间没有通信,只跟自己对应的server进行通信。

task scheduler负责向worker分配任务并且监控worker的运行情况

image-20220124165634155.png

eg: 特征 user_id: 100001获取对应的embedding参数

  1. hash(“user=100001”)

  2. 基于这个hash值,通过一定方法定位到server group中的node , 从这个node节点中取出

embedding

  1. 训练更新这个embedding权重向量后写回对应的 node

经典的参数服务器PS-lite

image-20220124165801419.png

流程:

  1. training data 数据切分

  2. worker N 拿到自己的数据,从servers中pull参数

  3. Worker N 基于参数compute每个参数对应的梯度push给servers

  4. Servers收集所有workers进行统一梯度,更新参数

DNN & DeepFM排序模型实践

精排模型开发

image-20220124170328629.png

eg:

假设现在有4个特征,每个特征有100个值,定义embedding长度为8

Input -> layer1 的输入x的个数为4*8=32

此时的参数量为 100 * 8*4 = 3200,Layer1 -> layer2 的输入为32, 输出为3

此时的参数量为 32*3 +1 = 97,Layer2 - > layer3 的输入为3, 输出为1

此时的参数量为3*1 + 1 = 4

embedding向量长度存到对应的参数服务器中,网络结构内部权重W则放在网络模型中

DNN模型的前向传播:

image-20220124171013804.png

DeepFM = DNN与FM的融合

image-20220124171048400.png
  1. FM公式限制,Dense Embeddings 的向量长度必须一致

  2. Embedding传给FM的同时也会传给DNN,共享Embedding

  3. FM的输出是取隐层求和前的向量和DNN的隐层的输出一起concat再进行output层

image-20220124171231989.png

电商推荐排序线上模拟

排序线上流程

  1. 预估服务会先加载好model文件。

  2. 引擎请求中会带上item_id集合,这是召回流程中筛选出来的。

  3. 预估服务通过引擎请求中的user_id与item_id去请求特征服务。

  4. 从特征服务器中得到对应特征后去参数服务中获得每个对应特征的向量。

  5. 向量拼接后进入预估服务得到预估分,将预估分得到返回给引擎请求。

预估服务的开发流程

  1. 加载模型文件, 初始预估服务

  2. 请求特征服务器,获取用户和商品的特征

  3. 基于特征值去参数服务器中找出对应的向量

  4. 拼接对应的向量后传入网络中进行预估

  5. 返回预估分值

上一篇 下一篇

猜你喜欢

热点阅读