前言
接着上一篇[推荐之矩阵分解],继续说Embedding在推荐领域的应用方法,矩阵分解为描述User/Item提供了一种向量化表达的方案,而本篇将探究如何从word2vec的角度获取Item的向量化表达。
本文去年10月份就写完了,一直没发....已经忘了word2vec的可以看一下该篇word2vec模型深度解析简单的回顾一下。
推荐系统发展
推荐技术的发展,可以粗略的分为三个阶段:
(1)从限定在一个有限的历史兴趣范畴内推荐的第一代基于统计的启发式规则方法:
代表技术就是协同过滤算法。
(2)基于内积模型的向量检索方法:
推荐技术打开了候选子集检索范围的天花板,基于各自业务模型的Embedding变种技术层出不穷。
- 工业代表:YouTube-详细解读Youtube推荐算法
(3)基于深度学习模型的全库检索推荐算法:
由于向量检索方法限定了内积模型这种用户-商品之间喜好的度量方式,无法容纳更加先进的打分模型(例如带有Attention结构的深度网络),因此开始探究深度学习的模型在推荐的应用。
- 工业界实践代表: 阿里:新一代任意深度学习 树型全库检索推荐算法
本篇主要谈一下我所了解到基于内积模型的向量化检索方法中Item2vec方法,聚焦于如何获得序列数据中实体的向量表达。
Item2vec的本质
假设,此时我们是某个APP商店的开发者,每一款APP就是我们的商品(Item),想根据用户搜索某个APP的结果列表下,推荐与其搜索到的APP相似的产品推荐给该用户,类似推荐产品的「猜你喜欢」的场景。
假设已有海量session数据:大量用户浏览某些APP路径的点击序列数据,每一条样本记录了用户的一个session周期内点击过的APP的顺序数据。
任务我们就简单认为就是:如何找到与特定APP最相似的Top个APP?
第一步,想直接衡量两个APP之间的相似度,方法有很多,这里我首先想到的是如何把每个APP变成可度量的数值变量?
序列实体数据的向量化,跟对一段文本的各个词汇进行向量化表达是不是很类似?我们的word2vec是不是该登场了。
在用户浏览APP的session样本数据中,每一个APP_id就是一个独立的实体,省去了NLP分词等的步骤。
那剩下的步骤?其实与我们训练word2vec的词向量步骤相差无几。
推荐场景中基于word2vec思想的Embedding过程中常采用SGNS方法,即:
Skip-gram Negative Sampling 的组合训练方法。
Skip-gram模型:根据中心词wi预测左右窗口内的临近词wj,推荐场景中窗口值不易过大,例如窗口值c=2,其优化目标为:
p(wj|wi)描述当前词wi预测窗口内词wj的概率,可通过下面的softmax函数来计算得到:
其中u对应中心词的向量,v对应窗口词的向量,是两个待优化参数,这里可以看做计算点积(多分类模型,u是输入,v是隐藏层参数)。
为了最大化目标的概率,优化目标引入了softmax,此时计算复杂度为词表K的大小,计算开销太大。
为此,引入了随机负采样的思路,从优化一个多分类任务转化为优化一个二分类任务。采用负采样方法把上述的softmax函数替换成以下公式:
其中Ui 为中心词wi对应向量,Vk为隐藏层参数(负采样词的词向量)
以上便是SGNS的核心步骤,剩下的只需要将文本-词汇概念替换为session序列-APP,就可以基word2vec的思想来产生APP的向量啦。
关于负样本的构造,同样基于APP的热度信息调整负采样的参数来构造负样本。word2vec中使用词频作为词的分布,并在词频数上乘上0.75作为权重,使用0.75幂的好处可以减弱不同频次差异过大带来的影响,使得小频次的单词被采样的概率变大,那在自己特定的业务场景里面,是不是0.75也可以当做一个超参数搞一下呢?
最后通过一个自建的二分类任务来不断更新输入层的隐藏矩阵参数,该隐藏矩阵就是最终的APP向量,每一行对应着一个APP向量。
上面通过基于用户地点击APP序列数据,借助word2vec思想来挖掘APP之间的相似性。
目前推荐领域有很多这类基于word2vec思想对序列数据中的各个组成实体(Item)进行向量化的成熟方案,在业界也被统称为item2vec。
Item的向量表达有了,那么基于Item召回相似的Item,直接上业界比较常见的Faiss就行了。
Faiss : https://github.com/facebookresearch/faiss
总结
通过上面简单介绍,可以认为Item2vec只是word2vec的一种跨界艺名而已,骨子里面还是word2vec,在具体的推荐场景中取得一定效果的同时,它也暴露出各种问题:
- 基于Embedding相似度召回的Item领域单一、集中于头部。
- 对于冷门Item序列数据稀疏、以及冷启动Item的表达能力不足。
- 对于非序列数据中的实体如果表达。
针对以上这些问题,在下一篇Embedding相关的文章中会继续介绍我了解到的一些解决方案:基于有监督模型训练的、加入ItemID之外其它特征的、基于随机游走的等推荐系统中Embedding获取方法。
3.29
历史文章推荐
- AI极客-机器学习|逻辑回归(LR)基础知识点个人总结
- AI极客-NLP|词向量(1)--从Word2Vec到ELMo
- AI极客-NLP | 词向量(2)--从ELMo到Bert
- AI极客-NLP | NLP界最强特征提取器--Transformer
- 推荐系统之矩阵分解模型