电商序列推荐算法
基本思路:
任务描述:针对Amazon和淘宝百万级用户点击、购买数据,采用多行为路径联合建模,预测用户感兴趣商品。
个人工作:(1)特征工程:对点击、购买数据进行跨场景融合,用GraphEmbedding的EGES法补充稀疏矩阵数据,筛选同质性、结构性商品。(2)Embedding召回:基于特征工程生成的结果进行基于embedding的召回,融合流行度、兴趣标签等附加信息。
(3)多目标排序:采用DIEN对序列数据建模,增加历史点击数据排序,预估点击率、转化率。最终MRR为0.40,AUC为0.71。
1. sentence bert是怎么用的?
在计算语义相似度时,需要将两个句子同时进入模型,进行信息交互,这造成大量的计算开销。有10000个句子,我们想要找出最相似的句子对,需要计算(10000*9999/2)次,需要大约65个小时。Bert模型的构造使得它既不适合语义相似度搜索,也不适合非监督任务,比如聚类。
sentence bert: 将不同的句子输入到两个bert模型中(但这两个bert模型是参数共享的,也可以理解为是同一个bert模型),获取到每个句子的句子表征向量;而最终获得的句子表征向量,可以用于语义相似度计算,也可以用于无监督的聚类任务。对于同样的10000个句子,我们想要找出最相似的句子对,只需要计算10000次,需要大约5秒就可计算完全。
其实本质上他的优化方式就是先算embedding(句向量)再做余弦相似度,而不是先concat。他这样做的好处就是把bert当做一个word2vec方法,每个句子生成一个句向量(很小),然后计算余弦相似度。cos的复杂度忽略不计,整个计算量就在10000次bert上。每次输入一个句子,有几种方式:(1)句首加cls,cls对应的输出就是句向量(2)平均池化,句子所有输出做平均,(3)最大池化
2. EGES enhanced graph embedding with side information
2.1 通过user行为序列构建有向有权图。
每个用户的点击,根据时间分sessions,用所有sessions构建item graph。(比如user1按顺序点击了DAB,隔了段时间点击了DEF)就连接D->A>B, D->E>F. 所有session合起来就生成了graph。
对物品graph进行随机游走,生成一系列序列,再通过skip-gram进行embedding
2.2 deepwalk的建立步骤:
deepwalk生成的是无向无权图。
数据格式:user-user无连接,item-item无连接,user-item互相连接
记录用户点击数据,考虑边的权重按照冷门特征计算
3. 基于embedding的召回方法
结合观看特征、搜索特征(历史多条信息)的embedding进行池化,concat起来,加上用户的静态属性(年龄性别用非线性函数编码),再放到relu里,三层relu就是三个线性层,经过后做softmax来预估类别概率。
通过这种embedding方式预训练得到的用户embedding,通过最近邻搜索法再与物品向量找最近的topN,作为召回结果。
embedding作为预训练,而不是端到端训练,好处就是embedding本身参数量比较大,训练很慢
Embedding层通过embedding预训练得到。预训练的方式是用FNN模型。先用FM来初始化FNN的embedding权重
预训练就是与推荐独立开来,虽然与DNN训练割裂会损失一定的信息,但是这样提高了灵活性,物品和用户的embedding比较稳定,就可以训练频率比较低。