个性推荐理论与实践(上篇)

唐云兵:在腾讯从事后台开发6年多,手Q个性装扮和动漫后台leader。喜欢了解一些后台优秀组件设计,喜欢徒步和羽毛球。最近学习和实践个性推荐。

一. 背景

去年年底开始做手Q个性装扮的个性推荐的事情,进行了一次分享,主要讲了个性推荐的一些理论和我们的一些实践。本文重点从理论上出发,会提及少量个性装扮的实践。

为什么要做个性推荐这个事情,比较常见的答案就是要做精细化运营。对于个性装扮业务也是一样,因为个性装扮的物品越来越多,表情就有1600多套,加上原创开放平台的上线,各种作品迅猛增加。用户手机端展示的区域有限,为了能让用户在有限的展示区域里面尽量看到自己最喜欢的东西,所以启动了个性推荐。

二. 衡量算法效果

在做个性推荐之前,我们需要先了解衡量这个事情效果的方法。《推荐系统实践》这本书上有讲到好多评估推荐效果的理论指标,其中使用频率最高的还是准确率、召回率和覆盖率。

准确率其实就是推荐给用户的东西里面有多少东西是用户用了的。如果推荐的东西绝大部分都被用户使用了,那就是推荐得准;如果推荐的东西用户都不喜欢,不使用,那就是推荐得不准确。公式如下:

在离线训练挑选模型的时候通常都会使用这些指标来指导我们选择哪个算法模型。推荐算法在线上运营的时候,我们更多的就是看一些实际的业务指标了。比如拉开通的数据对比、拉活跃的数据对比、下载的数据对比。在我们个性装扮的业务场景里面更多的是希望用户能点击看详情或使用,所以我们重点关心的指标是点击曝光率——用点击量除以曝光量。关于衡量指标和数据上一定要有对比,保留一部分流量走原来的逻辑,大部分流量走推荐逻辑,这样就可以进行数据的对比,而且可以在后续的运营和算法更新中,检查算法是不是出问题了。更好的一种做法是保留对比逻辑的那部分小流量也不是固定的某些用户,这样能避免这些用户无法使用体验较好的逻辑,也能避免因为流量用户划分的因素对数据的影响。

三. 协同过滤

推荐最早最经典的算法就是基于物品的协同过滤算法。使用的地方也很多,典型的就有亚马逊网站。其基于的一个理念是:一个用户可能会喜欢跟他曾经喜欢过的物品相似的物品。比如说你比较喜欢《机器学习》这本书,《深度学习》和《机器学习》比较类似,是不是你也很大可能喜欢《深度学习》。

怎么来定义物品是相似的呢?比较自然的想法是看物品的属性信息,比如类型、标签、描述等。也有一些推荐算法就是这么来做的,但是根据这些判断比较依赖标签等信息的客观和完整,不好确定物品之间的相似性。可以参考的一个思路就是对物品的属性数据,根据文本相似度来衡量物品的相似度。

相比这个比较自然的想法,还有一个经典的思路就是协同,根据用户已经产生的行为来计算物品之间的相似度。这个相似度基于的一个假设是:喜欢物品A同时喜欢物品B的人越多,那么A和B的相似度就越高。这样一来根据用户的行为数据计算物品的相似读就有一个公式:

这样的话计算出来的物品相似度是基于用户行为空间的,并不是基于物品属性空间的。经典的案例就是啤酒和尿布,这两个在物品属性空间上风牛马不相及的物品,在用户行为空间上就是相似度特别高的。下面的图就是示例如何从用户行为数据得到物品之间相似度的数据:

上面的公式在有一种场景时比较不合理,就是物品j是一个热门物品,这样的话物品j和所有物品的相似度都很高。热门物品往往没有非热门物品更能体现一个用户的喜好。所以对上面的公式进行优化就有:

从上面的步骤,我们得到了物品之间的相似度,那么怎么给一个具体的用户进行推荐呢,哪个物品又更应该推荐在前面呢?我们可以通过用户对自己已有的物品的喜欢程度和这些物品相似度高的物品进行计算得到一个用户对一个推荐物品的喜欢预估,公式如下:

公式中K的值怎么选取可以根据工程实际来确定一个比较合适的值。K值在非极端情况下,差一点点对结果影响很小。

比如说用户有一本《C++Primer中文版》喜欢度是1.3,有一本《编程之美》喜好度是0.9,下面的示例就是怎么计算即将推荐的物品的先后排序。

这里是在用户行为空间找物品的相似度,然后根据用户已有的物品推荐行为空间上的相似物品。基于物品属性空间相似度的推荐思路其实差不多。

这里其实还有两个问题,一个就是用户冷启动,一个就是物品冷启动。

从预估用户对推荐物品的喜欢程度的公式可以看出,如果用户拥有或喜欢的物品集合是空集,那这个公式就无从算起。针对用户冷启动有很多解决方案,我们通常简单有效的方法就是对冷启动用户推荐热门物品。另外一个思路就是从其他的一些特征(比如用户的性别、年龄、教育程度、文化、职业等)找到相似的用户,然后推荐相似的用户用的多的物品。

物品冷启动就是一个物品新上架的时候,还没有任何用户使用,这个时候在用户行为空间是找不到跟这个物品相似的物品的。所以对这种物品也就无法用上面的方法进行推荐。一个比较简单有效的方法就是在产品逻辑层面增加一个新品模块,新上架物品在新品模块展示推广。也有一些其他的思路,就比如利用物品的属性空间上物品的相似度来进行推荐。

说了基于物品的协同过滤推荐算法,必然少不了要提及基于用户的协同过滤算法。基于用户的协同过滤算法基于的一个理念是:一个用户会喜欢与Ta相似的用户所喜欢的东西。比如你和Ta都是喜欢看科幻片的人,Ta喜欢看《西部世界》,你很大可能也喜欢看《西部世界》。那这里的相似的用户又是怎么定义和衡量的呢。一个比较自然的想法就是用户的属性,比如用户的性别、宗教信仰、年龄、教育程度、文化、职业等。同样的也可以在用户的行为空间上来定义和衡量用户的相似——使用共同物品越多两个用户越相似。

在用户的行为空间上通常使用距离来衡量用户的相似度,典型的距离计算公式有Jaccard公式和余弦相似度,公式分别如下:

Jaccard距离公式

余弦相似度公式

通常会使用余弦相似度公式进行用户相似度的计算。基于一个假设:对非热门物品的喜欢更能代表喜欢的一致,可以得到一个改进的余弦相似度公式,如下:

得到用户的相似度之后,可以通过如下的公式计算用户对即将推荐的物品的喜欢程度预估,公式如下:

这个公式里面也有一个K值需要确定,可以根据工程实际来确定一个。下图是MovieLens数据集在不用K值下的测评性能。

从图中我们可以看到,K值只要在合适区间内,值大小差一点对结果影响很小。同时K值不是越大越好。

协同过滤算法在推荐系统上是很经典和适用很广泛的算法。同样有很多库可以帮助我们使用协同过滤算法,比如spark里面mllib库就有CF算法,比如mahout(The Apache Mahout™ project's goal is tobuild an environment for quickly creating scalable performant machine learningapplications.)也能帮助我们快速的实现一个协同过滤算法。不同的库网上能找到不同的参考代码,这里贴部分mahout实现的关键实现部分代码。

四. Word2Vec的尝试

上面都是传统经典的推荐算法,很多时候会跟其他推荐算法混合到一起使用,有的时候会借鉴这些算法的思想,衍生出一些新的推荐算法,比如在我们表情商城就有参考ItemCF的思想,用Word2Vec进行物品之间的相似度计算,然后推荐的。

用Word2Vec进行推荐的一个处理思想是:把每个表情当作是一个词,用户下载和使用表情的序列当作一句话,使用全部用户的行为数据,用Word2Vec算法模型计算出每个词(表情物品)之间的距离(相似度)然后进行推荐。

Word2vec

Word2Vec网上可以下载到源代码,有兴趣的可以从代码上深入了解。

表情商城的推荐部分流量就是使用Word2Vec进行的。同时更多的场景使用的是GBDT进行推荐。先给出下效果(如下图)

下篇详细分析GBDT推荐和深度学习在推荐上的实验。

原创声明,本文系作者授权云+社区-专栏发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏新智元

麦克阿瑟天才奖得主解码计算机视觉“原罪”:AI 如何认识人类世界

【新智元导读】麦克阿瑟“天才奖”获得者Trevor Paglen训练AI算法,他的展览项目“看不见的图像的研究”(A Study of Invisible Im...

3467
来自专栏AI科技评论

写影评、看图写诗、甚至生成视频,微软亚洲研究院梅涛博士讲解视频理解的最新进展 | CCF-GAIR 2017

AI科技评论按:7月7号,全球人工智能和机器人峰会在深圳如期举办,由CCF主办、雷锋网与香港中文大学(深圳)承办的这次大会共聚集了来自全球30多位AI领域科学家...

3757
来自专栏机器之心

Facebook田渊栋开源游戏平台ELF,简化版《星际争霸》完美测试人工智能

选自Facebook 作者:田渊栋 机器之心编译 参与:李泽南、李亚洲 在人工智能有能力进入现实世界之前,游戏是一种完美的测试环境。此前,谷歌 DeepMind...

26911
来自专栏量子位

DeepMind新智能体架构Unicorn:持续学习能力胜过多个基准智能体

安妮 编译自 arXiv 量子位 出品 | 公众号 QbitAI 出于未知原因,DeepMind为自己研究起的名字总饱含诗意,在学术界中显得尤为画风清奇。 比如...

3285
来自专栏ATYUN订阅号

AI通过读取手写英文笔迹来判断国籍

使用机器学习算法,研究人员可以分解一个人的手写英文文本,以确定这个人来自哪个国家,可以分辨出五个国家:马来西亚,伊朗,中国,印度和孟加拉国。

752
来自专栏CDA数据分析师

Kaggle大神经验分享丨如何用15个月冲到排行榜的首位

在最新的Kaggle用户排行榜上,排名第一位的ID是Bestfitting,他本人叫Shubin Dai。Shubin Dai在两年前加入Kaggle,目前生活...

853
来自专栏专知

2017年深度学习总结:文本和语音应用

【导读】近日,大数据科学家Volodymyr Fedak发布一篇博客,总结了2017年深度学习的发展:深度学习在文本和语音领域的应用。深度学习从发展伊始就在图像...

3274
来自专栏AI科技评论

视频 | Nature 新论文:机器人可以像动物一样进化了

机器人学习的过程就像是我们人类一样,反复练习,更新知识,不断试错,快速迭代,直到最后获得新的技能。

932
来自专栏镁客网

以线虫为模型模拟的神经网络,让机器人无需训练即可自动避开障碍物 | 技术

1666
来自专栏用户3246163的专栏

[脑书笔记]《刻意练习》(上):人人都能成为天才!

这个故事在这本书里给我的印象非常深刻,因为我发现自己以前很多学习都和这个类似: 我不知道,我就是一直在背单词,但是英语还是不好! 我不知道,我就是一直在看书啊,...

691

扫码关注云+社区