浅谈推荐算法

作者: | 更新日期:

之前参加了虚拟项目,核心是推荐算法,这里简单谈谈推荐算法。

本文首发于公众号:天空的代码世界,微信号:tiankonguse

大家好,这里是tiankonguse的公众号(tiankonguse-code)。
tiankonguse曾是一名ACMer,现在是鹅厂视频部门的后台开发。
这里主要记录算法,数学,计算机技术等好玩的东西。

这篇文章从公众号tiankonguse-code自动同步过来。
如果转载请加上署名:公众号tiankonguse-code,并附上公众号二维码,谢谢。

零、背景

16年底的时候,公司内部去北京培训了一周。
期间需要做一个虚拟项目,我们组的课题就是推荐系统。
当时对推荐领域进行了了解,并准备写推荐的文章,由于我并没有真实做过推荐系统,所以写了一半就半途而废了。
现在快一年了,整理书签的时候看到收藏的文章,这里梳理一下。 由于没有实战经验,这里写的可能不好吧。

一、最初的使用场景

当用户有明确的目标时,可以使用搜索功能来精确找到自己想要的,之前有文章《简单聊聊搜索》介绍了搜索的基本原理。

当时有时候我们没有自己的目标,比如女孩子经常去逛淘宝,并没有明确的目标,只是逛逛看看有什么不错的商品。
淘宝为了提高营收额,就想办法猜测你可能喜欢什么,然后展现在你面前,你一看正是自己很喜欢,从而双方都很满意得到自己想要的东西了。
哦,不是你,是女孩子得到自己想要的东西了,你付账就行了。

淘宝猜测你可能喜欢什么的技术就是推荐技术,所以最初推荐技术应用在电子商务领域。

上面这句话可能比较抽象,我举几个例子大家就清楚了。

第一个例子是假设你在亚马逊购买了《UNIX网络编程》这本书。
结果买完的时候发现旁边推荐的有《UNIX环境高级编程》这本书,于是你买走了。
这就是基于物品特征的推荐系统,买什么东西时还会推荐给你类似的东西。

另一个例子是假设有一个计算机系的新生买了《UNIX网络编程》这两本书。
你也是计算系的新生,于是推荐系统就给你推荐了《UNIX网络编程》这本书,于是你买走了。
这就是基于用户特征的推荐系统,你是什么样的人就给你推荐类似人买的东西。

最后一个例子就是啤酒与尿布了。
你买了啤酒,发现旁边摆放的有尿布,于是你顺手把尿布买走了。
这个就是基于用户与物品关系的推荐系统,看着和上面看两个例子有点类似,但是本质上是有区别的。

这三个例子里面其实使用了不同的方法来给你推荐商品,但是目的是一样的:让你尽量多的买东西,从而商家提高营收。

二、现在的使用场景

推荐技术在电商领域已经发展了几十年了,但是其他领域深入使用这个技术的并不多。
记得2011年还在上大学的时候,大学老师自己有课题,有一个是搞数据挖掘的,经常蛊惑我们加入她的课题,大多数人都在玩游戏拒绝了她。
没想到后来这个技术还真火了。

2012年今日头条出世,2014年到2015年彻底火爆起来,推荐技术从而引起各大公司的重视,推荐职位水涨船高,人人都称自己了解推荐技术了。

于是各大公司都尝试做了自己的推荐系统,又由于现在是移动应用的时代。
大多数应用不是卖东西,所以目的变成了想办法把用户留在自己的app上,至于怎么赚钱以后再说。

新闻领域今日头条算是一匹黑马,刚出来的时候大家都没在意,发现不对劲的时候已经来不及了。
音乐领域网易音乐也是嗅觉比较敏感,快速使用推荐技术推送懂你的音乐,大家都认为网易音乐最懂自己。
视频领域起步就较晚了,前几年在和优酷斗争,后两年在和爱奇艺斗争,进入推荐之战自然就晚了。

当然,之所以新闻最容易做推荐,视频不容易做推荐也是有原因的。
新闻可以自动化分析文章是什么类型的,专业术语叫做提取特征。
视频的话就比较难了,目前大家还都是拼人工打标签呢,后续视频能自动提取特征的话,视频的推荐才能真正火爆起来吧。

二、推荐是怎么实现的

其实在第一小节举得例子已经大概可以看出三个方向了:物品特征,用户特征,用户与物品的关系特征。

当一个问题有多个解决方案时,那每个方案肯定有自己的优点与缺点。
所以上面的三个方向肯定都有自己的局限性的。
下面我们分别来看看这三个方向是怎么实现的以及有什么局限性吧。

1. 物品特征

基于物品特征推荐的原理是根据之前你看过或者买过一件物品这个信息,推送给你类似的物品。

根据上面的描述,我们可以看出来需要三个个信息:你之前的行为,每个物品的信息特征,物品之间的关系。
这三个信息都是已经存在的固定信息,所以这种推荐的优点是可以预先离线计算好所有数据的关系,缺点就是对于新用户或者缺乏信息特征的物品就不能很好的精确推荐了。

先来看看上面的优点中的离线计算是什么意思呢?计算的是什么呢?
我们知道推荐给我们的是物品列表,所以计算的就是与我们相关的有序的物品列表。

这个顺序与什么相关呢?
当然是与我们之前买过看过的物品的相似度相关。
越相似就应该越往前,越往后的越往后。
所以我们可以根据之前点击过的物品给所有的物品计算相似分,分高的优先推荐。

这种方法好处是不需要知道用户的特征,只需要用户对物品的行为就可以计算出需要推荐的物品了。
另一个好处时对于新物品,可以自动提取特征,然后计算出相似度,也就是不存在新物品的冷启动问题。
但是对于新用户,由于之前没有任何行为,所以就不知道推荐什么了,所以就存在新用户冷启动问题了。

上面说的好处中涉及两个技术点:1.计算相似度打综合分,2.对新物品自动提取特征。

计算相似度的算法很多,比如欧几里德距离法,皮尔逊相关系数法,余弦相似度,余弦扩展相似度等等,这里不做深入介绍。
计算完相似度还需要打分,因为相似度是物品与物品之间的,我们需要和这个人的行为关联起来。

对新物品自动提取特征在文本领域已经非常成熟,甚至自动生成标题,自动生成标签的黑科技都出现了。
而对于视频这种富媒体物品,目前还有没很好的技术来自动提取特征,所以视频领域使用基于物品特征推荐成本就很高了。
成本高在哪里呢?
视频不能自动提取特征就需要人工赋予特征,这是体力活。

另外由于物品的数据量可能很大或者很小,或者特征不够丰富复杂,可能导致相似度的效果不是很好。

2. 基于用户特征

基于用户特征和基于物品特征是对称的,这里就不说那么多了。 原理是根据用户的信息计算出和你信息类似的人看了什么,你没看,就推给你。

基于用户特征也需要计算用户之间的相似度以及对用户进行特征提取。

用户的信息在微博或者电商领域可能比较完善,但是在媒体领域就显得不足了。
所以媒体领域没办法获得你的信息,但是可以给你你的行为反向猜测你的信息。
比如根据你的用户画像猜测你的性别,年龄,所在地区等等,然后再使用猜测的信息来给你推荐内容。
这种方法其实挺不错的,推给你内容了,根据你的反馈可以再来完善对你的猜测,从而形成良性循环。

这里也有冷启动问题,新用户可能缺乏信息,新物品也没人看过,从而导致推荐效果不是很好。

3. 基于用户与物品的关系

上面的两种方法都是基于物品相似或者用户相似进行关联推荐的。
有时候两个不关联的物品或者用户之间也存在某种不可描述的规律。

如果我们能够分析用户与物品的关系,分析出这种规律,那推荐效果就会更好。
这种使用用户与物品的关系涉及的推荐技术就是协同过滤推荐,俗称CF推荐。

由于是关系,自然就设计到基于用户关系或者物品关系了。
这两个关系和前两点的思想类似,不过使用关系代替特征了,所以这里就不多说了。

由于协同过滤推荐和基于用户或者物品特征推荐类似,所以面临的问题也是类似的。
新用户和新物品没有关系而不能得到较好的推荐效果。

三、总结

由于每种推荐都有自己的优点与缺点,我们可以综合使用这几种推荐技术,从而达到最优情况。
另外对于新用户冷启动问题,我们使用全网最热来对用于进行预热。
而对于新物品,我们使用人工打标签以及对新数据依靠时间这个特征提高权重从而提高曝光几率进行预热。

推荐系统其实还有一个很大的问题就是你点击某种类型的物品多了,系统就越会给你推荐相关的内容。
这个对用户来说形成了恶性循环,满屏都是相关内容,因此很多人卸载了今日头条。

对了现在开通了博客、公众号、算法小密圈、IT技术交流微信群。
要加微信群的可以加我微信,我拉大家进群。
比较好玩的算法放在小密圈发布。
欢迎大家加入看各种算法的思路。

长按图片关注公众号,阅读不一样的技术文章。

本文首发于公众号:天空的代码世界,微信号:tiankonguse
如果你想留言,可以在微信里面关注公众号进行留言。

关注公众号,接收最新消息

tiankonguse +
穿越