我曾在不同公司⾥都听到过,他们的产品经理或者⼤佬问过这样的问题:我们的推荐系统标签够不够?
相信你也遇到过类似的问题。这其实是⼀个很⼤的误区:基于内容的推荐系统,标签只是很⼩⼀部分。
⽽且就算是标签,衡量质量的⽅式也不是数⽬够不够;所以,今天我要讲的内容,就是说⼀说脱离标签定式思维的内容推荐。
为什么要做好内容推荐
所谓的基于内容推荐,通俗⼀点来讲,就是⼀个包装成推荐系统的信息检索系统。这听上去有点残酷,但通常⼀个复杂的推荐系统很可能是从基于内容推荐成⻓起来的。
可以说,基于内容的推荐系统是⼀个推荐系统的孩童时代,所以,我们不能让⾃⼰的推荐系统输在起跑线上,得富养才⾏。那么,⾸先我就来讲⼀讲如何养成⼀个基于内容的推荐系统。
为什么基于内容的推荐系统这么重要呢?因为内容数据⾮常易得,哪怕是在⼀个产品刚刚上线,⽤⼼找的话总能找到⼀些可以使⽤的内容,不需要有⽤户⾏为数据就能够做出推荐系统的第⼀版。
内容数据尤其是⽂本,只要深⼊挖掘,就可以挖掘出⼀些很有⽤的信息供推荐系统使⽤。
另外,著名的流媒体⾳乐⽹站Pandora,其⾳乐推荐系统背后的“⾳乐基因⼯程”,实质上就是⼈⼯为⾳乐标注了各种维度的属性,这样,即便使⽤基于内容推荐的⽅式,也做出了很好的推荐效果。
听上去,上⾯这段话特别像是在安慰还处在冷启动阶段的你,事实上呢,其实并不全是,内容推荐的⽅式还有它的必要性。推荐系统总是需要接⼊新的物品,这些新的物品在⼀开始没有任何展示机会,显然就没有⽤户反馈,这时候只有内容能帮它。
基于内容的推荐能把这些新物品找机会推荐出去,从⽽获得⼀些展示机会,积累⽤户反馈、⾛上巅峰、占据热⻔排⾏榜。要把基于内容的推荐做好,需要做好“抓、洗、挖、算”四⻔功课。它们分别是对应了下⾯的内容。
1.抓:⼤⼚们从来不公开说的⼀件事是,他们⼀直在持续抓数据丰富⾃⼰的内容,所以做好⼀个基于内容的推荐,抓取数据补充内容源,增加分析的维度,两者必不可少。
2.洗:抓来的数据,相当于捡别⼈掉地上的东⻄吃,我们也得注意卫⽣,洗洗更健康,数据也⼀样,冗余的内容、垃圾内容、政治⾊情等敏感内容等等都需要被洗出去。
3.挖:不管是抓来的数据,还是⾃家的数据,如果不深⼊挖掘,那就和捧着⾦饭碗去要饭⼀样,浪费了⼤好资源。可以说,很多推荐系统提升效果并不是⽤了更复杂的推荐算法,⽽是对内容的挖掘做得更加深⼊。
4.算:匹配⽤户的兴趣和物品的属性,计算出更合理的相关性,这是推荐系统本身的使命,不仅仅是基于内容的推荐才要做的。
内容推荐系统框架
内容这⼀端:内容源经过内容分析,得到结构化的内容库和内容模型,也就是物品画像。⽤户这⼀端:⽤户看过推荐列表后,会产⽣⽤户⾏为数据,结合物品画像,经过⽤户分析得到⽤户画像。
以后对于那些没有给⽤户推荐过的新内容,经过相同的内容分析过程后就可以经过推荐算法匹配,计算得到新的推荐列表给⽤户。如此周⽽复始,永不停息。
内容源
在互联⽹中,抓数据是⼀件可做不可说的事情,哪怕是市值⼏千亿的⼤⼚,也有专⻔的⼩分队抓数据,补充推荐系统每天的内容消耗。因为,只有当内容有多样性了,⼀个推荐系统才有存在的合法性,所以⼤⼚职⼯们抓数据也是为了保住⾃⼰的饭碗。
爬⾍技术本身⾮常复杂、⾮常有学问,⽐推荐算法难多了,这⾥就不展开讲了。
不论是抓来的数据还是⾃家⽤户产⽣的数据,都离不开清洗数据。由于各家都在相互借鉴来借鉴去,所以抓到重复的内容也是很有可能的,去重与识别垃圾内容、⾊情内容、政治敏感内容等都是必修课。
关于这个环节的边⻆算法,我们在后⾯的⽂章中会专⻔花⼀些篇幅来讲。
内容分析和⽤户分析
基于内容的推荐,最重要的不是推荐算法,⽽是内容挖掘和分析。内容挖掘越深⼊,哪怕早期推荐算法仅仅是⾮常硬的规则,也能取得不俗的效果。举个例⼦,如果推荐物品是短视频,我们分⼏种情况看:
1.如果短视频本身没有任何结构化信息,如果不挖掘内容,那么除了强推或者随机⼩流量,没有别的合理曝光逻辑了;
2.如果对视频的⽂本描述,⽐如标题等能够有内容分类,⽐如是娱乐类,那么对于喜欢娱乐的⽤户来说就很合理;
3.如果能够进⼀步分析⽂本的主题,那么对于类似主题感兴趣的⽤户就可能得到展示;
4.如果还能识别出内容中主⻆是吴亦凡,那就更精准锁定⼀部分⽤户了;
5.如果再对内容本身做到嵌⼊分析,那么潜藏的语义信息也全部抓住,更能表达内容了。举这个例⼦是为了说明:随着内容分析的深⼊,能抓住的⽤户群体就越细致,推荐的转化率就越⾼,⽤户对产品的好感度也就增加了。上⼀篇中我列举了⽂本数据——这也是内容数据最常⻅形式的分析⽅法。内容分析的产出有两个:
1.结构化内容库;
2.内容分析模型。
结构化的内容库,最重要的⽤途是结合⽤户反馈⾏为去学习⽤户画像,具体的⽅法在上⼀篇中已经介绍了。容易被忽略的是第⼆个⽤途,在内容分析过程中得到的模型,⽐如说:
1.分类器模型;
2.主题模型;
3.实体识别模型;
4.嵌⼊模型。
这些模型主要⽤在:当新的物品刚刚进⼊时,需要实时地被推荐出去,这时候对内容的实时分析,提取结构化内容,再于⽤户画像匹配。
内容推荐算法
对于基于内容的推荐系统,最简单的推荐算法当然是计算相似性即可,⽤户的画像内容就表示为稀疏的向量,同时内容端也有对应的稀疏向量,两者之间计算余弦相似度,根据相似度对推荐物品排序。
你别嫌糙,如果你内容分析做得深⼊的话,通常效果还不错,⽽且基于内容的推荐天然有⼀个优点:可解释性⾮常强。
如果再进⼀步,要更好地利⽤内容中的结构化信息,因为⼀个直观的认识是:不同字段的重要性不同。
⽐如说,⼀篇新闻,正⽂和标题中分析出⼀个⼈物名,评论中也分析出其他⽤户讨论提及的⼀些⼈物名,都可以⽤于推荐。直观上新闻的正⽂和标题中更重要。
那么,我们可以借鉴信息检索中的相关性计算⽅法来做推荐匹配计算:BM25F算法。常⽤的开源搜索引擎如Lucene中已经实现了经典的BM25F算法,直接拿来使⽤即可。
前⾯提到的两种办法虽然可以做到快速实现、快速上线,但实际上都不属于机器学习⽅法,因为没有考虑推荐的⽬标,⽽我们在之前的专栏中就专⻔强调了⽬标思维,那么,按照机器学习思路该怎么做呢?
⼀种最典型的场景:提⾼某种⾏为的转化率,如点击、收藏、转发等。那么标准的做法是:收集这类⾏为的⽇志数据,转换成训练样本,训练预估模型。
每⼀条样本由两部分构成:⼀部分是特征,包含⽤户端的画像内容,物品端的结构化内容,可选的还有⽇志记录时⼀些上下⽂场景信息,如时间、地理位置、