写点什么

模型化召回在陌陌社交推荐的应用和探索

  • 2021-04-01
  • 本文字数:6934 字

    阅读完需:约 23 分钟

模型化召回在陌陌社交推荐的应用和探索

在陌陌的社交推荐体系中,模型化 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%以上。

展望 &思考


陌陌社交推荐的模型化召回的探索和应用先介绍到这里。最后我们说一下对模型化召回本身的展望和思考。现在非常多的同学,在模型化建模这块,更多的是基于已有的模型去寻找适合该模型的问题,而忽略了这个问题本身对于业务场景的重要性。这种方式可以称之为模型驱动或者数据驱动。我们认为问题驱动的方式后续会更重要。我们应该更重视场景问题,从问题入手,选择并制定合适的方案,来解决这些问题,才能够好的推动业务的发展和提升。


分享嘉宾:

吴保鑫

陌陌科技 | 高级算法专家

吴保鑫,2015 年中科院自动化所博士毕业。2015 年-2019 年期间,搜狗商业广告算法研究员,负责垂类搜索广告、输入流广告的系统构建和策略研发,主要工作包括搜索场景和聊天场景的商业意图理解、广告物料的高层表征建模、广告检索系统的优化升级等。2019 年 6 月入职陌陌科技,负责社交推荐场景用户理解和召回策略的研发工作。从 0 到 1 的构建社交推荐的模型化召回体系,多维度把握用户的社交兴趣偏好,提高平台社交匹配效率;构建基于多模态表征学习的内容理解体系和刻画用户圈层的用户画像体系,为社交推荐策略提供底层技术支撑。


本文转载自:DataFunTalk(ID:dataFunTalk)

原文链接:模型化召回在陌陌社交推荐的应用和探索

2021-04-01 00:002754

评论

发布
暂无评论
发现更多内容

数据科学公司Anaconda最新调研报告:40%因安全顾虑将减少开源软件使用

雨果

数据科学 开源软件

Java进阶(二十六)公司项目开发知识点回顾

No Silver Bullet

Java 9月月更

终于大橘已定,分享一波测开面经(美团、小米、华为、阿里等)

Java-fenn

Java 程序员 java面试 Java学习 Java面试题

高性能 Java 计算服务的性能调优实战

vivo互联网技术

Java 缓存 性能 JVM 内存

性能测试知识科普(一):核心术语

老张

性能测试

【字符串函数内功修炼】strcpy + strcat + strcmp(一)

Albert Edison

C语言 9月月更 strcpy strcat strcmp

三分钟了解什么是时序数据库

阿泽🧸

时序数据库 9月月更

案例拆解:重要节日客情维护的礼品卡券应用

boshi

运营 礼品

本地部署 VS 云服务

CnosDB

IoT 时序数据库 开源社区 CnosDB infra

精通高并发与内核 | Linux内核进程的切换方式

小明Java问道之路

进程 Linux内核 进程管理 9月月更 进程切换

Elasticsearch聚合学习之五:排序结果不准的问题分析

程序员欣宸

elasticsearch 9月月更

精通高并发与内核 | Linux内核与C/Java进程与线程深度解析

小明Java问道之路

并发编程 线程 进程 Linux内核 9月月更

FeatureStore meetup V4回顾|腾讯 & 微软 & 第四范式特征平台技术解析与应用实践

星策开源社区

机器学习 微软 特征平台 MLOps FeatureStore

[极致用户体验] 为什么建议2022年不用"等比设计稿"+rem,而用"灵活设计稿"+px

HullQin

CSS JavaScript html 前端 9月月更

String,StringBuilder,StringBuffer区别,竟有这么多不同

知识浅谈

string string buffer 9月月更

带你掌握如何使用CANN 算子ST测试工具msopst

华为云开发者联盟

人工智能 算子 CANN 企业号九月金秋榜

22个常用的js单行代码

大师兄

JavaScript 前端面试 9月月更

2022 IDC中国未来企业大奖颁布,华为云数据库助力德邦快递获奖

华为云开发者联盟

数据库 后端 华为云 物流 企业号九月金秋榜

Java中的Request和Response详解

共饮一杯无

Request 9月月更 Response 请求与响应

【云原生 | 从零开始学Docker】九丶完结篇 Docker Compose

泡泡

容器 云原生 Docker 镜像 9月月更

AOP实现系统告警

Java aop spring aop 告警系统

Flomesh Ingress 的 SSL 透传

Flomesh

Qt|QGraphicsView总体架构学习

中国好公民st

c++ qt 9月月更

2022-09-18:以下go语言代码输出什么?A:1;B:15;C:panic index out of range;D:doesn’t compile。 package main import

福大大架构师每日一题

golang 福大大 选择题

【云原生 | 从零开始学Docker】八丶Docker网络与部署redis集群

泡泡

Docker 云原生 9月月更

最被夸大的6项技术

雨果

新技术

户外服装品牌TheNorthFace遭遇撞库 撞库究竟如何成功窃取账户信息

郑州埃文科技

撞库 拖库 洗库

大数据调度平台Airflow(二):Airflow架构及原理

Lansonli

airflow 9月月更

项目进度delay怎么办

Ian哥

项目管理 项目进度 项目计划

又创新作!阿里SpringBoot高阶手册爆火,简直不要太香!

收到请回复

Java 云计算 开源 架构 编程语言

怎么开Scrum五大会议?

敏捷开发

项目管理 Scrum 敏捷

模型化召回在陌陌社交推荐的应用和探索_架构_DataFunTalk_InfoQ精选文章