Fork me on GitHub

阿里巴巴长文档推荐系统在企业数字化中的应用

以下文章来源于 https://zhuanlan.zhihu.com/p/677525998

导读 今天分享的主题是阿里巴巴长文档推荐在企业数字化中的应用。文章将介绍企业知识推荐系统的价值、挑战及其架构,并介绍大模型在推荐领域的应用。

主要内容包括以下几个大部分:

  1. 背景介绍

  2. 企业知识推荐系统

  3. 大模型在推荐领域的应用

  4. 总结

分享嘉宾|张谋丰 阿里巴巴 高级数据工程师

编辑整理|任航琦

内容校对|李瑶

出品社区|DataFun


01背景介绍

1. 企业数字化转型

近十年来数字化技术飞速更新迭代,企业的数字化程度越高,就越能够利用前沿的技术来实现企业的转型、增长和创新。企业数字化转型大致可以归纳为三个阶段。



第一阶段是信息化。指的是将传统业务中的数据和流程通过计算机系统来处理和储存,以此来提高基层员工的工作效率和企业信息化,管理系统包括 MES、CRM、OA、ERP 等等。

第二阶段是数字化,基于大量的运营分析数据,对企业的运作逻辑进行数学建模优化之后,再反过来指导企业的日常运作。在这个阶段,企业会采用一系列的数字化工具,比如大数据、云计算、区块链等等,来提高企业的数字化水平和竞争力。

第三阶段是智能化,将 AI 技术更多地应用于企业的各个生产环节,如智能招聘、智能合同、智能人事、智能财务等等。使得系统像人一样聪明,具备完成复杂任务的能力。

2. 技术社区--企业数字化的重要支撑

在企业数字化转型的过程中,技术社区起到了很重要的推进作用。



无论是国外的技术社区还是国内的技术社区,都提供了知识共享和学习的平台。通过这些开源的技术社区,企业能够获得最新的技术趋势和解决方案,从而推进业务的发展和创新。同时大型企业有很多不能公开的资料以及内部才会遇到的特殊案例,因此很多企业会创立自己的内部技术社区。阿里巴巴的内部社区叫做 ATA,成立于 2012 年,到今天已经有十几年的历史了,存在非常多在业务发展过程中沉淀下来的宝贵经验。

3. 企业知识推荐的价值和挑战

技术社区基本都会有个性化的推荐系统,来提升社区用户体验和参与度。对于大型企业的技术社区,推荐系统能够帮助企业员工提高工作效率,增强企业内部的协作,提升员工的技术交流参与度,最终增强企业的竞争力。

企业的知识推荐系统,往往面临着以下四个挑战:

  • 生命周期短。因为技术文章技术的发展迭代非常快,具有很强的时效性,与新闻类似。推荐过时的内容对于用户来说是没有太大吸引力的。
  • 文章篇幅长。技术文章相比于一般自媒体而言篇幅更长,且具有比较强的逻辑性。这类长文档建模,对于 NLP 语义表征技术会是很大的挑战。
  • 知识壁垒高。不同于大众都能够读懂的新闻文章或娱乐文章,不同的细分领域会有不同的知识体系和术语,通用的语义表征技术很难准确捕捉到用户感兴趣的知识内容。
  • 冷启动问题。企业用户本身的人数不多,并且技术社区对于员工来说是低频的场景,用户行为会相对稀疏。

02企业知识推荐系统

接下来详细介绍阿里巴巴的企业知识推荐系统。

1. 推荐系统通用架构

首先来简单介绍一下文章类推荐系统的通用架构。这里主要发生的交互是在用户和文章之间,所以通用的模型架构会沿着文章建模和用户建模两条链路来进行。



链路的底层是特征工程。特征分为四类,分别是内容特征、属性特征、上下文特征和协同过滤特征。接下来是对文章和用户分别进行建模,来得到文章和用户的表征,再由模型来进行打分排序。推荐系统的排序,分为召回、粗排、精排和重排。最后将排序好的文章返回给用户,用户根据自己的喜好来进行反馈,可能会有点击、收藏、转发、点赞等行为。最后这些埋点的数据会回流到推荐系统,用于模型的训练。如此循环,形成推荐系统的数据飞轮效应。

2. 企业知识推荐架构



企业知识推荐系统的架构如上图所示。

最底部是特征层,如前文所述,特征包括四大类:

  • 内容特征,主要用到了标题、摘要、关键词和实体。摘要是员工在发布文章的时候手动输入的一段文本。关键词和实体是由算法提取的 tokens。
  • 属性特征,用到了作者、文章以及用户的属性信息,比如作者信息、文章发布时间、知识体系,文章的标签等。知识体系和文章标签是预先设置好的,用户在发布文章时可以多选。知识体系是不能用户自定义的,而文章标签可以由用户临时自定义增加进去。
  • 上下文特征,用到了常规的用户行为指标,比如 CTR、浏览数、点赞数、收藏数等等。
  • 协同过滤特征,用到了常规的用户 ID、作者 ID、文章 ID,还有用户与文章的浏览关系二部图以及比较特殊的阿里企业内部的用户与用户之间的协同关系图。通过员工的办公行为数据,可以构建员工之间的协同网络,计算出员工之间的办公关系紧密度。办公关系越紧密的员工,他们共同做的事情就越接近,也就越可能需要共享更接近的知识内容。

往上一层是引擎层。引擎层可以分为离线计算引擎和在线服务引擎。离线计算部分使用了三个引擎:第一个是 data works 数据研发平台,用来进行数据处理和特征工程计算;第二个是 OSS 对象储存服务,对象储存服务用来储存离线训练的模型文件;第三个离线计算引擎是机器学习平台,用来进行离线的模型训练。在线服务引擎,也包括三个平台:RTP 在线预测平台,用来进行实时的 CTR 模型打分;TPP 个性化推荐平台,用来进行实时的推荐服务的自动化运维和AB测试;图储存服务,用来进行特征数据的检索。

再往上一层是排序层。召回部分,实现了多路的召回,总共有 6 种召回方法。精排部分,先后实现了线性模型、FTRL模型以及多种深度模型。在策略适配部分,实现了降权、打散、权限过滤、黑名单过滤、第一质量文章过滤、分页过滤等业务和逻辑功能。

最上面一层是功能层,除了 ATA 的首页推荐,还承接了技术人推荐、技术圈推荐、搜索词推荐、相关推荐等推荐功能。

3. 企业知识推荐-召回

下面详细介绍多路召回的具体实现方案。



企业文章和用户信息的更新频率相对于其他 toC 场景来说是相对低频的,T+1 天才会更新。因此我们的文章和用户的特征数据以及召回结果,都是 T+1 天离线计算好的。当请求进来的时候,通过在线检索引擎,基于用户的浏览序列来检索召回结果。作为召回池来进行后续的排序工作。

这里实现了多路召回,多管道召回方法主要包括四类:

  • 第一类是常规的协同召回,实现了 Swing 召回和关系召回。Swing 召回是 user item user 结构的协同过滤方法,比传统单边的协同过滤方法更稳定,而且对网络结构的变化会更灵敏,因此也更适合技术社区对文章时效性比较敏感的场景。除此之外,因为 Swing 召回会对文章比较敏感,所以容易召回一些较为热门的文章,为了提升整个召回的多样性,我们还对 Swing 召回的热门文章加入了惩罚因子,对其进行降权。关系召回,基于企业内部员工的多种办公协同关系来构建协同图。图中的节点是员工,边是员工之间的关系。将用户之间的相似度定义为图中节点的距离,节点越接近表示他们的办公关系越接近,也越可能将用户浏览过的文章推荐给另一个用户。
  • 第二类召回方法是标签召回,是基于文章或者是用户身上的标签来进行召回。一种是类目召回,另外一种是技能召回。类目召回是文章发布时作者可选的标签,比如操作系统、数据库、软件开发等。技能标签,是员工在 HR 系统录入的个人技能标签,比如品牌营销、投资理财、语音技术、NLP 技术等。通过这两种标签召回方法,能够在一定程度上缓解冷启动问题。
  • 第三类是表示召回,我们实现了语义召回。具体的实现方法是把文章的标题、摘要以及标签文本拼接在一起,通过 bert 的向量化表征,计算两个向量的相似度,得到语义召回。
  • 第四类是规则召回,基于流行度,即原文章的浏览数,来进行热门文章的召回。

为了比较多管道召回方法的效果,我们对不同方法的点击率进行了对比。从对比数据中可以发现,标签召回类的方法效果是最好的,不管是文章的类目标签,还是作者的用户标签,都是一种比较显性的明确的兴趣内容的表示。因此基于标签召回的文章会更符合用户的兴趣。同时,标签召回也可以很好地缓解冷启动问题。

此外,热门召回和 Swing 召回的效果也都不错。

语义召回表现比较差。这可能是因为技术文章有一定的知识壁垒,通用的 NLP 模型并不能很好地理解专有名词。此外,企业内部会有一些更特殊的内部专有名词或者黑话,通用的 NLP 语义表征效果不会很好。

4. 企业知识推荐-精排

接下来介绍推荐系统中一个非常重要的环节------精排。



阿里巴巴内部的技术社区最开始是没有精排模型的,直接使用了召回分进行排序。在前端加入了埋点功能,有了用户日志数据以后,才开始上精排模型。前后经过了传统模型、深度模型以及当前在探索的大模型推荐这几个阶段。

样本方面,将曝光点击的文章作为正样本,曝光未点击的文章作为负样本。正负样本的比例大概在 1 比 8 左右。排序方法使用的是 Pointwise 方法。

特征方面,除了内容特征、协同过滤特征以外,我们对上下文特征做了长短周期的扩展。对大部分的上下文特征,比如 CTR、浏览数等,扩展了一天、三天、一周、一个月、三个月等多个版本。属性特征部分,在企业内部已经能够拿到非常丰富的员工属性特征。在此基础上对文章属性、作者属性以及用户属性进行交叉扩展,来提高特征的丰富度和表达能力。

第一版精排模型采用的是 FTRL 模型线性模型。FTRL 模型是一种高效的在线学习算法,适合用于处理大规模稀疏数据,并且能够很好地平衡在线学习的精度问题和模型的稀疏性问题。线性模型有结构简单、可解释性强和易于部署的优点,所以比较适合业务初期的选择。

业界也是在线性模型 LR 模型的基础上,沿着不同的特性进行了改进。以上图为例,LR 模型往下走是通过引入特征交叉来缓解特征组合问题。PLOY2 特征交叉是一种暴力的特征组合方式,计算复杂度非常高。FM 模型进一步引入了隐向量来降低计算复杂度,并同时提高模型的泛化性。FFM 模型则是在 FM 模型的基础上引入了场信息,进一步提高模型的表达能力。

然而这一系列的模型都难以高效地实现高阶的特征组合,基本上都是实现了二阶的特征组合。因此业界通过树模型来做特征筛选和组合,从而实现更高阶的特征组合。除此之外还有 MLR 模型,是在 LR 模型的基础上采用了分而治之的思路。先对样本进行分类计算权重,在各个分类上应用 LR 进行预估,最后加权求和来作为最终的预估。MLR 模型具有表达能力强和稀疏性两个优势。



FTRL 模型上线以后,累积了几个月的日志数据,我们开始尝试深度模型。为了找到适合于自身场景的模型,我们对多个深度模型进行了研究和实验。

Wide&Deep 模型是精排模型中比较具有代表性的模型。后续的很多工作都是针对 Wide 侧和 Deep 侧进行的改进。该模型融合了线性模型和深度模型的优势,来解决推荐系统的记忆和泛化问题。Wide 侧是 LR 线性模型,负责处理稀疏和类别特征。Deep 侧是 DNN,负责对稠密特征进行高层次的特征提取和学习。最终将 Wide 侧和 Deep 侧输出的特征拼接在一起来进行预测。

针对 Wide 侧改进的模型有 DCN 和 DeepFM。DeepFM 是将 Wide 部分的 LR 改成 FM,以增加模型的二阶特征交叉的能力。DCN 是将 Wide 部分改为 cross network,通过增加 cross layer 层数来实现交叉特征,从而提高模型的表达能力。

针对 Deep 侧改进的模型有 AFM 和 NFM。FM模型可以处理稀疏和高维特征,但是难以捕捉到特征之间的交互。AFM 模型是通过引入注意力机制,来有效学习特征之间的交互信息,提高模型的预测性能。NFM 则是在输入层与 NN 层之间加入了特征交叉池化层,以此增加 Deep 部分的特征交叉能力。

除了 AFM 之外,DIN 也使用 Attention 技术。DIN 没有 Wide 部分,只有 Deep部分,显性地对文章和用户进行建模。用户建模指的是对用户历史浏览的多篇文章进行学习,通过多篇文章的融合来表征用户的兴趣。DIN 的改进在于通过将候选文章和用户历史多篇浏览文章进行 cross attention,来计算用户的兴趣权重。将多篇文章进行加权求和,作为用户的表征。

AutoInt 也使用了 Attention 技术,它使用了 Multi Head Attention 来进行高阶的显性特征交互,以此来提升模型的预测效果。

此外还有使用了不同特征重要性技术的 FiBiNet,以及使用了强化学习的 DRN。

为了最终选择适合用于上线的模型,我们离线比较了 8 款深度模型。其中 Wide&DCN 效果是最好的,高于早期我们使用 FTRL 模型 0.063AUC 的绝对值。Wide&DCN 是我们基于企业内部知识推荐场景特点进行改良的一个模型。我们把 Wide&Deep 模型和 DCN 模型进行了结合。一方面利用 DCN 的 cross network 结构和 deep 结构保障模型拥有高阶交叉特征的能力和不错的泛化性;另一方面因为企业技术社区用户行为相对稀疏很多,而且用户的兴趣比较单一,所以保留了 Wide&Deep 模型的 Wide 结构,用来保障基于人工领域经验做的这些特征能够被模型更好的记忆。线上 AB 实验也证明了 Wide&DCN 模型的 CTR 比 FTRL 模型相对提高了 10%。

03大模型在推荐领域的应用

接下来分享我们正在进行的大模型领域的应用在推荐方向的一篇工作。

1. 特性



自从 ChatGPT 出现以后,各行各业都在学习和尝试将大模型应用于自己的业务场景。大模型的特性可以总结为以下三方面:

  • 世界知识,大语言模型拥有超大规模的参数量,并且用了海量的互联网数据来进行无监督的训练,从而使得大模型学习到了非常丰富的世界知识,拥有了强大的自然语言理解能力,让大模型表现得像对人类世界有了常识一样,并且具备了各行各业的专家经验。
  • 上下文学习,研究发现当大模型大到一定程度以后,能够涌现出在小规模模型上并不具备的能力。所谓的涌现现象,指的就是由很多微小个体组成的复杂系统,当这些微小个体多到一定程度并且相互作用的时候,就能够在宏观层面上展现出本在这些微观个体上并不具备的一种无法解释的现象。大模型涌现出来的一个重要能力就是上下文学习,允许模型在不进行微调的情况下,通过纯文本自然语言的交互方式,仅需少量案例,就能在各种未知场景的下游任务中取得不错的效果。
  • 思维链,这是大模型涌现出来的另一个重要能力。思维链本质上是一种特殊的上下文学习。一个复杂的问题,大模型可能一开始没办法很好地解释清楚。但如果用户把复杂的问题一步一步拆解开来,并且把推理的步骤解释给大模型,让大模型懂得推理的步骤,或者是直接要求大模型能够一步一步地去思考问题,大模型就能够给出更高质量的回答。

2. 大模型应用于推荐领域的优势

基于上述特点,大模型在推荐领域具有如下一些优势。



大模型具备的世界知识和强大的语义理解能力,能够很好地应用在不同的领域,适配不同的推荐场景任务。而上下文学习和思维链能力,使得大模型能够对长文档有更深度的理解,能够从用户历史浏览文章中提炼出更深层次的兴趣共性。此外思维链的特性也为大模型提高了可解释性。

3. 企业知识推荐的挑战

具体到我们企业内部的知识场景,面临着很多挑战,是传统的深度模型难以解决的。



长文档问题,与微博、豆瓣等社区的文档长度相比,技术文档的长度普遍会很长,并且逻辑性也比普遍文章更强。一般的文章可能会先介绍问题的背景,分析问题,给出解决方案,部分文章(如算法文章)可能还会列出实验步骤,给出实验的数据。这样逻辑性强的文章,无疑对 NLP 模型提出了很大的挑战。

另外随着计算机技术的发展,各个领域不断深入,领域之间的壁垒越建越高。前端可能需要掌握 CSS、Java script,后端可能需要掌握 Java、C++,算法可能需要掌握 CNN、RNN 等等。这些专有名词和相关的知识,对于跨领域的人是有很大陌生性的。推荐模型如果不能够很好地理解和区分这些知识内容,把一些不相关的内容推荐给了用户,会严重影响用户体验,降低其对技术社区的参与度。

另一大挑战是行为稀疏。企业内部的技术社区,本身是低频场景,日平均用户的比例大概只有 16% 左右。而技术文章的篇幅长,逻辑性强,需要花费不少的时间才能把一篇文章读完。导致活跃用户在一天的浏览量也不会很多,平均大概在 3.6 篇左右。

用户兴趣的动态性和多样性也是一大挑战。用户不仅有长期不变的兴趣方向,比如后端开发工程师可能会长期学习 Java、C++ 等编程语言的技巧,或者是性能优化相关文章。但也可能间歇性地,因为一些外部原因,去看一些其它领域的内容,比如最近大火的 AIGC,不同领域的人可能都会去看这方面的文章。但可能只是动态的、间歇性的兴趣。

4. 大模型推荐-模型结构



针对上述挑战,我们结合大模型特性,设计了基于大模型的文章推荐模型。这篇工作正在投稿 ICDE 中。

模型的改进点主要有三点:第一点是利用大模型强大的知识理解能力和文章总结能力来进行文章的表征;第二点是设计了 CUI 表征用于学习用户长期不变的兴趣;第三点是另外设计了 IUI 表征,来学习用户间歇性的即时的兴趣。

模型的主要结构也是分成了三个部分,如上图所示。

(1)Article Encoder

第一部分是左边蓝色框中的 Article Encoder,主要用于实现对文章的表征。其输入由三部分组成,最左边是 Article Features,主要包括文章的知识体系、文章标签、作者 ID、作者岗位等属性信息。对于离散特征,会先经过 Feature Embedding 转化为稠密向量,然后和其它数值类特征拼接在一起,进入 DNN 层作为 article 的表征,这里的 Embedding 采用的是随机初始化的方式。

中间输入的是文章的标题,经过 Semantic Encoder 对文章标题进行语义的表征。这里的 Semantic Encoder 使用的是 Bert 模型。最右边输入的是文章的内容文本,会经过 LLM Encoder 对文章的内容进行总结提炼。内容跟 title 一样,会经过 Semantic Encoder 来进行表征。这里的大模型使用的是 Chat GLM6B。

LLM Encoder 有多种方法。第一种方法是直接对文章的整个内容文本进行总结。但是大模型的 tokens 是有限制的,当文本的长度超过了大模型的最大 token 时会直接进行截断。第二种总结方式需要先把整个文本分段,将第一段文本进行总结,总结以后把总结文本加入到第二段的原文中,再对第二段的文本进行总结,以此类推,逐步压缩文本的长度。第三种总结方式是分别对文章的每一段进行总结,再将所有总结内容合在一起,并对总结进行提炼。这里我们使用的方法是直接将所有内容都给大模型来进行总结。

Article Encoder 部分,最终是把 Article 表征、Title 和 Body 这三个部分的输出 concrete 到一起作为 Article Encoder 的输出。

(2)Instant User Interest Representation

第二部分是 Instant User Interest Representation,如上图中绿色框中所示,负责学习用户的即时兴趣动态。它的输入是用户的浏览文章序列,每篇文章会经过 Article Encode 来获得文章的表征。用候选文章来对文章序列做 Cross Attention,学习候选文章关于用户浏览文章序列的兴趣权重,最后加权得到 IUI 的表征。

(3)Constant User Interest Representation

最后一部分是最右边黄色框中的 Constant User Interest Representation,用来学习用户恒定的兴趣表征。这部分的输入除了用户浏览文章序列,还包括用户的 profile。

CUI 部分包括两个 LLM Encoder。第一个 LLM Encoder 会对浏览序列的每一篇文章进行总结。第二个 LLM Encoder 会对每一篇总结的文章,在 prompt 里面加入用户的背景信息,让模型可以基于用户背景信息提炼用户恒定的兴趣表征。最后会再把候选文章的表征跟 CUI 进行交互,作为这一模块的输出。

最终,会将上述三个部分的表征集合在一起,经过一个 MLP,进行最后的预测输出。

5. 大模型推荐-评估

我们进行了一系列的评测和实验来评估模型效果。



离线评测部分,我们将业界 6 款 SOTA 模型,与我们的大模型进行了对比。比较了 AUC、MRR、nDCG@5 以及 nDCG@10 等指标,在其中三个指标上,我们的模型都取得了最高的分数。

此外,为了验证模型各个模块的有效性,我们还进行了消融实验。我们依次拿掉了 Constant 部分、Instant 部分以及 Constant 部分中的用户信息。实验结果表明三个模块对于推荐效果确实都是有正向作用的。其中 Constant 效果最明显,AUC 从 0.6806 下降到了 0.6712。这是因为企业员工由于工作需要,通常会有比较稳定的兴趣方向。因此 Constant 模块对于用户恒定兴趣的表征,会比较好地拟合到这方面的兴趣。

再看减去了 UserProfile 用户信息的实验。用户信息放在 Constant 模块第二个 LLM Encoder 里面,大模型可以基于不同用户的知识背景,对用户的浏览序列进行有针对性的浏览内容提炼。从实验结果可以看到,减去用户信息的效果略好于减去 Constant 部分的效果,但相对于完整的模型都会比较差。这说明用户信息是 Constant 模块中很重要的一部分,将用户背景信息告诉大模型有助于大模型基于用户的视角来感知用户对于历史文章内容的关注度,从而有的放矢地从历史文章中提取出共性的内容。

此外,减去 Instant 部分,实验效果也下降了很多。说明 Instant 部分确实能够从用户的浏览时序上发现用户的即时兴趣。

最后,将 Constant 和 Instant 模块的权重可视化出来,结果也证明了两个模块的倾向性确实是不同的。横轴是文章的浏览序号,数字越大表示时间越接近现在。方块的颜色深浅,表示权重的大小,颜色越深表示权重越大。Instant 模块的权重直接拿了 Attention 权重来进行表示。Constant 部分,因为没有设计 Attention 结构,所以使用 Constant 的向量和用户历史文章序列向量来做 cos 相似度,再做 soft min,再做 soft max 来作为其权重的表示。

从可视化结果可以清晰地看出,Instant 的权重在时序上会有很大的区分度,整体的趋势是越往后权重越大。而 Constant 部分的权重在时序上是均匀分布的,不会随着时间的不同而不同。

04总结



回顾本次分享的内容,文章一开始介绍了企业技术社区推荐的背景以及面临的四个挑战。接着介绍了阿里巴巴知识推荐系统的系统架构、多路召回的具体实现方法以及精排模型,从规则排序、传统排序到深度模型排序。最后介绍了一篇我们正在做的大模型推荐的工作。这篇工作主要针对的是技术文章推荐,优化点在于长文档表征、恒定用户兴趣表征和即时用户兴趣表征。

以上就是本次分享的内容,谢谢大家。




本文地址:https://www.6aiq.com/article/1705053309183
本文版权归作者和AIQ共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出