闲扯个性推荐

如今做内容分发的App,比如知乎、微博等,用到的重要技术是个性推荐。

所谓个性推荐,是指针对不同的阅读个体,推荐不同的内容,也就是千人千面。这种推荐方式,有别于传统的媒体分发,比如你打开新浪网,整个版面的内容都是固定的,千年不变,谁看都是一个面孔。

个性推荐背后的技术是机器学习,也可以叫做人工智能,因为机器学习本来是AI的一个分支。不过个性推荐一向有自己的领域定位,比如ACM RecSys每年都召开个性推荐学术会议,在业内影响巨大。

早期个性推荐都用的传统机器学习算法,比如逻辑回归、因子分解、随机森林。近两年,以google为代表的更高级的推荐系统,都走向了深度学习,从而越来越与AI总体发展方向趋同。

国内在个性推荐领域做的十分出色的公司包括头条系下的产品(今日头条、抖音),以及知乎、快手等,他们日积月累,搞出了一套先进的推荐系统,吸引了大量用户。可以说个性推荐是这些产品取得成功的至关重要的因素,充分体现了技术影响力。

个性推荐号称千人千面,看起来很美好,但在起步做时,往往十分困难。这个困难倒不在技术层面,而在于业务层面。

首先,要确认推荐目标,不管什么机器学习方法,总要朝着一个目标去优化。这个目标往往在内部并不能达成一致,比如产品希望做留存,运营希望做营收,这就是两个不同的目标。没有一个模型能优化好两个目标,所以技术实现之前,内部各利益方,先要达成一致的推荐目标。

如果实在不能达成一致意见,折中的做法是线上同时跑多套模型,然后对比数据,看哪个模型更好,就用哪个模型。当然在实际中,这个好与坏,要考虑长期影响,太短视的行为,对产品和用户的生态不利。比如,短期内提高了付费率,但是伤害了用户,这是一种杀鸡取卵的行为,也是个性推荐不提倡的。

其次,分发的内容众口难调。就算确认了共同目标,在这个目标下,分发的内容形式,也不一定是各方都认可的。比如,某些同学希望更多的推新领域内容,保持新颖性;另外一些同学希望更多的推熟悉内容,保持用户粘性。在新颖性与熟悉度之间,也要维持一个可以调整的平衡线。

再次,现实中不管运营也好,产品也好,不会完全遵循个性推荐的分发形式,他们总会从不同的角度进行策略干预。比如运营做活动,要重点推活动内容;产品开发了新模块,要重点推荐该模块的内容。所以,淘宝的推荐系统,在排序(ranking)之后加了一层再排序(reranking),允许运营手工干预排序策略。

业务矛盾解决了,技术实现一般还好。技术上的难题一般在于数据管理,包括三方面:

  • 训练数据:用于构建特征工程。用户和内容的各种数据要上报到后台,比如用户画像、内容属性、用户和内容交互的行为数据(观看、评论、付费等)。这些数据是构建机器学习训练样本的基本元素。特征工程里一项重要的工作是从已有数据里挖掘出有效特征,然后进行特征转换,输入给机器学习模型进行训练。
  • 预测数据:模型训练好后,部署到线上进行预测。离线的数据(比如用户与内容属性),实时的数据(比如行为数据),通过离线与实时计算通道,输入给预测服务,这些数据用来推理用户和内容的关系。
  • 数据回流:线上模型影响的任何数据,不管是正反馈(推荐正确的)、负反馈(推荐错误的),还是各种行为数据(观看、付费、订阅),都要上报到统一的后台,数据流形成闭环。

有了正确的数据,就可以组织数据、选择模型,朝着确定的优化目标进行训练了,这个过程不难,一般搞算法的同学都懂。

训练完后,会对模型进行评估。技术指标容易评估,比如AUC等,一眼可知。难在业务指标的评估,比如前面所说的新颖性、熟悉度,业务会衡量这些指标,从而人为影响了模型的可行性。

模型发布到线上,一般采用A/B测试和灰度发布。A/B测试尤其重要,它对比新模型与旧模型,或者新模型与自然流量的分发效果。当然,分发效果如何量化,又需要大家共同确认量化的指标,比如时长、留存、付费等综合指标。

模型部署运行后,一定要对流量进行监控,及时发现异常流量。一方面模型可能有bug,另一方面模型可能被恶意利用,朝着产品不利的方向发展。在这个情况下,要及时切断模型服务,回滚到上一个版本,或恢复到自然流量。

最后,说一说个性推荐涉及的机器学习技术。目前业界大部分公司,用的深度学习来做个性推荐,结合内容embedding技术。深度学习只要数据够大,拟合能力就更强,泛化能力也很好,模型效果相对于传统机器学习技术,有显著的提升。这里有一份知乎的个性推荐介绍文档,值得一览。

我之前带队做一款流量很大的App的个性推荐,一开始用的深度学习。在推荐系统临上线之前,产品要求模型具备可解释性,我们团队集体晕倒。深度学习是个黑盒子,本身不具备可解释性。无奈之下,一夜回退到逻辑回归,可解释性是增强了,效果自然也弱鸡了许多。

Print this entry