一文带你了解推荐系统架构

你是否想过有一天,你看到自己的身体被无数的数据所组合,历史10%,经济23%,财经12%……你仔细一看,有些数据竟然连你都从未注意。当你对新的信息作出反应的时候,你的各个兴趣点发生了变化,有的权重增高,有的权重降低。还出现了新的兴趣点。

一文带你了解推荐系统架构

这个过程听起来很神奇,但用来描绘推荐系统,却是再恰当不过。

推荐是一个协作与进化的过程:

对内容而言,每一个用户既是消费者又是决策者,被认可的内容得以进一步扩散,不被认可的内容则被系统纠偏,以免给更多人造成负面影响。

对用户而言,每一次行为反馈都在不断地完善自己的数字躯体(用户画像),而系统的兴趣探索行为,也在进一步给这幅画像补充更多维度。

一、搜索与推荐的关联

初步了解推荐系统架构,有助于我们理解信息是如何匹配给用户的,用户的选择又是如何影响后续信息分发过程的。

在以前,人们会通过搜索引擎去了解最新资讯。从工程角度来看,推荐系统的架构与搜索系统的架构具有一定的相似度:二者实现的都是信息与用户意图之间的匹配。

搜索系统是将海量内容与用户表意明确的查询词相关联,推荐系统则是将海量内容与用户没有明确表达的偏好相关联。

二、搜索系统的架构

如图1所示,我们通常将搜索系统划分为离线和在线两部分。

其中,离线部分专注于内容的搜集和处理。搜索引擎的爬虫系统会从海量网站上抓取原始内容,并针对搜索系统的不同要求建立不同的索引体系。索引是一个基于关键词的序列,每一个关键词对应一长串提及该关键词的内容(倒排索引)。比如,“教育”这个词命中内容1、2、3,“NBA”命中了另外一批内容1、2、4。

在线部分负责响应用户的搜索请求,完成内容的筛选和排序,并最终把结果返回给用户。当用户输入搜索词后,系统会首先对搜索词进行分词、变换、扩充、纠错等处理过程,以便更好地理解用户的搜索意图。

如用户在搜索引擎中,只输入了“NBA”一个关键词,系统发现“NBA”和“美职篮”是同义词,就会将其扩充,以便两个词都可以应用在索引的查询上。又如,你输入了“NB2K”,系统认为你的输入有误,就会将其纠正为“NBA2K”,并首先返回相应结果。

一文带你了解推荐系统架构

图1

经历完搜索词处理后,将进入召回环节。系统通过多种方式从不同的索引数据里获得候选集合。在图1中,就进行了一个“2×2”的过程,两个搜索词“NBA”与“美职篮”分别查询了全量的索引数据和时效性索引数据,一共获得了8篇内容的集合。

召回得到的候选集合会继续进入排序环节,通过更精细的计算模型对每一篇候选内容进行分值计算,从而获得最终结果(如图1中的文章10和文章1)。在展示给用户之前,搜索结果还需要经过规则干预这一环节。

规则通常服务于特定的产品目的,对计算产出的内容进行最终的调整。假如我们有这样一条“官方网站保护规则:确保所有品牌名搜索词都可以优先返回官网”,那么规则层就会在文章10和文章1之前,强行插入NBA官方网站返回给用户。

在结果展示给用户之后,用户的点击反馈会影响到排序环节的模型。在图2中,用户在展示给他的两篇内容中只点击了文章10,这一行为会被模型记录为统计文章10和文章1在搜索词“NBA”下的表现情况。如果在“NBA”的搜索结果中,更多人点击了文章10,那么文章10在后续计算中的权重会升高,从而获得更靠前的展现位置(即点击调权的过程)。

三、推荐系统工作方式

以搜索系统为参考基础,我们可以更好地理解推荐系统的工作方式。推荐系统的离线部分同样需要通过各种方式来获取待推荐的内容(如用户提交、协议同步、数据库导入等)。

对内容平台来说,其内容的结构化要远胜于推荐引擎爬虫抓取的内容。之后,离线系统依据推荐引擎对信息的不同理解维度对这些内容进行索引化处理,如话题、类目、实体词等。图2中展示了两个维度:分类维度和实体词维度。在线部分,其理亦然:量化用户的请求,完成内容的筛选和排序。

推荐与搜索最大的差异在于用户表意是否明确。因此,推荐系统需要尽可能地完善用户的长期画像(对哪些类目、实体词、话题感兴趣)和短期场景(时间、地点信息),这样才能够在用户每一次请求时更好地揣摩用户当下的意图,以进行后续的内容匹配。

当用户打开内容推荐应用时,提交给系统的信息包括时间、地理位置、网络环境、手机设备型号、登录用户ID(身份认证)等。基于用户ID,推荐系统会从数据库中取出用户的画像数据(User Profile)。

如图2所示的推荐系统支持分类和实体词两个维度的用户画像:在分类维度,用户对体育和科技内容感兴趣;在实体词维度,用户对NBA感兴趣。基于体育、科技、NBA,推荐系统会进行下一步的内容召回和排序操作。

一文带你了解推荐系统架构

图2

召回和排序操作与搜索系统比较相似,系统基于类目查询和实体词查询分别获得候选内容集合。排序模块按照特定预估目标(如点击导向、互动导向、停留时长导向等)对候选集统一排序,并经过规则层的处理后最终反馈给用户。

值得注意的是,在推荐系统中,用户的行为不仅像在搜索系统中那样具有针对内容价值的群体评估意义,而且还具有针对自身画像的个体进化意义。在群体评估意义层面,每一个读者就像是一名陪审团成员,通过自己的行为来决定某篇内容的好坏。比如某篇关于NBA的内容,如果连偏好NBA的用户都不怎么点击,那么这篇内容在“NBA”这个实体词下的权重自然应该降低。这一部分的应用与搜索场景比较类似。

在个体进化意义层面,用户的阅读反馈行为在持续改进着自身的画像。比如,用户是热火队的粉丝,那么在行为层他就会更多地点击与热火队相关的NBA内容,系统捕捉到这一信息后,就会在他的画像中补充“热火”这个实体词,从而影响后续的推荐内容流。

四、YouTube和Netflix推荐架构参考

上述系统架构描述,为降低理解成本尽可能地简化了各个环节的算法复杂度。事实上,随着深度学习、神经网络的逐步工业化应用,尽管整体架构不变,但是各个环节的复杂度和算法的理解成本已经相对较高了。

以YouTube(世界上最大的视频网站)为例,2016年其已经将深度学习应用于自己的系统中,并获得了显著的效果。其系统架构如下:

YouTube的推荐架构,包含了两个神经网络,分别用于产出候选集(召回)和排序。召回层的神经网络将用户在YouTube上的历史行为作为输入内容,完成从百万量级到百量级的候选内容筛选。但其并非唯一的召回方式,YouTube历史上应用有效的其他召回方式也同时在线上运行,如基于用户观看历史相似性、基于搜索行为、基于协同行为等方式。多种召回方式共同构建的视频候选集会被一并送进排序环节。在排序环节中,神经网络基于用户个体的特征和视频的特征对候选集进行打分,最后给用户返回得分靠前的十余个视频。

一文带你了解推荐系统架构

图3

相对YouTube较为抽象简化的数据流图,Netflix(网飞)的架构图就更复杂一些了,但整体上仍然保持了离线模型训练、在线召回排序、更新用户画像与内容画像的基础结构。系统在实时响应用户请求的在线层和负责数据处理、模型训练的离线层之间增加了NearLine(近线)层,以实现计算规模和时效性的折中。

一文带你了解推荐系统架构

图4

在数据流上,用户的所有动作(播放、评分、浏览等行为)共同构成了在线层的输入。根据业务需求,Netflix将用户行为拆分为数据和事件。其中,数据的时间敏感度更低,事件的时间敏感度更高。比如,在用户观看一部电影后,如果希望及时更新用户的推荐列表,那么这次观看动作就会被视作事件型进入NearLine层,以更快地更新用户画像数据。用户的请求经由多种召回方式从离线索引中获取结果后,经过在线的模型排序计算,将最终结果返回给用户。

作者:小武,微信公众号:一个数据人的自留地,一个助力数据人成长的大家庭,帮助对数据感兴趣的伙伴们明确学习方向、精准提升技能。在这片数据人的自留地,让我们一起探索数据领域的神奇奥秘。

本文由 新媒体之家 作者:一个数据人的自留地 发表,其版权均为原作者所有,文章内容系作者个人观点,不代表 新媒体之家 对观点赞同或支持,未经许可,请勿转载,题图来自Unsplash,基于CC0协议。
0

发表评论