达观推荐算法实现:协同过滤之item embedding

推荐系统本质是在用户需求不明确的情况下,解决信息过载的问题,联系用户和信息,一方面帮助用户发现对自己有价值的信息,另一方面让信息能够展现在对它感兴趣的用户面前,从而实现信息消费者和信息生产者的双赢(这里的信息的含义可以非常广泛,比如咨询、电影和商品等,下文中统称为item)。达观数据相关推荐是达观推荐系统中的重要组成部分,其价值在于,在没有用户画像信息的情况下,也能给用户以好的推荐体验,比如资讯类,通过达观相关推荐算法找到item相关的其他item,可以提供对某一类或者针对某一事件多角度多侧面的深度阅读。本文主要先简单介绍相关推荐的一些常用算法,然后介绍一下基于item embedding的协同过滤。

1. 达观相关推荐的常用算法

1.1 Content-based相关推荐

基于内容的推荐一般依赖于一套好的标签系统,通过计算item之间tag集合的相似性来衡量item之间的相似性,一套好的标签系统需要各方面的打磨,一方面需要好的编辑,一方面也依赖于产品的设计,引导用户在使用产品的过程中,对item提供优质的tag。

1.2 基于协同过滤的相关推荐

协同过滤主要分为基于领域以及基于隐语义模型。

基于领域的算法中,ItemCF是目前业界应用最多的算法,其主要思想为“喜欢item A的用户大都喜欢用户 item B”,通过挖掘用户历史的操作日志,利用群体智慧,生成item的候选推荐列表。主要统计2个item的共现频率,加以时间的考量,以及热门用户以及热门item的过滤以及降权。

LFM(latent factor model)隐语义模型是最近几年推荐系统领域最为热门的研究话题,该算法最早在文本挖掘领域被提出,用于找到文本隐含的语义,在推荐领域中,其核心思想是通过隐含特征联系用户和物品的兴趣。主要的算法有pLSA、LDA、matrix factorization(SVD,SVD++)等,这些技术和方法在本质上是相通的,以LFM为例,通过如下公式计算用户u对物品i的兴趣:

公式中pu,k和qi,k是模型的参数,其中pu,k度量了用户u的兴趣和第k个隐类的关系,而qi,k度量了第k个隐类和物品i之间的关系。而其中的qi,k可视为将item投射到隐类组成的空间中去,item的相似度也由此转换为在隐空间中的距离。

2. item2vec:NEURAL ITEM EMBEDDING

2.1 word2vec

2013年中,Google发布的word2vec工具引起了大家的热捧,很多互联网公司跟进,产出了不少成果。16年Oren Barkan以及Noam Koenigstein借鉴word2vec的思想,提出item2vec,通过浅层的神经网络结合SGNS(skip-gram with negative sampling)训练之后,将item映射到固定维度的向量空间中,通过向量的运算来衡量item之间的相似性。下面对item2vec的做简要的分享:

由于item2vec基本上是参照了google的word2vec方法,应用到推荐场景中的item2item相似度计算上,所以首先简单介绍word2vec的基本原理。

Word2vec主要用于挖掘词的向量表示,向量中的数值能够建模一个词在句子中,和上下文信息之间的关系,主要包括2个模型:CBOW(continuous bag-of-word)和SG(skip-gram),从一个简单版本的CBOW模型介绍,上下文只考虑一个词的情形,如图1所示,

假设只有一个隐层的神经网络,输入层以及输出层均为词的one-hot编码表示,词表大小假设为V,隐层神经元个数为N,相邻层的神经元为全连接,层间的权重用V*N的矩阵W表示,隐层到输出层的activation function采用softmax函数,

其中wI,wj为词表中不同的词,yj为输出层第j个神经元的输出,uj为输入层经过权重矩阵W到隐层的score,uj’为隐层经过权重矩阵W’到输出层的score。训练这个神经网络,用反向传播算法,先计算网络输出和真实值的差,然后用梯度下降反向更新层间的权重矩阵,得到更新公式:

其中,η为更新的步长,ej为模型预测以及真实值之间的误差,h为隐层向量。

图2为上下文为多个词时的情况,中间的隐层h计算由

改为

即输入向量为多个上下文向量相加求平均,后续的参数学习与上文的单个词的上下文情况类似。遍历整个训练集context-target词对,经过多次迭代更新模型参数,对模型中的向量的影响将会累积,最终学到对词的向量表示。

Skip-gram跟CBOW的输入层和输出层正好对调,区别就是CBOW是上下文,经过模型预测当前词,而skip-gram是通过当前词来预测上下文。

目前为止,对词表中的每个词,有两种向量表示:input vector和output vector,对应输入层到隐层权重矩阵W的行向量和隐层到输出层权重矩阵W'的列向量,从等式4、5可以看出,对每一个训练样本,都需要遍历词表中的每一个词,因此,学习output vector的计算量是非常大的,如果训练集或者词表的规模大的话,在实际应用中训练不具可操作性。为解决这个问题,直觉的做法是限制每个训练样本需要更新的output vectors,google提出了两个方法:hierarchical softmax和negative sampling,加快了模型训练的速度,再次不做展开讨论。

2.2 item2vec

由于wordvec在NLP领域的巨大成功,Oren Barkan and Noam Koenigstein受此启发,利用item-based CF学习item在低维latent space的embedding representation,优化item的相关推荐。

词的上下文即为邻近词的序列,很容易想到,词的序列其实等价于一系列连续操作的item序列,因此,训练语料只需将句子改为连续操作的item序列即可,item间的共现为正样本,并按照item的频率分布进行负样本采样。

Oren Barkan and Noam Koenigstein以SVD作为baseline,SVD的隐类以及item2vec的维度都取40,用Microsoft Xbox Music service收集的 user-artists数据集,对结果进行聚类,如图3所示,图a是item2vec的聚合效果,图b是SVD分解的聚合效果,看起来item2vec的聚合效果要更好些。

作者尝试将item2vec应用到达观数据的相关推荐当中,由于资讯、短视频类的场景一般的连续item操作会比较多,因此天然的非常适合用item2vec来训练item的向量表示,从实际的训练结果和线上评估来看,item2vec对CTR提升是有明显帮助的。

本文作者:

范雄雄,达观数据个性化推荐引擎工程师,工作包括推荐系统的架构设计和开发、推荐效果优化等,所在团队开发的个性化推荐系统曾创造上线后效果提升300%的记录。复旦大学计算机科学与技术专业硕士,曾在爱奇艺开发多款大数据产品,对个性化推荐、数据挖掘和分析、用户行为建模、大数据处理有较深入的理解和实践经验。

本文作者:范雄雄

来源:51CTO

时间: 2024-08-22 05:02:18

达观推荐算法实现:协同过滤之item embedding的相关文章

探秘推荐引擎之协同过滤算法小综述

      数学大神.统计学大神和数据挖掘推荐大神请关注. 一.数学期望的理解       早些时候,法国有两个大数学家,一个叫做布莱士·帕斯卡,一个叫做费马.帕斯卡认识两个赌徒,这两个赌徒向他提出了一个问题.他们说,他俩下赌金之后,约定谁先赢满5局,谁就获得全部赌金.赌了半天,A赢了4局,B赢了3局,时间很晚了,他们都不想再赌下去了.那么,这个钱应该怎么分?是不是把钱分成7份,赢了4局的就拿4份,赢了3局的就拿3份呢?或者,因为最早说的是满5局,而谁也没达到,所以就一人分一半呢?这两种分法都不

阿里云机器学习平台使用——协同过滤推荐算法快速应用

标签: 数加 概述 PAI机器学习平台是构建在阿里云ODPS计算平台之上,集数据处理.建模.离线预测.在线预测为一体的机器学习平台. 该平台为算法开发者提供了丰富的MPI.PS.BSP等编程框架和数据存取接口,同时为算法使用者提供了基于Web的IDE+可视化实验搭建控制台.平台目前整合了阿里集团内最先进的算法,为用户提供算法服务. 今天做了一件事情来体验PAI,就是拿最经典的电影推荐场景来做协同过滤算法的测试. 数据准备 电影数据来源于http://grouplens.org/datasets/

协同过滤算法 R/mapreduce/spark mllib多语言实现

用户电影评分数据集下载 http://grouplens.org/datasets/movielens/ 1) Item-Based,非个性化的,每个人看到的都一样 2) User-Based,个性化的,每个人看到的不一样 对用户的行为分析得到用户的喜好后,可以根据用户的喜好计算相似用户和物品,然后可以基于相似用户或物品进行推荐.这就是协同过滤中的两个分支了,基于用户的和基于物品的协同过滤. 在计算用户之间的相似度时,是将一个用户对所有物品的偏好作为一个向量,而在计算物品之间的相似度时,是将所有

协同过滤算法介绍

在现今的推荐技术和算法中,最被大家广泛认可和采用的就是基于协同过滤的推荐方法.本文将带你深入了解协同过滤的秘密. 1 什么是协同过滤 协同过滤是利用集体智慧的一个典型方法.要理解什么是协同过滤 (Collaborative Filtering, 简称 CF),首先想一个简单的问题,如果你现在想看个电影,但你不知道具体看哪部,你会怎么做?大部分的人会问问周围的朋友,看看最近有什么好看的电影推荐,而我们一般更倾向于从口味比较类似的朋友那里得到推荐.这就是协同过滤的核心思想. 换句话说,就是借鉴和你相

【笔记6】用pandas实现条目数据格式的推荐算法 (基于物品的协同)

''' 基于物品的协同推荐 矩阵数据 说明: 1.修正的余弦相似度是一种基于模型的协同过滤算法.我们前面提过,这种算法的优势之 一是扩展性好,对于大数据量而言,运算速度快.占用内存少. 2.用户的评价标准是不同的,比如喜欢一个歌手时有些人会打4分,有些打5分:不喜欢时 有人会打3分,有些则会只给1分.修正的余弦相似度计算时会将用户对物品的评分减去 用户所有评分的均值,从而解决这个问题. 如何预测用户对给定物品的打分? 一.基于用户协同 方法1:用户之间的距离/相似度(K近邻算法) 二.基于物品协

[推荐系统]协同过滤介绍

在现今的推荐技术和算法中,最被大家广泛认可和采用的就是基于协同过滤的推荐方法.本文将带你深入了解协同过滤的秘密.下面直接进入正题 1 什么是协同过滤 协同过滤是利用集体智慧的一个典型方法.要理解什么是协同过滤 (Collaborative Filtering, 简称 CF),首先想一个简单的问题,如果你现在想看个电影,但你不知道具体看哪部,你会怎么做?大部分的人会问问周围的朋友,看看最近有什么好看的电影推荐,而我们一般更倾向于从口味比较类似的朋友那里得到推荐.这就是协同过滤的核心思想. 换句话说

如何使用Spark ALS实现协同过滤

本文主要记录最近一段时间学习和实现Spark MLlib中的协同过滤的一些总结,希望对大家熟悉Spark ALS算法有所帮助. 更新: [2016.06.12]Spark1.4.0中MatrixFactorizationModel提供了recommendForAll方法实现离线批量推荐,见SPARK-3066. 测试环境 为了测试简单,在本地以local方式运行Spark,你需要做的是下载编译好的压缩包解压即可,可以参考Spark本地模式运行. 测试数据使用MovieLens的MovieLens

Spark MLlib中的协同过滤

本文主要通过Spark官方的例子理解ALS协同过滤算法的原理和编码过程,然后通过对电影进行推荐来熟悉一个完整的推荐过程. 协同过滤 协同过滤常被应用于推荐系统,旨在补充用户-商品关联矩阵中所缺失的部分.MLlib当前支持基于模型的协同过滤,其中用户和商品通过一小组隐语义因子进行表达,并且这些因子也用于预测缺失的元素.Spark MLlib实现了交替最小二乘法(ALS) 来学习这些隐性语义因子. 在 MLlib 中的实现类为org.apache.spark.mllib.recommendation

基于模糊聚类和协同过滤的混合推荐系统

      Hybrid Recommender System based on Fuzzy Clustering and Collaborative Filtering       给出题目,想找的话直接在ElsevierSD里下载即可.       并不是逐句翻译,一些简单的背景比如经济啦什么的直接忽略,不过笔者会在博文里点出来.       一二三这样的标题是原论文的题目,我没翻译,为以后自己写英文论文做准备,以1234这样的标题开始的内容是笔者自己加上去的,就是我的笔记.       我