推荐系统笔记3:Embedding学习常⽤算法和Online Match Serving

一、Embedding(嵌入)学习常⽤算法

为什么需要使用Embedding:

  1. Embedding是一个软分类问题,不需要明确的将某个用户或者物品划分到具体的类别,类似SVM引进分类错误变量 ξ \xi ξ,变成一个软分类问题;
  2. 我们不需要关心分类标准,就是该分为哪些具体的类别,可以由数据自动计算得到;
  3. 对于每一个user,可以得到对于隐层变量,也就是属于某一类的概率;
  4. 同样对于每一个item,也可以得到对于隐层变量,即属于某一类的概率;

下面介绍几种Embedding算法:


  • Embedding form MF:上一篇文章中所介绍的MF(矩阵分解)算法,就是Embedding学习算法之一,MF将用户和物品的评分矩阵分为用户端隐层向量和物品端隐层向量,如下图所示:推荐系统笔记3:Embedding学习常⽤算法和Online Match Serving_第1张图片MF具有如下优点:具有如下特点:

    • ⽤latent vector来表⽰user和item(ID embedding)
    • 组合关系⽤内积 inner product(衡量user对于某⼀类商品的偏好)

    对于FM,有篇博文很详细的阐述了,给个传送门(FM的应用)。

  • Embedding from topic model:这里我主要想介绍的是PLSA和LDA,关于PLSA和LDA,首先需要介绍两种学派:频率学派和贝叶斯学派,因为PLSA属于频率学派,而LDA属于贝叶斯学派。简单的说,频率派认为参数是客观存在,不会改变,虽然未知,但却是固定值;贝叶斯派则认为参数是随机值,因为没有观察到,那么和是一个随机数也没有什么区别,因此参数也可以有分布。例如对于抛硬币来说,频率学派可以通过做任务(如抛10000次硬币)来得到硬币抛出正面的概率分布,而贝叶斯学派则是先确定一个先验概率,然后再通过实验得到观察结果,并结合先验概率和观察结果得到后验概率;

    1. PLSA:通过举例文本生成来帮助理解,如下图所示:推荐系统笔记3:Embedding学习常⽤算法和Online Match Serving_第2张图片
      对于topic model来说,存在连接文档和词语的主题词,这个主题词可以理解为上面MF的隐层向量,为了生成如图中的文档d,“坚强的孩子,依然前行在路上…”,首先需要由给定文档d来生成隐层向量(主题词),也就是 p ( z ∣ d ) p(z|d) p(zd),假设有3个,*“情感”、“事物”、“行动”、*分别选取的概率为0.1,0.5,0.4,可以理解为抛硬币随机选择一个,但不是等概率。确定好主题词后,然后选取的便是属于这个主题词的词语,如“孩子”便是属于主题词“事物”的词语,数学化表达就是 p ( w ∣ z ) p(w|z) p(wz),所以产生一个词的概率公式是: p ( w ∣ d ) = ∑ z p ( w ∣ z ) p ( z ∣ d ) p(w|d) = \sum\limits_z {p(w|z)} p(z|d) p(wd)=zp(wz)p(zd)参数估计的常用的方法是极大似然估计,其中隐含变量z是未知的,所以可以采用EM算法来估计隐含变量。
    2. LDA:同样通过文本生成的例子帮助理解:推荐系统笔记3:Embedding学习常⽤算法和Online Match Serving_第3张图片
      从上图中能够发现LDA和PLSA是存在区别的,LDA是通过不同的Dirichlet分布来得到不同的文档-主题主题-词语分布的。其过程如下所示:对于一片文档d,首先通过参数为 α \alpha αDirichlet分布来生成不同主题词的先验分布,然后对于不同的主题词存在一个多项式分布,将两者概率相乘便得到后验分布概率;当完成了主题词的选取后,然后通过参数为 η \eta ηDirichlet分布来生成不同词语的先验分布,且对应不同主题词的词语存在一个多项式分布,将两者概率相乘便得到了词语的后验概率分布;

    LDA应用在推荐系统中:1、离线计算好模型;2、用计算好的模型预测新文本的topic并取TopN个topic,如doc : topic1:0.5, topic2 : 0.3,保存每个文本的topic;3、如果用户点击了doc,那么说明用户对topic1、topic2感兴趣,那么就可以推送用户具有和doc类似主题的文本。 上述内容在该篇博文介绍的很详细(PLSA和LDA)。

    总结LDA : 1、 主题模型属于聚类方法,是一种无监督的学习方法。2、LDA是基于词频统计的,与通常的tf-idf相比,主题模型重在可以在语义上计算文本内容的相关性,而不考虑词语的顺序性。3、LDA可以起到降维的作用。

  • Embedding from Word2Vec:推荐系统笔记3:Embedding学习常⽤算法和Online Match Serving_第4张图片
    如上图所示,中间的空白处该填写什么呢?传统的N-gram语言模型告诉我们从history出发,也就是最大化转移概率: w = a r g m a x   p ( w ∣ h i s t o r y ) w=argmax \ p(w|history) w=argmax p(whistory),但是其具有如下缺点:

    • N-gram将词看作原子单位,相互独立;
    • N-gram没有考虑到词之间的相似性;
    • 其效果受限于语料规模,如果语料规模较小,需要通过平滑处理;

    由于N-gram的缺陷,产生了神经网络语言模型如Word2VecWord2Vec具有以下特点:

    • 其最大化最大似然概率 w = a r g m a x   p ( w ∣ c o n t e x t ) w=argmax \ p(w|context) w=argmax p(wcontext)
    • 使用词的分布式表示:词向量

    WordsVec有两种实现方式,分为CBOW和Skip-Ngram,如下图所示:推荐系统笔记3:Embedding学习常⽤算法和Online Match Serving_第5张图片
    Skip-Ngram是利用word来预测上下文的概率,即 p ( c o n t e x t ∣ w o r d ) p(context|word) p(contextword);而CBOW是根据上下文来预测word的概率 p ( w o r d ∣ c o n t e x t ) p(word|context) p(wordcontext),举个Skip-Ngram的例子如下所示:推荐系统笔记3:Embedding学习常⽤算法和Online Match Serving_第6张图片
    假设窗口的大小为5,然后构造训练集如上图所示;对于Word2Vec的训练有两种方式:

    • Hierarchical Softmax
      使⽤⼀颗⼆分Huffman树的表⽰,叶⼦结点是单词,词频越⾼离根节点越近,优化计算效率O(logV),其中V代表词典中的词个数;缺点:如果词中心是一个很生僻的词,那么就得在霍夫曼树中向下走很久,增加模型训练复杂度。

    • Negative Sampling:不构建霍夫曼树,而采样不在中心词w的上下文的单词构成负样本,并使用二元逻辑回归训练(最大似然)。

    词向量优势:1、不丢失信息的情况下降低维度;2、向量空间具有物理意义;3可以在多个不同的维度上具有相似性;4、线性规则:king - man = queen– woman

    Word2Vec应用于推荐系统:基于用户历史行为序列提取出用户向量,但是在线推荐的时候并没有未来的行为序列,实际上输入数据只使⽤历史信息且丢弃搜索词的序列性,具体Word2Vec的原理相关信息强烈安利博客:Word2Vec原理

  • Embedding from DNN:多层神经网络应用在推荐系统上,以一篇文章“Deep Neural Networks for YouTube Recommendations”为例,其中里面有一幅框架图:推荐系统笔记3:Embedding学习常⽤算法和Online Match Serving_第7张图片
    对上图做简要说明:其中training阶段是通过分类任务学习出⽤户向量和视频向量:

    • 每个视频作为⼀个类别,观看完成是视频作为正例;
    • 把最后⼀层隐层输出作为用户向量;
    • 视频向量:利用模型训练该向量;

在线服务时:通过输入用户向量,包括看过的视频、搜索的内容、年龄、性别等等输入到网络中,然后查询出与之向量相似度TopK⾼的视频,计算公式如下: P ( w t = i ∣ U , C ) = e v i u ∑ j ∈ V e v j u P({w_t} = i|U,{\rm{C}}) = {{{e^{{v_i}u}}} \over {\sum\nolimits_{j \in V} {{e^{{v_j}u}}} }} P(wt=iU,C)=jVevjueviu

综上所述,如何选择Embedding算法,考虑如下几个方面: 1、需要有监督学习还是无监督学习;2、推荐的item量级;3、算法是否需要满足实时性、多样性;4、业务场景目标是什么;

二、Online Match Serving

在线匹配服务是针对用户当前行为和存储在数据库中的用户相关数据来勾画出用户轮廓,如对于衣服鞋子等,可勾画出用户对什么品牌的衣服鞋子感兴趣、对鞋子衣服等分别感兴趣的程度、以及根据用户行为确定一些用户可能感兴趣的商品,然后选出候选的物品集合,以便二阶段的rank多目标处理。
最为关键的便是用户相关信息的存储,常见的是key-value storage:

  • NoSQL存储系统:存储键值对⽂档,修改灵活; ⽆JOIN操作,操作简单,速度快
  • kv存储是NoSQL存储的⼀种
  • hbase:分布式、持久化,常⽤于⼤数据存储
  • redis:基于内存、速度快,常⽤于缓存
    推荐系统笔记3:Embedding学习常⽤算法和Online Match Serving_第8张图片
    一般的在线匹配服务如上图所示:首先根据在DB中根据用户id查找用户特征,并结合上下文在参数服务器中提取出用户向量,然后利用KNN算法找出当前用户最感兴趣的候选物品列表。
    那么怎么快速实现KNN算法呢?
    • Sharding:如果你硬件资源丰富,可以使用Sharding(分片),Sharding的基本思想就要把一个数据库切分成多个部分放到不同的数据库(server)上,从而缓解单一数据库的性能问题,可并行并加快查找速度;

    • Hashing:针对海量数据的情况下,局部敏感度哈希LSH更为通用,推荐LSH相关博文一篇(LSH博文),其中LSH如下图所示:
      推荐系统笔记3:Embedding学习常⽤算法和Online Match Serving_第9张图片

    • K-D Tree: 全称是k-dimension tree,即k维欧几里德空间组织点的数据结构,其中每个节点代表⼀个超平⾯,该超平⾯垂直于当前划分维度的坐标轴;kd树是⼆叉树,每个节点分裂时选取⼀个维度,其左⼦树上所有点在d维的坐标值均⼩于当前值,右⼦树上所有点在d维的坐标值均大于等于当前值。
      如何构建KD树?

      • 随着树的深度轮流选择轴当作分割⾯。
      • 取数据点在该维度的中值作为切分超平⾯,将中值左侧的数据点挂在其左⼦树,将中值右侧的数据点挂在其右⼦树。
      • 递归处理其子树,直⾄所有数据点挂载完毕(叶子节点可以包含多个数据)。推荐系统笔记3:Embedding学习常⽤算法和Online Match Serving_第10张图片
        想详细了解KD树的可参考该篇博文:KD树。
    • Ball Tree:为了改进KDtree的二叉树树形结构,并且沿着笛卡尔坐标进行划分的低效率,ball tree将在一系列嵌套的超球体上分割数据。也就是说:使用超球面而不是超矩形划分区域。虽然在构建数据结构的花费上大过于KDtree,但是在高维甚至很高维的数据上都表现的很高效,Ball tree的paper传送门:Ball Tree。
      球树递归地将数据划分为由质心C和半径r定义的节点,使得节点中的每个点都位于由r和C定义的超球内。通过使用三角不等式来减少邻居搜索的候选点数量的。如下图所示:推荐系统笔记3:Embedding学习常⽤算法和Online Match Serving_第11张图片
      如何构建Ball Tree: 选择一个距离当前圆心最远的观测点A以及距离A最远的观测点 B,将圆中所有离这两个点最近的观测点都赋给这两个簇的中心,然后计算每一个簇的中心点和包含所有其所属观测点的最小半径。然后不断递归执行,得到上图C的结果。

你可能感兴趣的:(机器学习,推荐系统)