“全能选手”召回表征算法实践

2020 年 11 月 13 日

“全能选手”召回表征算法实践

导读: 本文主要分享 "全能选手" 召回表征算法实践。首先简单介绍下业务背景:


网易严选人工智能部,主要有三个方向:NLP、搜索推荐、供应链,我们主要负责搜索推荐。搜索推荐与营销端的业务场景密切相关,管理着严选最大的流量入口。我们团队的主要目标是优化转化率和 GMV 相关指标,具体业务是搜索、推荐、广告 ( 包含内部资源位广告以及外部的 DPS 广告 )。



如图所示,在这些个性化场景下是我们具备的能力矩阵。刚接到邀请的时候我是想聊一聊在严选业务场景下的个性化相关事情,但是我们业务基本都做了 2~3 年,想在短时间聊完,只能介绍我们做了哪些工作以及取得什么样的业务价值。但是每个人的业务场景差异较大,我们这边最优的实现方案在其他场景可能并不是最优方案,大家听完之后,可能没有太大的收获。与其这样,还不如聚焦在一个小模块上详细聊一下,所以今天就选召回表征这个部分,也就引出了本次分享主题:"全能选手"召回表征算法实践,主要内容包括:


  • 问题定义:召回表征究竟是要解决什么问题

  • 模型价值:召回表征的价值或收益是什么

  • 迭代实现:一步步迭代演化的过程

  • 业务落地:业务落地的案例


01 问题定义


1. 模型目标



首先说一下问题的定义,就是模型的目标是想做什么?表征模型 ( Embedding ):是将离散 id 变量映射到低维稠密向量的学习过程。用离散 id 做特征时一般先做 one-hot 编码,然后再映射成 dense vector。Embedding 的目标是在大数据中体现相关性的主体,通过 Embedding 向量表征学习到主体的向量信息,使用向量度量公式也能体现出主体间的相关性,比如右边这个例子,红色线表示 King 和 Man,假如这个 King 和 Man 都已经训练出一个向量表征的结果,我们希望 King 和 Man 的内积要大于 Queen 和 Man 的內积,这样就得到一个 Embedding 的目标。


2. 数据处理



其实 Embedding 是一个非常通用的模型用于主体的学习和表达,它在 NLP、搜索、推荐、图像中都有广泛应用。那么到具体业务场景在搜索推荐中 Embedding 到底是如何发挥作用的?下面这个图是一个非常经典的工业界推荐数据处理的阶段划分,从左到右是一个数据逐层递减的过程,依次是召回 ( Matching )、粗排 ( Pre-Ranking )、精排 ( Ranking )、重排 ( Reranking )。那我们的召回表征模型的作用范围主要是召回和粗排两个阶段,它在搜索推荐中起到基石的作用。


3. 模型能力



当模型训练出来后,主体的相关性是可以用向量相似度来衡量的,下图是一些 item 的表征形式,如果几个 item 相似,那么他们的距离就比较小,内积比较大,比如和零食碗相似的都是一些相同类目下的商品。如果我们只有一个向量表征模型,那么模型的 Embedding 既可用于召回,也可以利用两个 item 的 Embedding 向量內积来作为粗排的依据,这样召回和粗排两个场景可以一次搞定。但是大多数情况下会存在多种表征模型,每种表征模型都会去做召回,这种情况下需要引入粗排模型将多个表征模型的召回结果进行合并、排序。用于合并的粗排能力可以策略结合蒸馏模型,这里先不展开介绍。


02 模型价值


表征模型为什么值得深入去做?


1. 应用场景广泛



接下来介绍表征模型为什么值得深入去做?它能产生什么价值?问题答案跟文章标题密切相关:Embedding 是一个全能选手,应用非常广泛,能让算法产出价值最大化。应用场景包括:


  • 中间产物:Embedding结果作为精排模型向量特征的初始化权重。

  • 排序呈现:拿到主体Embedding的向量,计算內积完成召回、排序的功能。

  • 场景复用:端到端的场景使用,例如推荐中U2I、I2I的召回、粗排,搜索中的Q2I语义匹配,智能营销上的I2U精准触达。


2. 工程方案成熟



Embedding 向量已经有了,还需要向量搜索引擎来将向量推到线上使用,具备 online 的响应能力。基于向量搜索引擎提供的接口可以找到与给定向量内积最大的或距离最近的 TopN 个向量。第一个是 Facebook 较早提出的 Faiss 的方案,第二个是 Google 提出的 SCANN 的方案;这两个方案都很好,能大幅降低工程门槛。


3. 技术发展快速



向量表征是学术圈的热点,不断推陈出新,特别是 GCN ( 图卷积神经网络 )、GNN ( 图神经网络 ) 都很火,学术界每年都发表很多 paper。学术研究快速发展附带的技术红利能给业务带来增量价值。接下来我们会从两个方向去聊向量表征的模型,一个是序列模型 SeqModel,另一个是图网络模型,这两种模型都能解决向量表征的问题。那在选择模型的时候到底该选两类模型的哪一个?这个是与产品数据是强相关的,如果产品数据具有时间强相关性,用序列模型效果肯定不会差;如果产品数据的节点比较稀疏,需要用邻域节点做信息协同建模,这时候建议尝试下 GNN。图数据几乎可以纳入任何场景产生的数据关系,所以 GNN 是一个普适性很高的通用模型方案,但是并不意味着在所有场景 GNN 都比序列模型好,实验出真知不同场景下需要多种方案对比。接下来基于我们搜索推荐业务场景的结论,与大家分享下序列模型和 GNN 模型的迭代。


03 迭代实现


1. 聚焦 Item Embedding


严选业务中用户量是远远大于 Item 量的,User Embedding 因为用户量很大行为又比较稀疏实验的效果不太好,所以我们初始阶段先聚焦 Item Embedding,Item 量较少所以落地成本较低,关联数据稠密所以表征效果较好。


① SeqModel 优化



第一个模型是我们自定义并优化的 Session Based Embedding Model,它的主要思路来自 Aribnb 的一篇 Embedding 论文 ( 这篇论文写的非常好,建议大家了解一下 )。这个模型的主要思路就是构建类似 word2vec 的序列,关注序列数据上下文时间窗口中向量的相关性。图中的每一个圈代表一个 item,多个圈构成一个行为序列,行为序列来自用户在一段连续时间内的行为数据。传统的 word2vec 只会关注上下文的信息,这篇论文的关键思路提出 global item,跳出了序列模型窗口的限制。Global item 指的是序列数据中一些重要的节点 ( 图示中实心节点 ),比如用户的加购、支付、分享等行为。Global item 打破模型窗口的限制,使 Item 向量能学到一些 high order connection 信息,大幅提升序列模型的表征效果。


在此之上,我们做了一些 loss function 的优化,包括去除负采样的过程、在 batch 内构建 pair-wise loss,能大幅提升训练速度;同时也引入多层向量,多层向量是 side-info embedding 的思路,对 Item 做向量表征的时候不仅仅利用它的 id 类特征,还会引入商品的属性、类目、适用季节、适用人群等特征以进一步提升向量表征的效果,同时还能缓解新 Item 冷启动表征的问题。


② GCN 定义



接下来聊一下学术界的热点 GCN/GNN 模型,图神经网络一般会有三个阶段的定义:


  • 如何将邻域节点的信息传递给目标节点

  • 如何聚合传递到目标节点的邻域信息

  • 集成邻域信息的目标节点定义


目前很多关于 GNN 的 paper,都会有关于这三个阶段的定义,图右边是 GCN 的一个示意图,图中的公式就对应三个阶段,而且非常巧妙是这个公式可以转化为矩阵运算形式,可充分利用 GPU 的算力。但是这个矩阵结点数是 ( #users+#items ) × ( #users+#items ),size 大到工业界难落地。


③ GraphSage 可落地



GraphSage 是基于采样思路降低落地难度,用采样代替矩阵计算的过程。采样深度 ( 一般深度不会超过 2 ) 对应迭代次数,多次迭代能获得高阶领域信息来做信息协同建模,同时可以调整每次迭代采样的数量。这个模型最大贡献提供了一种通用的 Neighborhood Aggregation 聚合方法,可以采用 mean 的方式进行聚合,或者引入池化层,也可以引入 LSTM 进行序列的聚合。


④ LightGCN 的压缩数据尝试



GCN 需要一个大矩阵计算过程,相比工程化的思路二者效果有多少差异?能否缩减现有数据实现 GCN 和其他模型做一个对比?所以我们就实现了一个 LightGCN,主要是参考了图中的两篇论文。两篇论文出自同一团队,论文定制信息的构建和聚合过程,能够捕捉结点的高阶相关性,显式的编码协同信号。一般 GCN 的网络深度不会超过 2,而这里的 LightGCN 能做到三层,这里面的节点已经涵盖了 user、item。本文最后会对所有的效果做一下对比。从知识表达上这两篇论文写得很好,大家可以去研读下,会对 GCN 有更好的认知。


2. 获取 User Embedding


我们第一阶段获取到 Item Embedding,怎么由 Item Embedding 得到 User Embedding?主要是两种思路:策略的方法和模型的方法。


① 策略快速落地



策略是能快速落地的方案,是一个很好很稳定的 baseline。我们可以利用已知的商品隐向量和 session 中用户的交互行为序列,基于时间衰减、次数权重和注意力机制来得到用户的向量表征。同样的在搜索场景下也可以通过查询词的分词合并、次数权重、注意力权重得到查询词的向量表征。


② 经典 DNN



接下来还有一个经典模型 DNN,直接通过模型得到用户的向量。参考图中 YouTube 的这篇经典论文,模型本质上是一个有监督的 NextItemPrediction 训练过程,用户的 Item session data,做一个简单 average 聚合,再加上 user feature 作为深度模型的输入特征数据。输入特征数据经过层层传播,到达最后一层得到用户向量,用户向量和 item 向量做 softmax,完成一个概率分布的预测,也就得到了模型的 loss。模型训练完成后同时得到 User 和 Item 的向量表示。


③ 学习 session 表征



我们当然希望通过图模型得到用户的向量。用户的行为基于 session 来表示的,如果有一个方法能直接对 session 进行向量表示,那就可以直接得到行为序列下的用户向量。下图中的论文就是通过学习 session 向量的表示来解决这个问题,它同时也有 GCN 三个阶段的定义,在定义过程中还引入了门的参数来设置最终向量的表示过程。最有价值的点是它做了 session 的表征学习,在训练过程中每个 session 看成子图进行逐个训练,然后用 local 向量 ( session 中最后一个 item 向量 ) 加上 global 向量 ( session 中其他 item 向量经过 attention 聚合得到一个 global 向量 ) 来作为 session 向量,最后用 session 向量来代表用户向量。在离线评估中这个模型的效果是较为突出的。


④ 多个用户向量



我们之前一直用单个向量对用户进行表征,那么能不能用多个用户向量对用户的兴趣进行表征呐?答案是可以的,因为如果用户的兴趣比较广泛,用一个向量进行表征会存在信息丰富度的丢失,而用多个向量来表示用户,效果可能会更好。


第一种思路是聚类方法:先将 item K-means 聚类得到多个 cluster,每个 cluster 有一个向量表征。用户行为序列中的商品如果涉及多个 cluster,就将属于相同 cluster 的向量聚合表征用户。聚合的方法可以和 cluster 向量计算权重后按位相加,用户向量个数等于序列中所属 cluster 的个数。


第二种思路是 MIND:它利用胶囊网络来形成多个兴趣向量,结构中有一个 multi-interest extract layer 负责提取多个兴趣向量,图示中 u1、u2 是用户行为序列中 item 的向量,他们作为胶囊网络的输入,v1、v2 是用户的多个兴趣向量也是胶囊网络的输出。同时胶囊网络还支持动态路由,多次迭代自适应的得到聚合权重。


3. 效果对比



接下来我们对这几种网络模型做一个对比,对比的指标是 HitRate 和 NDCG。我们采用 VecModel-Single ( 序列模型 Session Based Embedding Model ) 作为基线模型。


在我们场景数据中,graphSAGE 作为 GCN 的一个工业落地实现指标并不突出,在 NDCG@30 时略微超出基线模型。LightGCN 是通过缩减数据来适配目前已有的最大锅,进而生产出最大的饼;LightGCN 以矩阵方式去做向量表征学习,相比基线模型效果也不是特别突出,只在个别指标 HitRate@30 上有一些提升。YouTubeDNN 在 4 个指标上都有较为明显的提升。SR-GNN 是直接对 session 做用户向量表征,通过模型参数学习求得用户向量,也是目前离线效果最好的模型。VecModel-Multi 是在序列模型的基础上,增加聚类的用户多兴趣向量表示,MIND 是基于胶囊网络的多兴趣向量模型;在我们数据实验中,VecModel-Multi 要比 MIND 的效果更好。


左下图是不同用户行为分组的模型效果,X 轴是用户的行为数量,Y 轴是 HitRate。刚开始用户没有行为时无法感知用户偏好,模型效果是比较差的 ( User Type Embedding 实现 NIP )。当用户有 1、2 个行为之后,效果指标大幅提升。这也比较好理解,因为新用户来到一个场景产生初始行为时兴趣是比较聚焦的,但是随着用户行为数量增多,仅仅用向量模型做召回和排序,指标就会下降,这时候就需要接精排、重排模型去进一步提升业务效果。右下图是多个模型在 HitRate@N 的效果,其中绿色曲线为使用策略将多个模型结果融合后的表现,可以看到只是做了简单的合并,相比于其他单一模型就有明显提升。后续还可以采用粗排模型合并各个表征模型的结果,效果应该还会有提升 ( 用于合并的粗排模型还在进行中 )。


04 业务落地


1. 外物皆向量



接下来我们聊一下业务上是怎么落地的,外物皆向量是 Facebook 提出来口号,如果我们做好了一整套向量体系之后,那么业务场景中所有的主体都可以向量化,再去做 U2I、I2I、Q2I 的召回就非常方便。


2. 服务示意



图中是一个简单的服务示意图,整体是整合的统一召回服务,其中核心向量表征服务具备 User、Item 向量表征的能力,它可以采用 T+1 的数据做表征,也可以利用实时数据做用户实时兴趣的表征。统一召回服务的输出经过精排、重排就可以应用到搜索、推荐、广告等业务场景中了,所以召回服务是各个业务的基石,召回效果的提升能带来多个场景效果的提升,是一个产出投入比非常高的技术方向。


3. 应用效果



具备万物都已向量化的基础后,下面是一些具体应用的落地效果示意。比如搜索中搜索词的推荐 ( U2Q )、搜索结果语义匹配 ( Q2I ),推荐中很多简单场景可以直接使用基于向量的排序模型,效果也不错。还有内部首焦广告中的智能合图,通过 User2Topic,User2Item 挑选用户最感兴趣的活动商品呈现个性化 Banner。


今天的分享就到这里,谢谢大家。


作者介绍


潘胜一,网易严选算法专家


潘胜一,严选人工智能部搜索推荐负责人。团队负责的业务包括搜索、推荐、内外部广告、用户模型等。


本文来自 DataFunTalk


原文链接


"全能选手"召回表征算法实践


2020 年 11 月 13 日 14:00824

评论

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

如何快速打造一款钉钉 Go sdk

Ceelog

go golang 钉钉 企业微信

通过Postman和coding.net发布API

太极程序员

Postman API

SPI 在 Dubbo中 的应用

vivo互联网技术

Java jdk dubbo spi

LeetCode题解:127. 单词接龙,BFS+统计单词变化次数,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

硬肝到秃头!Alibaba强推并发编程笔记我跪了,真的学到好多东西!

Java架构追梦

Java 学习 架构 面试 并发编程

盘点2020 | 疫情下的思考和学习

soolaugust

盘点2020

一文带你彻底了解大数据处理引擎Flink内存管理

华为云开发者社区

大数据 数据 处理

在线医疗的发展和优势

anyRTC开发者

android 音视频 WebRTC RTC 医疗方案

《大数据算法》.pdf

田维常

算法

产品策略闭环是个什么环?

万事ONES

项目管理 团队协作 需求管理 需求分析 产品策略

从 JMM 透析 volatile 与 synchronized 原理

码哥字节

volatile JVM JMM Java 25 周年 synchronized

量化交易APP系统软件开发(现成)

开發I852946OIIO

系统开发

【经验分享】RTC技术系列之音频编解码

邵帅

腾讯高工强烈推荐的“Netty速成手册”原理+应用+调优,带你将知识点一网打尽

比伯

Java 编程 程序员 架构 Netty

DolphinDB与MongoDB在时序数据上的对比测试

DolphinDB

mongodb 分布式系统 时序数据库 DolphinDB 数据库开发

智慧社区系统开发方案,智慧平安小区综合管理系统建设

WX13823153201

智慧社区系统开发

答了Mybatis这个问题后,面试官叫我回去等通知……

田维常

mybatis

架构师训练营W09作业

Geek_f06ede

硬核编程:30天=一个网站+一份周刊

老魚

程序员 建站 web全栈

盘点2020 | 30岁了,我终于入门编程了

希望

盘点2020

dubbogo 3.0:牵手 gRPC 走向云原生时代

阿里巴巴云原生

go gRPC 云原生 中间件 dubbo-go

【小菜学网络】数据链路层概述

fasionchan

网络编程 计算机网络 网络协议 TCP/IP

Canvas入门实战之用javascript面向对象实现一个图形验证码

徐小夕

Java 前端 canvas

码了2000多行代码就是为了讲清楚TLS握手流程(续)

新世界杂货铺

golang https

DeFi(去)中心化DAPP系统软件开发

开發I852946OIIO

系统开发

智慧城市建设,社区智能化系统搭建解决方案

t13823115967

智慧城市 平安小区

anyRTC实时音视频-社交娱乐解决方案

anyRTC开发者

ios android 音视频 WebRTC RTC

Prometheus TSDB(Part 2):预写日志(WAL)和检查点

_why先生

云原生 Prometheus tsdb 可观察性

EZYTRX波场智能合约APP系统软件开发

开發I852946OIIO

系统开发

智慧警务可视化平台开发,重点人员管控系统搭建

t13823115967

智慧公安 智慧警务系统开发

IDEA 文档插件 DocView 版本更新:修改 UI 并支持 IDEA 2020.3 !

程序员小航

idea插件 IntelliJ IDEA 文档生成

“全能选手”召回表征算法实践-InfoQ