当你打开一个资讯APP刷新闻时,有没有想过,系统是如何迅速推送给你你想看的内容?资讯APP背后有一个巨大的内容池,系统是如何判断要不要将某条资讯推送给你的呢?这就是笔者今天想跟大家探讨的问题——推荐策略中的召回。
召回是什么
推荐系统如何根据已有的用户画像和内容画像去推荐,涉及到两个关键问题:召回和排序。
“召回(match)”指从全量信息集合中触发尽可能多的正确结果,并将结果返回给“排序”。
召回的方式有多种:协同过滤、主题模型、内容召回和热点召回等,而“排序(rank)“则是对所有召回的内容进行打分排序,选出得分最高的几个结果推荐给用户。
图1 推荐系统的算法流程
在搜索系统中,用户会输入明确的搜索词,根据搜索词进行内容的召回和呈现即可,但在推荐系统中,用户没有一个明确的检索词(Query)输入,推荐系统需要做的,就是根据用户画像、内容画像等各种信息为用户推荐他可能感兴趣的内容。
另外,由于没有明确的检索词,推荐系统就需要从整个信息集合中挑选出尽可能多的相关结果,同时又需要剔除相关性较弱的结果,降低排序阶段的工作量。
怎样的召回策略是好的
召回率(Recall)=系统检索到的相关内容 / 系统所有相关的内容总数准确率(Precision)=系统检索到的相关内容 / 系统所有检索到的内容总数。
以搜索为例,当用户搜索“北京大学”时,想看到北大相关的网站、新闻等,系统返回了以下三个网页:
a. 北京大学保安考上研究生;
b. 北京互联网工作招聘;
c. 大学生活是什么样的;
可以看到,只有a是用户真正想看到的,其他两个和用户搜索词无关,而事实上数据库里还有这种网页:
d. 北大开学季;
e. 未名湖的景色;
d、e这两个网页没被搜索到,但它们和“北京大学”的相关度其实是超过b、c的,也就是应该被搜索(被召回)到但实际并没有显示在结果里的,所以,这个系统的:
召回率 = a / (a + d + e)=0.33;
准确率 = a /(a + b + c)=0.33。
这是搜索情境下的召回率和准确率,而“推荐”其实就是没有检索词输入时的搜索,例如,用户并没有输入“北京大学”这样的关键词,但其实他是北京大学的学生,对自己学校相关的新闻很感兴趣,推荐系统的召回就是要根据用户画像、内容画像等各种信息,为用户提供他感兴趣的相关内容,所以也存在召回率和准确率的问题。
召回率和准确率有时存在相互制衡的情况,好的召回策略应该在保证高准确率的情况下也保证高召回率。
当然,召回率和准确率也是存在一定关系的,而我们在做实际项目的优化目标通常是希望用户所检索的内容能够在召回率和准确率两方面都表现都好。
举个例子(或许不够准确,仅供参考)如表1,机器在给用户推荐内容的时候,会出现A(准确并召回)、B(准确不召回)、C(不准确召回)、D(不准确不召回)四种情况。那么,最理想的就是A、C两种情况。
推荐系统如何召回
召回策略主要包含两大类,即基于内容匹配的召回和基于系统过滤的召回。
内容匹配即将用户画像与内容画像进行匹配,又分为基于内容标签的匹配和基于知识的匹配。
例如,A用户的用户画像中有一条标签是“杨幂的粉丝”,那么在他看了《绣春刀2》这部杨幂主演的电影后,可以为他推荐杨幂主演的其他电影或电视剧,这就是“基于内容标签的匹配”。
“基于知识的匹配”则更进一步,需要系统存储一条“知识”——《绣春刀2》是《绣春刀1》的续集,这样就可以为看过《绣春刀2》的用户推荐《绣春刀1》。基于内容匹配的召回较为简单、刻板,召回率较高,但准确率较低(因为标签匹配并不一定代表真的感兴趣),比较适用于冷启动的语义环境。
2. 基于协同过滤的召回
如果仅使用上述较简单的召回策略,推荐内容会较为单一,目前业界最常用的基于协同过滤的召回,它又分为基于用户、基于项目和基于模型的协同过滤。
其中,基于用户(User-based)的协同推荐是最基础的,它的基础假设是“相似的人会有相同的喜好”,推荐方法是,发现与用户相似的其他用户,用用户的浏览记录做相互推荐。
例如,通过浏览记录发现用户一与用户二的偏好类似,就将用户一点击的内容推送给用户二。
图2 基于用户的推荐
基于项目(Item-based)的协同过滤中的“项目”可以视场景定为信息流产品中的“内容”或者电商平台中的“商品”,其基础假设是“喜欢一个物品的用户会喜欢相似的物品”计算项目之间的相似性,再根据用户的历史偏好信息将类似的物品推荐给该用户。
图3 基于项目的推荐
基于模型的协同过滤推荐(Model-based)就是基于样本的用户喜好信息,训练一个推荐模型,然后根据实时的用户喜好的信息进行预测推荐。
总体来说,基于协同过滤的召回即建立用户和内容间的行为矩阵,依据“相似性”进行分发。这种方式准确率较高,但存在一定程度的冷启动问题。
在实际运用中,采用单一召回策略的推荐结果实际会非常粗糙,通用的解决方法是将规则打散,将上述几种召回方式中提炼到的各种细小特征赋予权重,分别打分,并计算总分值,预测CTR。
例如,根据内容匹配召回策略,用户A和内容甲的标签匹配度为0.6,同时,根据协同过滤召回策略,应该将内容甲推荐给用户A的可能性为0.7,那么就为0.6和0.7这两个数值分别赋予权重(这个权重可能会根据算法的具体情况来确定),得出总分,用它来预测用户可能点击的概率,从而决定是否返回该结果。
今日头条的召回策略
今日头条作为业界推荐系统方面的顶级选手,不免有人会好奇,它的召回策略是怎样的?
今日头条的算法架构师曾在接受采访时表示,今日头条有一个世界范围内比较大的在线训练推荐模型,包括几百亿特征和几十亿的向量特征。但因为头条目前的内容量非常大,加上小视频内容有千万级别,推荐系统不可能所有内容全部由模型预估。所以需要设计一些召回策略,从庞大内容中筛选一个模型组成内容库。
召回策略种类有很多,今日头条主要用的是倒排的思路。离线维护一个倒排,这个倒排的key可以是分类,topic,实体,来源等,排序考虑热度、新鲜度、动作等。线上召回可以迅速从倒排中根据用户兴趣标签对内容做截断,高效地从很大的内容库中筛选比较靠谱的一小部分内容。基于召回策略,把一个海量、无法把握的内容库,变成一个相对小、可以把握的内容库,再进入推荐模型。这样有效平衡了计算成本和效果。
参考文献
【1】闫泽华,《内容算法》,中信出版集团
【2】CSDN博客:信息流推荐算法实践 &深入 https://blog.csdn.net/dengxing1234/article/details/79756265
【3】IBM官网资料探索推荐引擎内部的秘密,第 1 部分: 推荐引擎初探
【4】今日头条推荐算法原理首公开,头条首席算法架构师带来详细解读 https://www.leiphone.com/news/201801/XlIxFZ5W3j8MvaEL.html