nevinzhang 微信 AI
导读:在微信 AI 背后,技术究竟如何让一切发生?关注微信 AI 公众号,我们将为你一一道来。今天我们将放送**微信 AI 技术专题系列“微信看一看背后的技术架构详解”**的第二篇——《微信看一看内容召回》。
看一看介绍
相信对于不少人而言微信已经成为获取资讯的主要场景。与此同时,由于微信用户群体的庞大,也吸引了大量的内容生产者在微信公共平台创造内容,以获取用户关注、点赞、收藏等。微信内的内容推荐产品:看一看应运而生。
基于微信通过多年的用户沉淀,积累得到的大量“隐式反馈”阅读兴趣信息,可以精准的实现内容与内容消费者之间的推荐。同时,秉承降低用户获取信息茧房效应,拓宽用户阅读兴趣,增强互动,强化用户认知,及时获取咨询等等诉求,看一看不断在算法迭代的同时,引入各类腾讯系,外部图文,视频,资讯,小视频等内容,丰富内容多样性的同时不断上线优化产品体验与进行样式优化。
内容库与内容画像
■ 2.1 内容源
看一看接入了非常多合作方的数据作为内容源,包含但不仅限于微信公众平台及其他外部内容等等。
由于接入数据源较多,各家数据在内容、质量、品类等方面差异性比较大。看一看平台方会对数据做“归一化”操作,包括标签统一化,推荐标签提取,内容投放目标,投放人群倾向性等内容理解处理,这部分我们称为看一看内容画像部分。
■ 2.2 内容画像
内容理解:对接各种外部图文等内容,对接入内容做业务级内容多维基础理解,同时进行外部标签与自有标签体系对齐,完成应用级内容打标;反馈至下游应用方:用户需求系统,召回策略,召回模型,排序/混排等使用;同时,在业务数据滚动与迭代中修正数据判断精度与效果,逐步贴合与提升业务线效果;
我们将内容画像,定义为两个大维度:通过内容本身来理解内容, 通过用户行为来理解内容。前者主要针对内容抽取静态属性标签;后者则通过用户行为积累的后验数据、统计或模型预估内容的知识、倾向性、投放目标以及抽象表达。
■ 2.3 多模态标签语义标签
我们将文本语义按粗到细粒度分为:文本多分类(1-3 级),主题 topic model(长效 topic,实时 topic),tagCluster, tag/entity;这也是 NLP 领域持续在关注和研究的重点方向;文本分类与模式识别中心合作对长/短文本训练基于标注的增量多分类模型(1-2 级分类准确率可以达到 90%+),支持领域内 DL 文本分类模型;Topic Model 作为重要分支,为支持看一看推荐业务,解决了时效性热点的快速 topic 增量模型,实现多层级(1000 维,1500 维度,5000 维, 1W 维)topic model,以及以此为基础衍生出的 topic Embedding 技术等;Tagcluster 是介于 tag 和 topic 粒度之间的一类 tag 聚簇概念,维度为 10W 级;用于解决语义自动语义聚合的可解释问题;关键词提取(标签提取),技术演进从传统的基于标注,到半监督,到自动标注的序列提取的浅层模型;已经全部迁移为基于 bilstm+attention+CRF 和 bert 的一套深度模型系统。标签是推荐系统的核心基础能力,深度模型的引入对算法准确率与覆盖率都有显著的提升。
视频理解的相关维度,我们与外部团队深度合作,建立起一套基于短/小视频,封面图多维度的多媒体特征体系,包括人脸识别,人脸 embedding,标签,一二级分类,视频 embedding 表示,水印,OCR 识别,清晰度,低俗色情,敏感信息等多种维度。有力辅助多媒体理解深度,并广泛用于召回模型,曝光展示策略,过滤策略等,目前,在召回与策略层面已经证明有一定在线提升效果。
■ 2.4 基于知识体系的表示与可解释标签
知识图谱作为知识承载系统,用于对接内外部关键词信息与词关系信息;内容画像会将原关系信息整合,并构建可业务应用的关系知识体系,其次,依赖业务中积累用户行为产生的实体关系数据,本身用户需求的标签信息,一并用于构建业务知识的兴趣图谱,基于同构网络与异构网络表示学习等核心模型,输出知识表示与表达,抽象后的图谱用于文本识别,推荐语义理解,兴趣拓展推理等场景,直接用于兴趣推理的冷启场景已经验证有很不错的收益。
■ 2.5 嵌入表示
语义嵌入表示:这类是相对已经比较成熟的技术,基于短文本 tag, word 粒度,句子粒度,doc 粒度都可以构建 embedding 表示。其次,除文本外,更为丰富的多媒体信息的融入,已经可以验证在一定程度上可以增强表达能力。
其次,我们基于微信阅读场景的用户点击/分享/关注等等序列结合场景的上下文信息,以他们作为文本切割的序列标注信息,早起基于传统的 HMM,CRF 类浅层模型,发展至目前的 seq2seq,RNN,transformer,Bert 等序列类,语义类模型,将内容作为文本切割的一个子序列,从而实现对文本的序列的表示信息。由于更加贴近推荐场景,这类嵌入表示业务可用性会更高,也体现在召回/排序模型的应用效果会更加明显。
■ 2.6 倾向性与目标性识别
这部分是通过用户行为数据来理解内容的重要体现。分为两部分:内容倾向性与内容投放目标性。都是建立在一套基于文本,多媒体,kg,投放日志等下的一套分类器进行打标,模型如上图所示。
内容倾向性:内容通过分类模型预打“倾向性”标签,例如:内容适合的性别倾向、年龄倾向性、地域倾向性等等,从而预判待投放内容的特殊人群倾向性;
目标性识别:看一看的场景会比较多,例如:主 TL 流,视频流,专题流,tag 可点流,看一看 + 小程序,每个场景都有不同的投放目标(例如:主 TL 内容会以点击率为主,专题流会以时长消费为主,小程序分享率为主),所以,我们会在 item 上同样基于投放预估的模型预先打上一组目标识别标签预判分数,供在线策略使用与内容库构建、以及内容试探等。
综上,通过内容理解与内容库构建的概要流程图如下:
这部分产生的判断维度会对所有接入看一看的内容进行组合打标,通过不同产品场景或渠道来交叉组合,构建推荐的内容库。同时,标签会不同力度的用于在线召回过滤策略,作为模型召回、排序特征来使用。应用证明对于新内容的冷启动筛选,特定投放目标库群体效率提升明显。
召回架构
推荐系统的召回阶段可以理解为根据用户的历史行为数据,为用户在海量的信息中粗选一批待推荐的内容,挑选出一个小的候选集的过程。在看一看召回演进路上,我们曾经调研大量主流的工业界推荐系统的召回架构的设计,如下:
可以看到各类同类竞品的系统虽然细节上多少存在差异,但不约而同的采取了多路召回的架构,这类设计考虑如下几点问题:
1.考虑用户层面:用户兴趣的多元化,用户需求与场景的多元化:例如:新闻需求,重大要闻,相关内容沉浸阅读等等
2.考虑系统层面:增强系统的鲁棒性;部分召回失效,其余召回队列兜底不会导致整个召回层失效;排序层失效,召回队列兜底不会导致整个推荐系统失效
3.系统多样性内容分发:图文、视频、小视频;精准、试探、时效一定比例;召回目标的多元化,例如:相关性,沉浸时长,时效性,特色内容等等
4.可解释性推荐一部分召回是有明确推荐理由的:很好的解决产品性数据的引入;
看一看召回目前设计为多路召回形式,从功能性角度分为如下几类:模型类召回、相关场景类召回、基础属性召回、社交类召回、试探类召回、产品策略/运营类召回六大类。如下图所示:
1.模型类召回:目前看一看曝光占比最大的一类召回策略,可以很好的解决推荐系统中长短期兴趣自适应、一定程度的兴趣扩展、业务场景扩展与迁移等几个核心召回问题。为下文着重介绍的内容。
2.相关类召回:看一看包括多个相关推荐场景。这类召回依赖内容画像对内容的语义判断能力,采用孪生网络类设计思路,解决跨内容域(例如:视频与图文,封面与标题等)相关性问题。满足用户在推荐系统内对沉浸式体验的需求。
3.基础属性类召回:属于比较基础的一类召回,但具有几点重要意义:由于多重标签的对 item 的覆盖度会比较高,所以这类召回很好的可以满足冷启类,兜底类场景;其次,属性具备良好的可解释性,可以很好的对模型类召回以及相关特殊外显场景下的解释性作用,通常也是产品订制或规则的重要维度。
4.社交类召回:是看一看比较有特色的一类召回,基于微信丰富的社交场景,看一看设计了:“好友在读”,“XXX 都在看”,“在看”等几类设计相关推荐。
5.试探类召回:通常的推荐系统都会面临“信息茧房”问题,即:人们的信息领域会习惯性地被自己的兴趣所引导,从而产生多种主动行为:我们也称为对推荐系统的隐式反馈信息,这类行为又会作为推荐系统的学习目标,从而让推荐结果逐步收敛,用户再无法获取更广泛的内容,信息桎梏于像蚕茧一般的“茧房”中的现象。兴趣试探会解决这类问题。另外,推荐系统作为一类内容分发平台,承担着甄选优质内容,发现潜力优质内容,并在一定程度上去中心化投放的能力,内容试探队列会解决这类问题。
6.运营&产品策略召回:满足产品以及一些节日、新闻、话题、合作方等特殊定制场景。
7.粗排
队列演进
看一看召回策略演进主要经历了四个阶段,这里并不是代表后者替代前者,由于不同队列的意义和解决的问题的差异性,各个阶段的一些队列目前还会有不同情况的保留在系统中:
■ 4.1 基于属性召回
这一阶段比较重的依赖内容画像与用户需求的细粒度判断,我们走过了一段基于自然语言处理、基于用户行为来对内容做丰富的细粒度内容打标签的阶段,接着,用户需求会基于阅读、搜索等用户行为将内容属性标签归入用户需求。内容属性标签构建倒排与正排索引,各路召回在线基于用户需求的多个细粒度维度判断以及实时阅读历史的 item 属性信息,通过拉取倒排 item 拉链,得到各路召回的候选结果。这阶段中,例如:tag、类目、topic,已关注公众号队列占到了召回大头比例,这类属性具备很好的可解释性。
■ 4.2 协同&社交召回
CF 主要的功能是预测和推荐。算法通过对行为数据的挖掘发现用户的偏好,构建用户(user)需求或者内容(item)画像,基于不同的偏好对用户进行群组划分来向用户推荐可能感兴趣的内容。协同过滤的核心思想,简单地说就是:物以类聚,人以群分。如下对 CF 类算法的常用归类示意图(来自 wiki)可以比较好的表达我们对协同类算法的演进路径。
首先一类是:Memory-based approach(图中是 Neighborhood-based),当时尝试的这类协同过滤计算,思路为:“邻居”的思想,分为 User-based CF(简称 UserCF)和 Item-based CF(简称 ItemCF)。在前期阶段中,行为 +id 维度构建的 item cf 与 user cf 都有明显的在线效果提升,历史上在线曝光占比一度非常高;但是这类方法依赖 item 或 user 维度有大量行为累计,否则泛化和推荐能力很差,且具有很强的驱热性问题。
另一类,即考虑 item 内容信息的 content-base approach 类,即内容协同:我们称为 ContentBase(解决夸内容域的各类相关计算场景的一类召回);看一看场景中有非常多语义相关的应用场景,例如:相关推荐、去重、打散、召回/排序特征等等。我们解决跨域的语义相关问题,整理出一套统一框架,方便统一调用使用。架构整体为三层,相关算法层,并行优化层和算法接口层。整体相关性框架如下图所示:
我们使用深度语义匹配模型来进行文本相关性的计算,主要通过 embedding、滑动窗口、CNN、MaxPolling,前馈网络,最终通过余弦距离计算两个文本的相似度,如下图所示:
线上的 item 聚类算法的难点是如何在几十 ms 内完成上百篇文档的聚类相似度计算、语义相似内容召回等算法,我们在并行优化层进行了“并集查询加速”,“相似漏斗形加速”,“多线程”加速等多点优化。目前也已经服务化,满足推荐场景下复用,落地看一看场景内各类相关性场景。
随后,我们上线了 Model-based approach,在这种方法中,重要的思路为利用模型来预测用户对未评估 item 的评分。有许多 Model-based CF 算法:贝叶斯网络( Bayesian networks),聚类模型( clustering models),隐语义模型(LFM),如奇异值分解(SVD),概率隐语义分析( probabilistic latent semantic analysis),多乘法因子(multiple multiplicative factor),latent Dirichlet allocation(LDA)和基于马尔可夫决策过程类模型(Markov decision process based models)。例如,我们在线的一种比较有效的方案:BPR(Bayesian Personalized Ranking from Implicit Feedback)其核心原理非常自然:将 user-item 序列(可以是任意点击,阅读,收藏行为)转化为 item-item 的 knn 标注矩阵,如图:
方法中构造训练数据考虑的 feature-item 包括三类:
• 用户真正讨厌的;
• 用户 missing 的;
• 用户喜欢的;
对于某个用户来说,在训练时都被标为"0"的 item,在预测时的评分也可以排序,因此不影响 ranking 任务的完成。在我们系统实践时也没必要使用全部历史数据,只需要以 session 切片,从中按照上述形式构造 pair-wise 数据即可
通过这类方法,降维方法大多被用作补充技术来提高基于内存的方法的鲁棒性和准确性。另外一方面,对于像奇异值分解,主成分分析等方法,根据潜在因素将用户项目矩阵压缩成低维表示。使用这种方法的一个优点是,更好地处理原始矩阵的稀疏性。此外,对于处理大型稀疏数据集时我们下文也会介绍,借助大规模 knn 能力,这类矩阵相关性的计算可以得到很好的解决,非常适合召回场景。
第三类是 Hybrid models(也就是前两种的混合模型)。许多应用程序结合了 memory-based CF 算法和 model-based CF 算法。这些方法克服了原生 CF 方法存在的局限性并提高了预测性能。其实上,这部分的进一步尝试,已经归类和被为下文将要介绍的深度模型召回所替换。
社交类召回,是微信场景下的特色数据,比如:
基于自然好友的:在看;
基于兴趣的:在看,XXX 为基于兴趣关系得到的聚蔟关系;
又比如 18 年 10 月上线的在看频道:基于用户主动点击在看按钮,收集效果一类社交阅读场景。
■ 4.3 试探类召回
随着业务发展与对用户理解的深入,出现几类问题亟待解决:用户获取信息通常表现出很强的短期效应;我们在线通过引入用户实时阅读历史数据,利用短期阅读行为信息作为触发源,构建隐语义类召回策略。
但同时,我们很快发现,点击类指标提升带来的代价是短期内容集中,内容类型快速收敛,主要原因也是策略过于依赖短期行为,召回内容的集中,导致上层模型快速收敛,用户行为收敛,逐步导致很强的信息茧房效应。召回测试是急需引入更为泛化与具备试探能力的召回。随着业务 dau 逐步提升,不断有新用户、新内容引入系统,如何解决冷启问题也需要着重考虑。
知识图谱类
在微信生态中,即使对于一个看一看新用户,我们也可以根据极少的用户/内容基本信息进行推荐。内容协同使用了异构网络的方法进行文章召回。
我们搭建了基于知识图谱的异构召回模型。该方法以知识图谱给出的“先验”关系信息,将文章 feature 与用户 feature 做关联,构建出一个同时包括用户特征又包括文章的特征的异构网络,通过图谱异构网络的表示学习,得到异构节点的向量(user profile feature 与 doc feature)。已经有相关理论支持,可以得到特征之间的独立性与向量的加和性,从而实现在特征匮乏情况下,不会过渡依赖单一用户需求或内容画像特征进行召回。对合并后的向量相关性计算召回与该用户最相关文章。
试探(兴趣试探/内容试探)
解决两类问题,拓宽用户的兴趣面,减少发现优质内容的周期。试探能力需要打通整个推荐系统的绿色 pass 通路,允许内容或兴趣召回可以全链路走特殊通路:包括:数据通路,模型通路,定制召回/排序/混排模型等能力。
我们召回通过设计两类试探策略,解决上述问题:
兴趣试探:我们系统中通过:跨域用户兴趣试探,中长尾闭集合兴趣试探,全集合兴趣试探模型三类策略就行兴趣试探。并建设了一套以用户需求的试探成功率,试探标签的有点率,点击率衡量试探效果的实验体系,可以闭环的验证链路效果;
内容试探:我们设计了:内容质量识别(离线),运营系统(旁路),流量预估(在线),内容投放目标性识别(在线)来投放与优化投放效果,通过全链路的对内容标签修订,试探投放,日志模型定制化,迁移学习,上线后以 ABTest 中以新内容系统获取曝光后的试探内容点击率,试探成功率,试探多样性衡量闭环效果。
■ 4.4 深度模型召回
下文对这部分工作进行概要介绍,按类别我们将模型召回分为四类:
- 本文地址:详文解读微信「看一看」多模型内容策略与召回
- 本文版权归作者和AIQ共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出
- 序列模型
- 双塔模型
- 混合模型
- 图模型
深度模型召回
召回是处于推荐业务的底层位置,首先,处理数据规模相比上层排序要大几个数量级,其次,要求准确的同时,兼顾多种业务和用户体验目标,例如:多样性,社交,时长,负反馈,分享等等。在诸多限制下,模型召回系统会着重解决几个问题:
1.候选数据规模大;对模型性能要求高
2.user-item 交叉类特征算法,由于召回的检索逻辑限制,这类算法支持不友好;
3.底层数据种类繁多,模型需要具备很强的自适应能力
4.解决:多样性与精确性的两难选择
5.模型实时性问题增量模型
6.用户/内容冷启的召回问题
7.横向业务演化阶段,模型如何快速孵化新业务,即迁移能力
对于深度模型召回来说,需要有特定的架构模式来应对,我们的解决方案如下图所示,模型训练为离线实时训练得到用户与 item 两侧的参数或 embedding 数据,参数部分依靠微信基础平台部提供的强大在线 feature KV 系统进行实时存取,user 与 item 在线进行 KNN 计算实时查询最近领结果作为召回结果,其中 KNN 服务由基础平台部基于对 Facebook 开源的 faiss 升级改造的一套系统,可以在 5ms 内完成千万级内容的快速查找。
■ 5.1 序列模型
推荐系统主要解决的是基于用户的隐式阅读行为来做个性化推荐的问题;所以,我们尝试的方法是将用户在隐式阅读场景下表现出的点击文章序列构建为一个长文本,这样阅读文章和点击可以当做是文档的 Term。那么无数的用户阅读历史序列就可以当作是天然的语料库,如此可以将隐式推荐问题迁移为自然语言处理中的语义(语言)模型可 cover 的范畴。基于神经网络模型学习得到 Word2Vec 模型,再后面的基于 RNN 的语言模型,这些方法都可以应用到语料的学习中。此外,seq2seq 的机器翻译模型也可以帮助我们挖掘更多额外的信息。
■ 5.2 N-Gram 语言模型
当然我们还有可以使用最基本和最经典的语言模型 N-Gram 模型来挖掘这批语料,考虑计算 2-gram,3-gram,可以帮助我们了解 item 之间的转移概率信息。此外近几年提出的 Word2Vec 的模型可以看作是从另外一个维度去描述判断 N-Gram 的语言模型,Word2Vec 的模型可以将 term 表达成一个稠密的向量,保存了语义信息,被认为是更加突出的语言模型。
■ 5.3 RNN-based 的语言模型
Rmb(rnn model based recommend)使用循环神经网络对用户阅读序列信息建模,捕捉用户阅读的序列关系和长期阅读兴趣的起止。训练时使用用户阅读序列和文章语义信息,线上使用循环神经网络预测 topk 进行召回。
基于循环神经网络的推荐模型(Recurrent Based Recommendation)是对用户阅读顺序使用循环神经网络的方法进行建模。该模型解决了在相同用户属性和相同阅读集合的情况下召回内容同质的问题,rmb 可以对用户阅读顺序进行建模,即使相同用户属性,相同阅读集合的用户,如果他们阅读内容的顺序不同,也会有不同的召回结果。rmb 可以对长期用户阅读历史和序列信息进行很好的建模。
为了更好使深度神经网络模型进行学习,首先使用 item embedding 方法将文章或者视频的 ID 映射到一个固定维度的稠密向量空间中,然后根据用户的阅读行为和文章的语义,对用户阅读序列进行建模。
■ 5.4 使用基于 seq2seq 的 encoder-decoder 模型
用户的阅读历史可以通过 Session 的切分原则划分为很多个 Document,也就是说我们可以将一个用户抽象为文档序列。给定一个文档序列,可以预测用户接下来的阅读序列,在这里我们将利用 seq2seq 来解决这个预测问题,将用户的阅读历史进行 encoder,然后 decoder 出一个新的序列来作为推荐候选集。在预测的过程中我们将文档中词的 Embedding 向量组合成一个文章的向量,基于用户的阅读历史序列可以进行有监督的学习,优化词的 Embedding 向量。这种思想借鉴了 Seq2Seq,我们可以考虑使用用户的前半部分 session 预测用户的后半部分 session。这些都是类似机器翻译的 NLP 技术,我们坚信这种策略能够为我们提供合理有效的序列推荐。
■ 5.5 Translation 模型
在自然语言处理领域,神经机器翻译(Neural Machine Translation,NMT)模型大大提升了机器翻译的质量,使得机翻译文在忠实度、流利度方面首次超越人类专业译员。我们知道推荐业务中,线上粗排和精排的多队列融合加权,导致策略最终曝光量和多样性会明显下降。因此,我们考虑基于 NMT 模型来提升线上视频推荐结果的多样性,主要原因有以下两点:
- NMT 建模处理较长序列(长度 > 30),一方面,可以将时间、地点等 Context 信息、以及 video 自身的语义信息融合到用户的点击序列中,供模型学习;另一方面,根据用户和 video 相关 Context 信息,对用户进行视频推荐。从两个方面提升视频推荐结果的独立性和多样性。
- NMT 可以同时对 item 点击序列中 item 之间的局部和全局依赖关系进行建模,可以召回存在远距离依赖关系且用户感兴趣的 item,丰富对推荐 item 的多样性。
Trans 队列将机器翻译模型(NMT)与用户所处的 Context 信息相融合,进行推荐。用户所处 Context 信息是指用户访问推荐系统的时间、地点、心情等信息。Context 信息对于提升推荐系统的多样性至关重要,比如,白天上班时,用户可能倾向于看行业相关最新信息;晚上睡觉前倾向于看一些搞笑幽默等适合放松的信息。利用 NMT 模型可以对较长的序列进行建模的优点,将用户点击序列、video 自身的语义信息、用户 Context 信息等构成序列供 NMT 学习,利用 NMT 可以同时对全局和局部信息建模的优点,将这些信息融合并用于视频推荐,以提升推荐系统的多样性,优化人均曝光 tag 数和二级类类目数等多样性指标。Trans 模型主要分为 User Encoder 和 Item Decoder 两个部分:User Encoder 将用户长期和短期的类目(cat)、Tag 和 Profile 特征融合成。一个 Context 信息用于 Item Decoder 解码;Item Decoder 输入来自两个部分,一部分是 User Encoder 输出 Context 信息,一部分是当前的 Vid、以及当前 Vid 的 Tag 和类目。
■ 5.6 Bert 模型
从文本预训练任务看,预训练向量表示整体演进路线表现为:由静态向量到基于上下文的动态向量,由单向到双向再到同时考虑双向。最近一两年,以 Bert 为代表的动态双向预训练模型在自然语言处理领域大放异彩。推荐系统中用户兴趣建模可以借鉴 Bert 预训练目标。主要原因有:
首先,无论是 RNN 模型还是 Seq2Seq 模型以及 Translation 模型,都是从前到后建模用户历史行为序列,单向结构的建模有一定限制,而 Bert 类模型兼顾双向进行建模;
其次,用户行为顺序性的假设有时并不适用,用户行为顺序与推荐系统展示顺序有关,比如打乱某些会话内的推荐顺序不用影响用户行为。
Bert 模型召回关键点在于样本制作:
1.建模更长的用户序列:序列长度 128,对于长序列用户采用滑动窗口截取样本,对于短序列直接丢弃处理;
2.如何 MASK:样本真实长度为 N,序列中 1-N-1 随机 MASK,MASK 比例 10%;为了拟合序列任务,最后一位 N 强制 MASK。
■ 5.7 双塔模型
DSSM(Deep Structured Semantic Models)是一个用来解决搜索相关性的模型,通过将 query 和 doc 分别计算成一个向量从而获得 query 和 doc 相关性。在推荐系统中认为给用户推荐的 item 与其兴趣相关性越高,用户则越喜欢,利用 DSSM 这种相关性计算方法,通过计算 user,item 向量之间的相关性从而判断用户是否对 item 更感兴趣。
模型框架方面,我们经历了从双塔 DSSM 模型到 Multi-View DNN,Multi-View DNN 可以更好的结合图文、视频、小视频等不同业务的信息来丰富用户表示,使模型对用户判断更准确,这对业务迁移初期冷启动用户有明显作用。特征使用上,我们使用了 user 需求信息与 Item 的丰富 side infomation,包括一些映射特征,比如用户的类目与 item 类目,用户的 tag 与 item 的 tag 等。模型训练使用线上的曝光点击,曝光分享等数据作为训练数据(具体会因业务不同有所变化)。
由于召回侧候选 Item 量级非常大,无法进行 instance 基本在线预测,实际使用采用了在线实时 predict user embedding 与离线 predict doc embedding 结合的方法。将 item embedding 存在在线 ANN server,每次请求使用 ANN 取出与 user embedding 最相近的 top 1000 doc 作为召回候选,具体模型框架如下图所示:
我们对双塔模型的优化方向:
双塔 DSSM 到 Multi-Videw DNN,结合多业务信息,丰富用户表达。
增加更多 side information,学习更准确 user、item 表示。
pair-wise 形式的双塔模型,提高模型的预测能力。
结合 attention,FM 等结构,增强模型表达能力。
多塔多目标模型优化,结合业务多指标,融合丰富信息建模多塔模型。
■ 5.8 混合模型
基于深度神经网络的推荐模型 DMB(Deep Neural Networks based Model)是综合使用了文章或视频的语义信息、用户的阅读历史、长短期兴趣、上下文信息,推荐出相似语义的文章或视频。
序列类模型采用的是无监督的机器学习方法,能够很好的学习到 item 的语义向量和协同向量,但是在推荐场景中还有大量的特征可以使用,因此需要一个对推荐数据拟合更好的模型去进行机器学习,DMB 模型因此而产生,深度神经网络可以有效的对各种类型的特征进行融合,并且有很好的泛化能力,在当前的看一看系统中有着很高的召回占比和较高的用户时长。
为了更好使深度神经网络模型进行学习,首先使用 item embedding 方法将文章或者视频的 ID 映射到一个固定维度的稠密向量空间中。所有的特征会在向量化后 concat 在一起,做为 DMB 模型的第一层的输入,后面是若干全连接层。整个 DMB 模型的架构如下图所示:
在迭代的过程中发现用户的最近的阅读历史(视频播放历史)对于用户的兴趣判断非常重要。模型对于阅读历史建模做了比较多的尝试,使用过 RNN,CNN 和简单的 self-Attentnion 等建模方法,离线指标 Hitrate 都有一定的提升。最近对模型进行了新的升级,新的模型将利用用户的长期需求对用户的播放历史进行权重的重新建模。这里使用 Attention 建模方式来完成对阅读历史的重新建模。先使用神经网络将用户的长期需求 Encoding 成 Query 向量,使用该 Query 向量 Attention 所有的播放历史,再进行加权平均。同时,使用加入 pos 的建模,提高最近播放视频重要性,可以避免因为受画像的影响过多的关注符合长期兴趣的播放历史,而忽略了对新内容的试探。具体的可以参考下面的新的模型结构图。这里只给出了 User 端建模方法,doc 与之前一样。
上面的迭代过程都是在不断地优化如何更好的进行用户的兴趣描述,使用更好的网络结构生成更好的用户隐向量。这种将用户直接生成一个高阶隐向量的方法,可能会导致召回的结果过于泛化,不易保证精准性。通过在召回模型中引入 FM 层的 User-Doc 交叉特征可以很好的解决这个问题。参考 FM 的公式如下,假设前 m 个特征是 user 相关的特征,后 n 个特征是 doc 相关的特征:
User 和 Doc 的二阶交叉特征可以拆解如下如下,可以拆解为 user 和 doc 各自的两部分:
改造后的网络结构如下,新的网络可以有效的完成低阶 + 高阶特征的融合,从而实现泛化和精准的有效平衡。
由于业务高速发展,引入新数据,新场景的需求非常频繁,通过引入迁移场景信息 + 训练数据迁移可以大大加速新业务孵化情况下模型的收敛和效果。
特别说明的是,在现实系统中,综合推荐系统经常会引入新的数据源,这部分冷启动的召回通道在行为稀疏时往往表现较差。为了解决这些问题,团队近期将混合模型适配这类场景而提出一种 Internal and contextual attention network (ICAN)模型,通过加强多队列之间特征域(feature field)交互和环境信息,得到更好的(冷启动)召回效果。目前 ICAN 已部署于看一看线上召回系统。此工作发表于 IJCAI-2020。
■ 5.9 图模型
推荐系统中 User 和 Item 相关的行为、需求、属性和社交信息具有天然的图结构,可以使用一张复杂的异构图来表示整个推荐系统,如下图所示。图模型推荐算法就是基于这张复杂的异构图,使用图算法来学习图中包含的结构信息并用于系统推荐。图神经网络模型推荐就是基于这个想法,把异构网络中包含的结构和语义信息编码到结点 Embedding 表示中,并使用得到向量进行个性化推荐。
在这样的背景下,看一看召回 17 年起开始搭建面向看一看推荐的图算法平台,逐步实现了 Deepwalk、line、node2vec,PTE 等浅层模型,并在线上文章、视频推荐取得不错的收益。2018 年,以 GCN 为代表的深层图神经网络模型出现,效果远优于传统的浅层模型。因此,我们也开始对图算法平台进行升级,一方面,逐步实现 GraphSAGE、GAT、MultiGAT、FM-GAT、Transformer-GAT、Transfer-GAT、MultiTask-GAT、Weighted-GAT 等深度图神经网络模型;另一方面,开发面向线上生产、处理千万甚至亿结点,百亿级边的大柜模型异构网络。图模型一路迭代至今,经历了几个大的优化阶段如下:
模型维度:从浅层图模型(Deepwalk、Line、PTE 等)到深层图模型(GraphSAGE、GAT 等) ,再到自研深层图模型(Multi-GAT、FM-GAT、Self-GAT 等);
网络结构:从同构到属性异构,再到用户多元异构、社交多元异构。网络规模也从十万,到百万、千万,最终到达亿级结点,百亿级边的大规模异构网络。
训练目标:网络训练也从单目标持续将深度图模型升级到多目标,再到多任务。迭代更新如下图所示:
GraphSAGE(Graph Embedding with Sampling and Aggregation)模型介绍
GraphSAGE 是一种通过聚合当前结点 i 的 k 阶邻居结点信息,构成结点 i 的 embbedding 的 Network Embedding 模型。与随机游走的 Network Embedding 模型:DeepWalk、Line、node2vec,相比,GraphSAGE 有如下 3 个优点:
1.大量前沿论文证明 GraphSAGE 能够更加准确、有效抽取结点 Context 信息,并生成更高质量的 node Embedding;
2.GraphSAGE 是一种归纳学习图模型,可以学习动态网络中新加入的结点 Embeeding。
3.GraphSAGE 通过采样当前结点 K 阶领域结点来计算当前结点 embedding,使得计算具有上亿结点、数十亿条边大规模图网络变为可能。
我们通过用户观看过的 item 来构建图网络,把同一用户观看过的时间关系上靠近的两个 item 当做结点,结点之间用一条边连接,然后通过 GraphSAGE 图模型来学习图中结点的 Embedding,GraphSAGE 模型结构如下图所示:
GraphSAGE 首先通过采样(Sample),从构建好的网络中抽取出一个子图:随机采样一个源结点 V1,然后采样它的一阶邻接结点 V2、V5,在采样它的一阶结点的一阶结点(源节点的二阶结点)。
然后进行一个反向的信息聚合(Aggregation):以源节点的二阶结点原始 Embedding 作为输入,通过聚合 2 得到源节点的邻居结点的表示,然后再通过聚合 1 得到源节点 V1 的表示。聚合得到结点的表示之后,通过 Pair-Wise 的无监督损失函数,或者有监督的交叉熵损失函数训练网络的参数。
GAT(Graph Attentional Neural Network)模型介绍
GraphSAGE 虽然能让你更有效聚合结点信息,但它在进行结点信息聚合的时候存在一个明显不足:把所有的邻接结点都看成相同的权重,忽略了不同结点间重要程度的区分。因此,我们引入了 Attention 机制对 GraphSAGE 模型进行升级,上线了 GAT 模型,在进行信息聚合的时候给不同的结点赋予不同的权重,以达到区分不同结点重要性的目标。Attention 机制的原理如下图中左侧图所示。
GAT 模型的基本结构和 GraphSAGE 一样,分为采样和聚合两步,最大的区别是,GAT 在完成结点采样,进行信息聚合的时候,通过传统的 Vallina Attention,给不同的结点赋予不同的权重,以达到区分不同结点重要性的目标。
多任务 Multi-GAT 模型介绍
看一看召回中,一些新的优化目标(比如用户分享行为)或新任务存在数据稀稀疏的问题。因此我们基于 GAT-Multi 进行多任务/目标的学习,将不同业务或不同类型的输入作为输入,输出端进行拆分,基于多目标或多任务提升 embedding 效果。整个网络结构如下图所示。
从图中可以发现,模型输入是多种数据类型或多业务类型的混合数据输入,输出端根据不同的目标进行了拆分。输入是用户点击和分享构成的异构网络,输出端拆分成了点击和分享两个目标,并在损失函数中对分享目标进行了提权,目标期望通过用户的点击日志提升用户的分享行为指标。
总结与展望
内容策略与召回通常验证收益路径长,见效慢,这样大大加大了这部分工作的协同开发的诉求,我们与工程同学经过无数次性能优化与 PK,依赖兄弟团队提供了大量工具帮助,最终实现目前比较高效的一条迭代路径。
同时,由于召回与内容策略在业务底层,策略相对比较多,也比较发散,获得收益面通常也比上层要难,我的一些思考是,需要在工作中对这部分的工作梳理做足够细致归类,逐层优化,集中人力与优势精细打磨,持续沉淀核心部分,紧跟业界学术界前言算法,在兼顾满足业务发展的各类细碎需求的同时让算法同学获得成长与成就感。
注意:本文归作者所有,未经作者允许,不得转载