微拍堂 | 深度召回在文玩个性化推荐中的实践

star2017 1年前 ⋅ 3070 阅读

图片

分享嘉宾:赵争超 前微拍堂算法负责人
编辑整理:王岩
出品平台:DataFunTalk

导读: 当前阶段,“个性化推荐”早已成为了电商平台的基建工程,也是 AI 驱动业务增长的重要支撑,概括地说,个性化推荐是一门 AI 结合消费者行为心理学,运筹优化等多个领域的交叉学科。而今天的分享,是我们对“个性化推荐”这个命题在文玩拍卖行业的一次实践总结和深入思考,受限于篇幅,本文会聚焦在推荐的召回侧,也就是 matching 阶段的深度学习实践。具体内容包括:

  • 业务背景及技术挑战
  • 解决方案综述
  • 拍品 embedding 学习
  • 跨域学习搜索关键词意图 embedding
  • 用户多兴趣 embedding 学习
  • 总结与展望

01 业务背景及技术挑战

1. 微拍堂 APP 个性化推荐业务场景

微拍堂是一家文玩行业的垂直电商,专注在中国传统文化相关的细分市场,我们把线下竞拍的交易模式搬到了线上。消费者可以对拍品出价,也可以与他人竞价,最终价高者得。在微拍堂 APP 上,涉及到个性化的场景主要有首页/频道页的 feed 流,以及购物路径节点上的内容推荐。推荐算法在 APP 流量的个性化分发以及用户体验上起着非常核心的作用。

2. 召回侧的技术挑战

在文玩行业的细分市场,在拍卖的交易模式下,对比综合性电商,个性化推荐(特别是召回阶段),有着独特的技术挑战:

  • 拍品内容理解:在文玩行业,缺少综合电商成熟的结构化类目体系,缺少商品卖点的标准表达模板。而且在竞拍的模式下,每个拍品都相当于秒杀商品(浅库存、短生命周期),我们很难利用历史信息直接去训练 item embedding。
  • 文玩购物决策的业务理解难度:文玩行业的知识门槛下,用户的专业性差异大,行为上对需求的表达不太明确,训练出来的 user embedding 质量在人群之间的差异比较大。
  • 大部分用户在文玩行业的需求过于聚焦,也给推荐内容的多样性带来比较大的挑战。
  • 通过深度召回学习到用户的多兴趣向量之后,如何‘带约束’地去召回最近邻(只在某个细分的类目里面去召回用户偏好拍品),也是一个需要解决的技术问题。

02 整体技术方案

图片

针对拍品的属性,类目体系缺失的问题,我们投入了很多精力在 NLP 和图像算法,来作为推荐的算法基建工作。

  • 在 NLP 部分:我们构建了文玩领域的分词模型,解决文玩专有名词的识别问题。同时,也把更大的精力放在了 NER 上,通过实体识别,在非结构化商品内容描述里挖掘更多的卖点,比如,翡翠的产地、产状、题材、寓意等。
  • 在图像算法部分:我们通过识别商品主图中的关键图像特征,挖掘反映拍品的价值以及确定性的相关信息(如,钱币的年代等)。通过这两部分的算法基建工作,我们挖掘了上千个标签,为后续的召回算法提供了大量的基础特征。

在召回侧的表征学习上,我们重点解决了三个问题:

  • 通过预训练的 item-unit 学习拍品的 embedding 向量表达。
  • 通过跨域学习将拍品 embedding 通过 DSSM 迁移到搜索关键词,来表达用户的搜索意图。
  • 通过构建 user 多峰兴趣模型将 item 的 embedding 迁移到 user 的 embedding,挖掘用户在时间跨度上的长期和短期行为,融合用户多兴趣向量。

03 拍品 embedding 学习

1. 拍品 embedding 学习

图片

在外层结构上,我们应用了 skip-gram 的方式,通过用户行为序列构造的句子,在设定的 window size 里面抽取正样本,并进行负样本的随机采样。在这个基础上,我们结合文玩行业本身的业务特点进行样本的调优,比如:对文玩的购物决策行为序列进行 session 截断,对热卖店铺的打压以及拍品被选为负样本概率的整体调参,使得正负样本在业务上的差异性保持多样化。

在内层结构里,我们构建了 DeepMF+item unit 的网络,对每个拍品,我们构建权重共享的 item unit 子网络,子网络的输入是编码后的拍品的多维度属性 id(无 item ID),输出是代表拍品的 embedding,通过 item unit 子网络输出的 embedding pair 经过 DeepMF 构造内积,经过 Sigmoid 去拟合 0 或者 1。通过这个网络,我们解决了浅库存,短生命周期的拍品没有办法直接去训练 item embedding 的问题(即,用拍品的多维度属性 id 构建 item unit 网络端到端地学习 embedding)。

2. Item unit 的网络结构

图片

上图是 item unit 的网络结构细节:网络的输入是代表拍品所有相关属性的 id,输出是拍品本身的 embedding。对于任何一个新上架的拍品来说,只要这些属性是确定的,我们就能利用历史信息去计算这个拍品的 embedding。这些确定性的属性是来自于多方面的信息,包括拍品所属的类目、NER 识别的属性实体、图像算法挖掘的 tag 等。

在 id 类的信息表达上,我们既有 id 的 embedding lookup table,又有 id 的权重 table,这两者的相乘才是属性代表的 embedding,再参与到整体的模型学习中。

为什么要用 embedding 乘以它的权重?其实是出于对零售业的商业逻辑的思考,一个典型的例子:同样一件运动裤,同样的材质,类似的款式,耐克能比李宁卖的更贵,其原因大部分来自于品牌的溢价,还有一小部分可能是来自于品牌下的独特的款式设计。所以在表达商品 embedding 时,品牌、属性、款式这些特征 id 在 embedding 中占有的权重天然应该是不一样的,我们期望模型能够学习到不一样的权重。

另外,在这个模型里,我们还将拍品的类目、实体属性 id,与拍品的标题做了 Attention:用属性 id 作为 query,title 作为 key 和 value。这也是我们基于电商的业务理解后的一个尝试,因为类目属性,往往代表拍品的内在特质和卖点,而标题则是拍品的外在营销表达,商家会在标题里面带上略显夸张的营销词/广告词,而不同的词能够对不同卖点的拍品营销效果起到不同程度的加持作用,所以我们希望模型能够学到这种加持作用(类似于帖子或者视频的标题党能够带来额外的点击),这些融合业务知识的探索都是为了让模型更好地学习拍品在不同特征上的细微差别产生的整体的 embedding 变化。这也是我们基于拍品 embedding 的最核心的网络结构。

04 跨域学习搜索关键词意图 embedding

图片

得到拍品的 embedding 之后,我们还希望把用户的搜索词和兴趣都映射到同一个向量空间来分别表达搜索意图和用户的多兴趣点。我们采用了跨域的思想来学习搜索词 embedding,首先构建搜索词和拍品之间的跨域样本(正样本是来自于搜索之后的拍品点击,以及拍品和标题之间的关系,负样本随机抽样之后调优)。然后通过搭建两个域的 DSSM 双塔模型,在拍品域,我们用预训练的 item unit 网络来代表拍品的 embedding(左边的部分),在右边的搜索词域我们通过字的 embedding 再加上两层的膨胀卷积门、一层的 MLP 来表达词的 embedding,然后再通过 DSSM 这种训练的方式来学习样本之间的正负对关系。通过这种方式,把拍品的 embedding 迁移到了关键词上,使得两者处在同一个向量空间。最终两个域都会端到端地更新参数,从而得到了代表搜索意图的关键词 embedding。

05 用户多兴趣 embedding 学习

1. 业务问题

图片

在用户多兴趣的学习模型里,主要解决三个业务问题:第一,如何学习用户在一个 session 中表现出来的多峰兴趣,比如,在逛淘宝时,消费者可能同时在找他喜欢的衣服和手机。第二,如何更好地融合用户的短期行为和长期行为中的兴趣表达:我最近 30 天看的和最近 5 分钟内看的,如何影响我接下来的购物决策。第三,如何学习用户的多个兴趣并保持多个兴趣 embedding 之间的差异性和独立性。

2. Fusion Gate & Selection Gate

图片

上图是用户多兴趣模型的整体网络结构,左边部分借鉴了阿里的 SDM,同时我们在这个基础之上做了三个改进:第一,我们通过 fusion gate 融合门学习的向量从一个变成了三个,来代表用户的三个不同的兴趣;第二,为了让三个向量往不同的方向收敛,我们又设置了另外一个门:selection gate(0/1 门),保证每一次只有一个向量去跟 target item 做交互;第三,为了增加三个向量之间的区隔度,我们还加入了度量学习的方法来保证三个向量之间的两两差异度。



最终的损失函数会包括交叉熵的损失函数和度量学习的损失函数,两个函数来共同优化来达到最优。最终模型的结果,我们会将 selection gate 之前的这三个向量作为用户的三个兴趣的表达。

图片

这个是我们多兴趣向量模型的细节,左边部分跟 SDM 基本上一致,只是我们在短期/长期行为以及用户标签的选择上,我们会结合文玩行业的特点做一些调整,包括我们把短期行为的 LSTM 换成了 GRU,然后通过短期行为、长期行为各自和用户画像标签去做 Attention,分别学习三个兴趣的 embedding。并且三个短期和中长期的兴趣通过我们共享参数的 fusion gate 融合成三个不同兴趣的 embedding。

Fusion gate 起到了融合短期和长期行为权重的作用,而在 selection gate 这部分,三个向量会各自跟 target item 做 embedding 的内积,而 selection gate 是一个 0/1 门,所以每次只会选择内积最大的向量作为 output embedding。然后 output embedding 会再次与 target item 做内积之后,再过 Sigmoid 拟合点击或不点击的 label。所以这两个门起到了不同的作用,fusion gate 的作用是融合兴趣在时间跨度上的表达,而 selection 的作用是对不同兴趣点的选择与更新。

3. 度量学习

图片

在实际的建模过程中,我们发现只用 selection gate 的输出结果作交叉熵损失函数,结果不够严谨,这也是为什么要加入度量学习的原因。因为我们为了让兴趣更加聚焦,每一次只更新一个兴趣向量,所以如果一个用户的兴趣本身比较集中(或者多兴趣点的行为频度也就是样本量差异很大),就会导致另外两个兴趣向量没有办法得到充分的训练。最终这三个兴趣向量表达的可能只有一个向量是有效的。

基于这一点,我们在训练内积最大的那个兴趣向量的同时,还要保证这三个兴趣向量之间的距离要充分的大,所以最终的损失函数会在上一步的交叉熵损失函数基础上加上度量学习的损失函数(两两兴趣向量的内积最小化)。

为什么选择内积?我们通过实践后发现:通过内积的方式,能挖掘出更多的信息。因为假设当用户只有一个兴趣向量的时候,另外两个向量会更多地参与到度量学习的损失函数里,而很少参与到 targeted item 的交互,这两个向量为了使损失函数变小,它就会朝着两两之间内积变小的方向去变化,这也加速了向量模变小的趋势。

当我们发现训练出来的某一个向量模很小时,就知道了这个向量过多的参与了度量学习的损失函数,也就是说这个向量作为兴趣向量的置信度,相对是比较低的。所以我们通过这种方式不仅学习到了兴趣向量还学习到了兴趣向量的置信度的衡量方法。

图片

上图反映了是否使用度量学习的差异。我们抽样了某个用户,把他的三个兴趣向量映射到了距离最近的类目,发现如果不使用度量学习,每一个兴趣向量里面都和茶叶比较相似(因为他最近浏览了很多茶叶),这 3 个向量代表的兴趣点不够独立和多样性。对比加入度量学习的方法,发现训练出来的三个向量在类目上的差异更大。而且发现,相关度较低的向量的模长会更小一点,模长可以作为未来我们要不要使用这个兴趣的置信度。所以通过度量学习我们提升了多兴趣之间的区隔度,也提升了单个兴趣的聚焦程度。

4. 多兴趣向量的进一步发散

图片

构建用户的多兴趣模型后,我们可以用它来召回拍品索引中的 top N 最近邻了。但是我们还希望对这个问题做进一步的发散:能不能用用户的多兴趣向量来增加推荐内容的多样性。因为在文玩行业当中大部分用户的兴趣聚焦在一到两个类目,给推荐多样性带来了比较大的困难。所以我们期望不仅能够召回到符合用户兴趣的拍品,还能够召回到其他潜在的感兴趣的拍品来扩大用户的兴趣半径。我们期望通过用户的多兴趣向量来提升用户惊喜感:在用户从来没有看过的类目里去召回跟他兴趣 embedding 比较像的拍品。

5. 用户潜在偏好类目 K 近邻挖掘

在上一步的工作后,用户和拍品已经在同一个向量空间了,我们对每个类目下的拍品分别进行聚类,找到 N 个簇心。对于每个类目都计算出簇心之后,我们可以利用用户的向量去计算跟簇心之间的 K 近邻,而 K 个簇心所代表的 N 个类目就表示跟用户需求兴趣最接近的 N 个类目,排除了用户有行为的类目之后,剩下的类目我们把它表达为用户的潜在偏好类目,比如,我们通过下面这个例子从用户过去的茶器行为发现他比较偏好日本元素,多兴趣向量可以在他从没有看过的文房器和香炉等类目里召回他所感兴趣的日本元素相关的拍品。

图片

6. 如何在 faiss 中带类目约束地召回最近邻

图片

接下来我们要做的是怎么从 N 个类目里各自召回跟用户向量最接近的 M 个最相似的拍品。因为所有拍品都在一个 faiss 索引里面,怎么带约束地召回最近邻?显然用先召回再做类目筛选过滤方法不可行,因为召回之后再过滤并不一定能得到所需要的类目。

所以我们先对拍品和用户的向量标准化,变成了模长为 1 的单位向量,这样向量之间的余弦距离就等价于欧氏距离,然后我们对所需要召回的那个类目,在某个维度的元素值上加上一个远大于 1 的值,不同类目的拍品在不同的维度上加。如上图示意:左边的部分国画和核桃原本是非常接近的,对核桃在 y 上加上一个比较大的值,对国画在 x 上加上一个比较大的值,就把国画和核桃在空间上平移开了,并且能够保证核桃内部的两两之间的距离最大值会远远小于核桃和国画之间的距离最小值,对于用户兴趣向量,如果要召回确定的类目,就在跟这个类目相同的维度上加上相同的值,这样基于欧氏距离召回的 K 近邻就一定属于这个类目。

图片

通过这种方式,我们只需要建一份 item 的 embedding 索引就能够带约束条件地去召回所有类目下的最近邻。这种潜在的兴趣向量召回方式,对比通过类目之间协同过滤方式的推荐效果,发现在单路点击上有 20% 的提升,可以很好的解决用户的召回多样性问题,并且保证比协同过滤方法得到更好的效果。

06 总结及未来展望

文玩拍卖行业是最近几年新兴的电商细分市场,结合传统文化的商品本身带有的特点以及竞拍的交易模式对比综合性电商,在个性化推荐算法的建模和应用上会有独特的业务问题。而这些业务问题的解法的探索过程,也是非常有意思的一件事情,通过我们最近半年来在推荐召回侧的不同方向上的的探索和尝试,用数学的解法解构不同的业务问题,最终转化为驱动业务增长的生产力。

展望未来,我们期望能够更加深入地理解文玩市场及商业模式,理解用户竞拍机制下的消费心智,通过 AI 找到提升用户体验,提升网站 UV 价值的更加 fancy 的打开方式。比如说:我们后续会构建文玩知识图谱,基于图谱构建 graph 模型来更好地表征拍品的核心价值;我们会结合强化学习以及结合用户的竞拍心智去更好地挖掘用户的潜在需求;我们会结合图像美学模型构建多模态的 CTR 模型,在不同方向上做不同的尝试。

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


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

更多内容请访问:IT源点

相关文章推荐

全部评论: 0

    我有话说: