导读:在陌陌的社交推荐体系中,模型化Recall在召回模块中起到了重要作用。本文主要介绍模型化Recall在陌陌社交推荐中的技术探索和具体落地应用,重点介绍基于用户场景行为驱动、用户社交关系网络和动态语义内容的个性化召回通道构建方式,用户实时性兴趣偏好的捕获方法及如何提高分发场景中用户的社交匹配性。主要内容包括:
-
陌陌社交场景概述
-
模型化召回技术简介
-
模型化召回在陌陌的探索和应用
-
展望&思考
陌陌社交场景概述
首先和大家分享陌陌的社交场景的特点。
1. 关于陌陌
陌陌是一款基于地理位置的移动社交应用,是中国领先的开放式社交平台之一。用户在陌陌APP可以通过字符,文字,语音,图片等来展示自己,基于地理位置来发现附近的人,并且加入附近的群组,我们希望能够建立一种真实、有效和健康的社交关系。
这里展示了陌陌的主要发展历程:陌陌公司在2011年成立,2014年在美国上市,在2018年月活已经过亿,并全资收购了探探,进一步巩固了陌陌在开放式社交领域中的地位。
2. 陌陌社交主场景
陌陌的社交推荐主场景为附近动态和附近的人。接下来,我们简单介绍下这两个场景的基本特点。
附近动态场景处于陌陌APP首页的首帧,附近动态场景强调的是以内容为载体的用户社交匹配。用户发布的动态,充当了一个桥梁作用,将用户和动态发布者连接起来。在动态场景本身,用户可以对动态进行点赞、评论和对话的操作。在动态下方,存在这种点赞、评论和对话的这种按钮。如果用户点击左上角的头像,可以进入发布者的个人页面,如最左侧这个图,我们可以看到发布者的一些高清头像,个人资料和过往动态信息等,并且可以在这里进行一些对话和关注等操作。另外点击动态本身,我们会进入动态详情页,可以看到动态的评论情况。在动态底部还有一个相似动态推荐的上拉按钮,如果你喜欢相似推荐的动态,可以拉起浏览到和当前动态相似的一些其他动态情况。
附近的人场景在陌陌APP首页的第二帧,在这个场景下,我们强调的是以地理位置为依托的用户社交匹配,通过点击该场景下的用户展示图像,可以进入展示用户的个人主页,看到用户更丰富的一些高清头像、个人资料、或者是一些过往动态,并进行对话或关注等操作。我们一直致力于提高附近动态和附近的人场景的社交推荐效果,提高用户的浏览体验。
模型化召回技术简介
1. 模型化召回
接下来,我们简单介绍一下模型化召回技术。在推荐系统中,召回模块是非常重要的一环。召回策略可以简单的分为功能性召回、热门召回、业务召回和个性化召回等。个性化召回能够有效的把握用户的兴趣偏好,在整个召回系统中处于十分重要的位置。
传统的个性化召回主要包括重定向召回、协同过滤类召回、内容偏好类召回等。这类召回算法一般实现简单、表征能力有限、泛化能力相对不足。近年来崛起的模型化Embedding检索类召回,比如图表征召回、浅层模型化召回、深度匹配模型化召回、内容语义模型化召回等,则具有更好的表征能力和更强的泛化能力,在推荐系统中受到了越来越多的重视。
2. 模型化召回的基本框架
模型化召回的基本框架可以分为两部分,包括召回模型的学习与更新,以及线上的Ann检索服务。在召回模型的学习与更新阶段,主要是基于用户平台行为信息,针对特定的学习目标,完成基于表征学习的召回模型训练和更新,该模型能够产出有效的高层User表征向量和Item表征向量。从学习目标来看,常见的召回模型包括内容语义类、行为偏好类、关系匹配类等。
在线上服务阶段,对于用户请求,采用模型实时推理或KV查询的方式获得User的表征向量,然后通过Ann检索服务得到近似的TopK个Item并进行召回。
常见的Ann检索算法有以下几类,包括:矢量量化方法pq及其变种、基于树的Ball-Tree算法、局部敏感哈希、基于近邻图的HNSW等。
3. 模型化召回的技术演进
在工业界,召回模型技术演进在最近几年的发展尤其迅速。
包括微软、谷歌、Facebook、Airbnb、阿里、Pinterest等在内的多家公司,基于自身的业务场景,从2013年到2020年,提出了多种不同结构类型的召回模型,如“DSSM”、”Youtube-DNN”、“MIND”等。他们从不同的场景问题出发,设计不同的模型结构,有着不同的侧重点,从多个维度推动了召回模型的技术演进。在工业界,召回模型的发展历程是由多家公司共同推动的结果。
模型化召回在陌陌的探索和应用
1. 陌陌社交推荐的技术体系
在陌陌的推荐场景中,我们强调的是用户间的社交匹配性,同时由于动态场景的存在,动态本身具有较强的内容属性,这导致用户又具有一定的内容消费性。这种情况造成了陌陌推荐场景的复杂性:我们需要同时满足用户的内容消费性和社交匹配性。
陌陌的社交推荐体系主要包括召回、粗排、精排、重排等环节。这里我们重点介绍在召回阶段,我们如何通过模型化Recall来满足用户的个性化需求。在模型化召回的过程中,我们重点关注并解决以下几个问题:如何体现用户的长期偏好和实时偏好;如何体现用户和内容的匹配性及用户之间的社交匹配性;如何满足分发的多样性等问题。
下面我们重点说一下针对这些问题,如何构建在陌陌社交推荐场景的模型化召回通道。
首先,在平台中,我们可以得到用户的动态发布信息、场景互动信息和平台社交关系信息。
基于动态发布内容本身,我们构建动态内容语义模型,得到动态的内容语义表征,这种内容表征对于消费内容的匹配性具有重要价值,在线上应用进行相似动态检索召回时,能够毫秒级的反映出用户的实时行为变化,具有捕获用户实时偏好的特点。
针对用户场景行为,比如点击、点赞、评论、招呼等,我们通过构建用户的互动偏好模型,学习能够刻画用户偏好的表征向量;在模型的构建中,我们通过对用户的长短期行为序列进行建模,来捕获用户的长期偏好和短期偏好。
我们利用用户的平台社交关系,比如关注关系、好友关系、拉黑关系等,构建用户社交关系图表征模型,输出用户的社交匹配表征,该表征向量能够反映用户社交匹配性。
最后,多种不同类型的召回通道融合,能够有效解决分发多样性的问题。
在得到不同类型的动态表征和用户表征之后,我们在线上构建不同形式的召回通道。以动态场景为例,我们的主要召回通到分为四种类型
-
基于用户的互动动态,进行相似内容动态检索,我们称之为相似语义内容召回,这里也可以称之为I2I召回
-
基于用户场景偏好表征直接检索Item,我们称之为直接偏好检索召回,或者叫U2I召回。
-
基于用户的场景偏好,检索具有相似偏好的用户,并召回这群相似偏好用户的消费动态,我们称之为相似偏好用户召回,也可以称之为 U2U2I召回。
-
基于用户的社交匹配,检索潜在的社交匹配用户,并返回这群社交匹配用户的发布动态,我们称之为 社交匹配度召回,这是另一种形式的U2U2I召回。
2. 用户场景偏好模型化召回
基于用户场景偏好的模型化召回
用户在动态场景和附近的人场景,能够产生众多的互动行为,如在动态场景的点击、点赞、评论、招呼等。在附近的人场景的点击、招呼、关注、回复等。我们希望能够对这些互动行为进行有效建模,进而抽象出用户的互动行为偏好,提高用户在这两个场景的互动率,改善用户的使用体验。
基于用户场景偏好行为,我们构建了用户的场景偏好模型,模型的具体结构如上述右图所示。在这个场景中,我们强调的是From侧用户和To侧动态、动态发布者之间的的共同匹配。模型最高层的匹配得分由是用户User、动态Item、动态发布者Owner共同决定的。
在右侧的Item表征学习过程中,我们采用动态内容单元Feed-Unit对动态本身的多模态信息进行特征抽取,同时采用用户画像单元Profile-Unit对Owner进行特征抽取。为了在Item侧得统一的表征向量方便检索,我们添加了一个Item-Model模块将Feed内容表征和Owner,也就是动态发布者的User表征进行融合,产生最终的Item表征。
在左侧的User表征学习过程中,我们同样通过一个类似的Profile-Unit单元建模用户Profile特征,采用行为序列单元Sequence-Unit单元对用户历史行为进行特征抽取。我们对用户的行为序列进行了拆分,分别为长期历史行为序列和实时行为序列,分别用于刻画用户的长期历史偏好和短时偏好。并采用Multi-Head-Attention的方式对长/短期行为序列进行融合。
另外,在样本和损失函数优化方面,我们尝试了一种Weighted-Hinge-Loss的损失函数,更加适合Ann的检索。样本选择方面,受谷歌工作的启发,在Batch-Negatives基础上,添加了Global-Negatives的方式。同时,我们对多互动目标进行了拆分,进行多目标的用户表征学习,以此来提升模型捕获用户不同行为偏好的能力。
其中某些结构的细节
用户和Owner的Profile单元,其结构相对类似,采用Embedding拼接后接MLP变换的思路。在行为序列的建模方面,采用Transformer对长/短期行为序列进行建模,其中Multi-Head-Attention,能够更好的把握行为序列的特性,更好的体现用户的长/短期偏好。损失函数,我们称之为 Weighted-Hinge-Loss,通过a和b两个参数,将正负匹配得分限制一定的范围内,提高模型学习的泛化性能。对负样本匹配得分的损失,通过加权的方式进行融合,解决正负匹配样本比值差异过大的问题。
在场景中,用户具有点击、点赞、招呼、关注等多种类型行为。为了进一步提高模型对用户不同类型行为偏好的建模能力,我们将场景匹配模型进行多目标学习。
首先,我们将用户的行为按互动类型进行拆分,在User-Model部分,构建用户对于不同目标的表征向量。在匹配的过程中,Item侧共享同一个表征向量。
其次,对于User-Model本身,在基础结构部分上,共享Profil-Unit单元,不同行为任务具有特定的Sequence处理单元。在输入特征维度,不同任务对应特定的Sequence行为序列。最后,在Mini-Batch的训练方式上,我们尝试每一个Mini-Batch数据集仅支持对一种任务的学习。这种方式能够减轻模型的学习难度,提高模型学习效率。
基于User侧学习到的用户偏好表征,在附近动态和附近的人场景,我们构建了两种主要的模型化召回通道,分别为直接偏好检索召回和相似偏好用户检索召回。前者我们也称之为 U2I 召回,后者我们通常称为U2U2I召回。基于场景偏好的模型化召回上线后收益明显,用户的互动转化率提升15%以上,够较为准确的刻画用户的互动偏好,提升用户的使用体验。
3. 用户社交匹配图表征召回
接下来,我们简单说一下基于用户社交匹配的图表征召回。在社交场景中,我们认为核心是要满足用户之间的社交匹配性。只有满足一定的社交匹配性,用户才能具有较好的社交体验。用户在附近动态和附近的人场景进行互动后,双方有机会展开更深层的聊天对话。用户之间如果能够形成长时间的稳定聊天,并且在聊天过程中相互关注产生好友关系,用户在陌陌场景得到了较好的社交体验。
用户之间的好友关系是一个非常强的信号,如果一对用户双方构成好友关系,并持续性的聊天对话,我们认为他们之间具有较好的社交匹配性。当然,用户之间能互相关注形成好友,必然也存在拉黑关系,这种情况,我们认为用户间的社交匹配性极差。
基于前面我们提到的用户之间的聊天关系、好友关系和拉黑关系,我们构建了全平台用户的社交关系图。具体如右图,两个不同用户之间,我们给它定义了几种不同类型的边缘,比如两个用户之间是好友关系、聊天关系,或者是拉黑关系,或者是在有聊天的基础上产生了好友关系。当然,还有经过多人聊天以后的拉黑行为,拉黑后则认为他们的社交关系其实是特别差的,这种情况下则是负向的社交匹配性。尽管标记了这么多类型,但是我们在使用时,我们都把这种多人的聊天行为、好友关系、聊天形成好友关系等,都是具有好的社交匹配性,并且他们对应的权重应该是依次增强。同理,像那种多人聊天前拉黑,我们认为它是负向的社交配性。
构建用户社交关系图后,我们采用Gcn的方式进行用户节点的表征学习,这种表征能够反映用户的社交关系属性。
在处理过程中,我们尝试对社交关系图本身进行优化。在陌陌的社交推荐场景中,用户之间的社交关系更多的是基于LBS的局部关系,为了打破这种限制,提高模型的泛化能力,我们基于用户的画像标签和一部分先验知识,添加少量的额外边缘。比如两个距离较远的用户,如果具有共同的爱好、相似的职业、接近的年龄,他们之间可以额外形成一条具有社交关系的虚拟边。
我们采用Gcn来对用户社交关系图进行建模。Gcn本身具有底层特征变换、邻域信息融合、多层关系扩散等特点,非常适合用户的图表征学习。针对某一用户,我们将其多个卷积层对应的输出向量进行拼接,形成最后的用户表征向量。
在负样本选择方面,我们将关系图中的对应的拉黑用户作为Hard-Negatives, 同时依赖Batch内的负采样,两者相互补充,作为最终的负样本参与模型训练。
我们看一下用户多层表征拼接和负样本选择的具体形式。将不同卷积层对应的用户节点进行拼接,能够刻画用户在不同层次的邻域关系上的特性,相比于单一的最高层输出,具有更强的表达力。图中,u1_1 表示某个节点用户第一层卷积层的输出,u1_2表示该节点在第二层卷积层的输出
在负样本构成方面,Batch内其他样本作为负样本,以显示拉黑的用户作为稳定的Hard-负样本,提高模型对这种显示负样本的认识。
基于得到的用户的社交关系图表征向量,我们构建了这种社交关系图表征召回。
在附近动态场景,我们检索请求用户的社交关系匹配用户,并将他们发布的动态进行召回,可以认为这是另一种U2U2I召回。在附近的人场景,我们直接检索请求用户的社交关系匹配用户。
上线以后,通过AB实验观察,社交匹配率提升10%以上。这种召回方式在我们推荐场景中取得了较好的效果。
4. 动态内容语义模型化召回
最后,我们说一下动态的内容语义模型化召回
在动态场景,我们发布的动态,其中包含的图文信息,能够反映出用户在发布瞬时的内心意图。这种情况下,我们认为动态的文本信息和图片信息表达的内容具有一致性。
比如上面第一张动态,文本侧强调内心的坦然,配合自拍的图片,更多的表达用户此时此刻内心的一种感悟。第二张动态,文字表达了梦想相关意思,图片表达了户外美好的风景,可以得到用户的梦想是和户外风景旅游相关,或者说是一场说走就走的旅游。从这两个例子看,文本和图片或许本身差异较大,但是在动态的特定场景下,他们具有紧密的联系,都能够反映用户的瞬时发布意图。
基于动态文本、图片所表达的潜在信息和用户瞬时发布意图的一致性,我们构建了这种动态内容语义模型来对动态内容语义信息进行建模。
它主要包含3个基本结构,左侧的文本Encoder,右侧的图片Encoder,以及中间的交互式Attention单元。文本Encoder我们尝试过双向Lstm, Transformer等,图片Encoder则是Resnet为主体。交互式Attention单元则对两者的隐层输出进行交互。
基于动态场景中发布动态的本身特点,我们确立了三个优化目标,首先要保证最高层表征的图文信息一致性,这样使得图文向量在同一个空间中且具有可比较性,所以我们确定了一个图文匹配性的目标。其次,在隐层部分,针对动态文本和动态图片的特点,我们确立了语言模型预估目标和图片内容一致性目标。前者保证文本语句的通顺性,后者主要基于同一动态的发布图片具有一定的内容相关性。
最后,将文本侧表征和图片侧表征进行拼接,即可得到动态的整体表征,这种动态表征向量,是基于图文所表达的用户发布意图一致性确定的。目前针对场景的业务特点,我们正在尝试除了学习动态内容表征本身外,显示的学习用户的发布意图表征,希望可以对整个推荐系统的分发提供更大的支持。
将上面模型输出的动态内容语义表征进行聚类,我们简单抽取了部分Cases。
在第一个Case中,更多的是表达了对宠物猫的喜爱,第二个Case中,是对一种做饭喜悦且略带炫耀的表达。第三个Case中,表达了对路上堵车的无奈。在这个类簇的Case中,注意下面两条是纯文本动态,右下角的动态是包含了表情符号的近似图片动态,他们也可以较好的匹配在一起。
我们将学习到的动态内容语义表征应用在附近动态场景,进行相似内容语义动动态召回。具体而言,根据用户的互动动态,检索其内容语义相似的动态。另外,在我们的详情页相似动态推荐方面,也是基于这种动态内容语义召回为主。上线后对展示画风的影响非常明显,可以秒级捕获用户的实时互动偏好,ab实验表明用户的互动转化率提升10%以上。
展望&思考
陌陌社交推荐的模型化召回的探索和应用先介绍到这里。最后我们说一下对模型化召回本身的展望和思考。现在非常多的同学,在模型化建模这块,更多的是基于已有的模型去寻找适合该模型的问题,而忽略了这个问题本身对于业务场景的重要性。这种方式可以称之为模型驱动或者数据驱动。我们认为问题驱动的方式后续会更重要。我们应该更重视场景问题,从问题入手,选择并制定合适的方案,来解决这些问题,才能够好的推动业务的发展和提升。