当前位置:   article > 正文

升级换代!Facebook全新电商搜索系统Que2Search

que2search

6301925f055c40186a7790aac2531edc.png

大家好,我是kaiyuan。关于前沿技术在工业界的实践落地应用,我们之前分享过一些文章:

今天继续,看看Facebook在KDD'21的工作,从模型到部署介绍了Facebook Marketplace这一电商平台的语义检索系统。

  • Que2Search: Fast and Accurate Query and Document Understanding for Search at Facebook

Que2Search可以认为是Facebook在KDD'20工作Embedding-based Retrieval in Facebook Search的升级版本【Facebook的搜索是怎么做的?】。但是针对『Facebook maketplace』这一特定场景的向量化检索系统,仍然存在以下几点挑战:

  • 商品描述存在噪声:由于商品的属性描述(譬如标题、类别等)是由卖家上传的,会存在较多的拼写错误、属性丢失等;

  • 国际化支持:Facebook Marketplace场景是多国家多语言的,需要模型具备跨语言检索能力;

  • 多模态处理:需要在模型中同时考虑多种模态信息,图片、文本等;

  • 严格的延迟性限制:众所周知线上搜索系统对延迟要求极高,会极大地影响用户体验。尤其是当使用Transformer-based模型时,延迟是一个巨大挑战;

本文接下去会深入细节,一起看看是如何一一解决这些问题的。

1. 模型结构

57546f1e15919c0b25d6e298626ffb09.png

Que2Search模型结构

整体模型架构如上,还是使用普遍的双塔形式。

1.1  Query Tower

query侧的特征输入有三部分:

  • Query文本的tri-gram表示:通过size=3的滑动窗口,得到tri-gram,过hash函数后得到对应的ID,再经过嵌入后得到每个ID的向量表示,然后对所有向量做sum-pooling;

  • 用户所在国家:ID类特征,也是经过嵌入后表示成向量;

  • Query原始文本:过两层的XLM 编码,取[CLS]对应的向量作为query表示;

1.2  Document Tower

类似的,doc侧的特征输入有五部分:

  • 商品标题:文本类型,使用6层XLM-R编码;

  • 商品描述:文本类型,使用6层XLM-R编码(模型和商品标题的共享);

  • 商品标题的3-gram表示:同query侧处理;

  • 商品描述的3-gram表示:同query侧处理;

  • 图像表示:对于每一个商品,都会附带一些图片,通过预训练模型得到图像表示,然后过MLP和Deep set方法对多个图像表示进行融合得到最终这一路特征表示;

1.3  Late Fusion

late-fusion指的是对上述双塔内的多路输入特征如何进行融合,常见的融合方式有

  • concatenation fusion :将所有路表示拼接起来过MLP得到固定维度的向量表示;

  • simple attention fusion :注意力机制不用多说了

作者通过实验发现简单的注意力形式效果更好,

2. 训练阶段

模型整体如上,引入了更多的特征+更精细的融合方式,再来看看训练过程是如何操作的。

2.1  训练数据
  • 正样本来自用户搜索日志,是一对相关的 <query, document> 对;那在论文业务场景中,如何表示相关呢?作者利用下述条件在日志中进行筛选:

    如果上述四个事件在一定时间内(24小时)发生,则认为是相关的,称为『in-conversation』。PS. 在描述这一部分的时候可以明显感受到作者的"求生欲",感受下:

    We do not have access to message contents and only know that users interacted with the sellers.

    • 用户搜索了一个query

    • 用户点击了query下的某个商品

    • 用户给该商品的卖家发消息

    • 该商品卖家回复消息

  • 负样本来自batch内负采样,也是属于应用很广泛的负样本策略,譬如可以参考我们之前分享的:大规模搜索+预训练,百度是如何落地的?。不过这里对负样本的利用,还是有一点点不同,后面会具体介绍。

2b966093dd32d2fee4174a083dbcbfb4.png

batch内负采样
2.2  多阶段训练

模型训练分为两个阶段,

  • 第一阶段:batch内简单负样本训练,即其他record的doc作为当前query的负样本,然后做一个 multi-class cross-entropy。损失函数为:

其中 为温度系数,目的是拉大logits的区分度,使其更sharpen,需要做实验调参确定值。

  • 第二阶段:batch内困难负样本训练,文中称为『课程学习』。使用困难负样本也是比较常见的套路,一般是离线通过各种策略采样得到。不过这里作者还是使用了batch内的数据,具体地,对于每个query   ,选取除对角线外的相似度分数最高的doc作为负样本 ,因为对角线的doc为该query对应的正样本 。于是这样就有了三元组 ,尝试了二分类交叉熵损失和最大间隔损失函数两种方法,发现margin设置为0.1~0.2的margin rank loss表现最好

2.3  多任务学习

除了上述双塔任务之外,作者还在document tower额外引入了一个任务,document classification。具体地,针对每个doc,选取一系列相关的query。总共保留头部45000的query,然后用doc塔产出的向量做多标签分类

7e2e7b67571c032326f6b27b3711a3de.png

document classification
2.4  多模态融合

一般而言,模态指的是不同类型的数据,譬如文本、图像、视频、语音等等,而常见的融合方式就是Attention。在本文中,模态的概念更加宽泛,作者把不同路的输入认为是不同的模态,同时将 Grandient Blending 梯度融合的形式引入双塔结构。

梯度融合来源于 CVPR 2020 论文What Makes Training Multi- Modal Networks Hard ,具体做法如下:

训练M+1个模型,M是模态的数量,其中M个模型分别用单个模态特征作为输入来训练,1个模型用所有模态特征作为输入来训练。先分别计算每个模型的损失,然后加权融合所有模型的损失,每个损失都有提前设定好的权重系数。目的是让模型即使在模态缺失的时候也具备学习能力,更加鲁棒。

针对Que2Search场景下,步骤为:

  1. 单模态特征训练。因为是双塔,需要"控制变量",及一侧的塔每次只使用一路特征,另一侧塔使用全部特征

  1. 全模态特征训练。

  1. 损失加权融合。

注意,梯度融合只在训练阶段使用,预测时使用全部的模态。

3. 实验&效果

3.1  消融实验

主要是看一下,论文新提出的结构或者特征,是否有作用以及提升有多少。

对比Base选取的是KDD'20提出的wide&deep模型,关于base模型具体可以参考全方位解读 | Facebook的搜索是怎么做的?

e52487f8dc30d7e619d37cbe66c94b68.png

in-conversation数据集消融实验

79582816935d40b2625d0e9154f90c52.png

人工标注数据集消融实验
3.2  AB实验

线上AB实验,评价指标是前面提到的『in-conversation』,可以认为是用户的参与度,不用最终的转化率指标有点奇怪。这里还有一点奇怪的是,只使用char tri-gram的模型居然比本文提出的Que2Search效果还好,作者只是一笔带过,没解释原因。

c5085b758b0cbafd67600d160c7b6ffc.png

线上AB实验

4. 系统架构

ad340fe1487c44248724ee5466316f6b.png


需要注意,这里只是Que2Search的部署架构,完整的产品搜索系统会更复杂。Facebook的论文都会很友好的提供一堆实战经验,这里挑几点介绍,具体的可以阅读原论文第6部分。

  • 用户翻页优化:主要是性能和准召之间的平衡,通过「动态ANN参数」实现。具体地,在用户的第一个request,调整ANN参数更关注延迟,之后的翻页request则调整参数使其更关注准召效果。这样做的好处是,可以避免初次触发时由于模型的延迟过高影响用户体验,文中更是说『没有这项优化,Que2Search根本无法上线』。

  • 召回排序联动:Facebook Marketplace平台搜索排序是个两阶段过程,GBDT + 类DLRM 模型。将Que2Search的余弦相似度打分作为一个特征引入到上述两阶段排序模型中,发现对最终的效果有较大提升。

  • 仅使用召回率远远不够。在搜索召回阶段,理论上通过降低ANN检索的阈值,可以提高召回率(至少不会减少应该正确召回的商品),但是线上指标却降低了。分析后发现是由于『召回排序不一致性』导致的,放开阈值召回增加的噪音样本无法在排序阶段非常好地识别。因此需要更精确的指标来表征召回的结果,或者暴力AB实验拍阈值。

  • 仅保证相关性远远不足

5. 总结

惯例性小结,

  • 语义理解模型:引入了多语言XLM预训练模型、多模态的图像信息、基于Attention和基于梯度的特征融合方式、两阶段式的训练方式,相比于之前KDD'20的工作是花里胡哨了些,但都是一些情理之中,不难想到;

  • 工业场景落地:将Transformer-based模型在大规模系统上落地,同时分享了很多踩坑经验;

  • 线上AB实验,Que2Search一顿操作效果不如只使用tri-gram的模型,就有些奇怪。是query长度普遍较短,tri-gram就够了,更多的只会引入噪声?

  • 将召回模型打分作为一个特征丢给排序,也有比较明显的效果,可以尝试;

  • Facebook Marketplace 作为电商场景的搜索,只考虑商品和query的匹配程度可能不够,系统内还有user用户的作用。当然,有可能这不是Que2Search模型考虑的部分,毕竟有多路召回。

3e9c5d1e84ec48d8afff7a94d0314c15.png

一起交流

想和你一起学习进步!『NewBeeNLP』目前已经建立了多个不同方向交流群(机器学习 / 深度学习 / 自然语言处理 / 搜索推荐 / 图网络 / 面试交流 / 等),名额有限,赶紧添加下方微信加入一起讨论交流吧!(注意一定要备注信息才能通过)

9f5d7a82f3ea5dc949751c383523d2c0.png

END -

43d1ac90b1b5176a65766eac49c2595c.png

eface2d280797f6929268a4b13d0e932.png

NLP中的范式迁移

2021-10-18

b64e4feb0b01e496962c0769595c2092.png

聊一聊算法工程师复现算法的踩坑总结

2021-10-17

efd4f9268e975319610fd12a9886a03e.png

搜索、推荐、广告中的曝光偏差问题

2021-10-12

811749cffea0cf325ea437fde3731780.png

Don't stop pretraining,继续预训练!

2021-10-10

ae01b735a7fb5c39dddb962270b285df.png

fb3d96d096e65715ca0e9a5ae706ab75.gif

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/677189
推荐阅读
相关标签
  

闽ICP备14008679号