首页 > 其他分享 >Facebook的多任务多模态向量召回模型Que2Search

Facebook的多任务多模态向量召回模型Que2Search

时间:2023-06-15 11:05:18浏览次数:48  
标签:模型 样本 item Facebook query Que2Search 多任务 向量


1. 概述

对于一个搜索系统来说,通常采用的召回都是基于倒排索引的召回,简单来说就是需要对item侧建立倒排索引,在检索的过程中,对query分词,根据分词结果去倒排索引中查找词匹配的item,简单的流程如下图所示:

Facebook的多任务多模态向量召回模型Que2Search_深度学习

在传统的检索过程中,通常存在语义上的问题,比如Query为“连衣裙”,此时根据词匹配就检索不到核心词为“长裙”的item,为了解决这样的问题,需要对Query进行扩展,将其扩展成相似的query,以此来实现语义匹配的问题。当然,词匹配的方式的一大优势就是相关性解决的比较好。为了能从算法上解决语义的gap,双塔的召回结构是现如今较多采用的一种方法。

双塔的召回有如下的一些优势:

  • item侧可离线计算,线上可采用基于ANN的向量匹配方式较快的查找到向量空间与Query相匹配的item
  • 基于模型的方法,可以融入更多的特征

双塔模型的第二点优势就可以方便的对模型的特征进行扩充,尤其现如今对多模态的研究,Que2Search[1]中就是提出使用多模态的方法来训练双塔模型,同时,在Que2Search的item塔中引入了分类的任务,与上面的双塔任务共同构成了多任务的训练方式。

2. Que2Search模型

2.1. Que2Search的模型结构

Que2Search的模型结构如下图所示:

Facebook的多任务多模态向量召回模型Que2Search_模态_02

左侧是一个Query侧的塔,右侧是item侧的塔。

2.2. Query塔

Query塔侧的模型的输入特征有三部分,分别为:

  • Query文本的tri-gram。通过size=3的滑动窗口,得到tri-gram,过hash函数(如MurmurHash)后得到对应的ids,再经过Embedding后得到每个id的向量表示,最终对所有向量做sum-pooling;
  • 用户所在国家。该特征是单分类的特征,也是经过Embedding后表示成向量;
  • Query原始文本。经过一个两层的XLM模型编码,取[CLS]对应的向量作为query的语义表示;

注:XLM模型就是一个基于Transformer的语言模型,类似于BERT。

至此,我们得到了3个向量,如何将这3个向量fuse成一个向量,文中也提出了两种方式,分别为concat和attention。实验结果显示attention的结果要优于concat,假设Facebook的多任务多模态向量召回模型Que2Search_倒排索引_03表示Facebook的多任务多模态向量召回模型Que2Search_模态_04个不同来源的向量,将这Facebook的多任务多模态向量召回模型Que2Search_模态_04个向量concat在一起,得到Facebook的多任务多模态向量召回模型Que2Search_倒排索引_06

Facebook的多任务多模态向量召回模型Que2Search_模态_07

计算attention的权重Facebook的多任务多模态向量召回模型Que2Search_倒排索引_08

Facebook的多任务多模态向量召回模型Que2Search_模态_09

其中,Facebook的多任务多模态向量召回模型Que2Search_机器学习_10,最后得到最终的合并向量表示:Facebook的多任务多模态向量召回模型Que2Search_机器学习_11

这里的Facebook的多任务多模态向量召回模型Que2Search_机器学习_12是通过concat多个向量,也有其他的一些方法,如Attention-Based BiLSTM[2]中的计算方法。

2.3. Item塔

Item塔侧的模型的输入特征有五部分,分别为:

  • 商品标题。使用6层XLM-R编码;
  • 商品描述。与商品标题一样,使用6层XLM-R编码;
  • 商品标题的tri-gram。处理方法同query侧的tri-gram;
  • 商品描述的tri-gram。处理方法同query侧的tri-gram;
  • 图像表示:对于每一个商品,都会附带一些图片,通过预训练模型得到图像表示,然后过MLP和Deep set方法对多个图像表示进行融合得到一个向量表示。

多个不同来源的向量通过与上述Query塔一样的Attention的方法得倒最终的向量表示。为了能对item塔的模型更好的学习,因此在这里设置了多标签多类目的分类任务,如上图中的右侧。

2.4. 样本选择

对于双塔模型来说,一般选择点击的样本作为正样本,但是在Que2Search中,选择的正样本需满足以下四个条件:

  • 用户发起一次搜索
  • 点击一个商品
  • 给卖家留言
  • 卖家回复

只有同时满足这四个条件的query和item才能成为正样本。

负样本的选择是双塔召回模型的精髓。对于负样本通常有两种策略:

  • 根据频次从全库中随机采样
  • batch内的随机采样

这是随机样本的部分,通常还会增加一些困难样本,主要有人工的挖掘以及在线的困难样本挖掘。在Que2Search中随机样本是采用的Batch内的负样本,假设batch的大小为Facebook的多任务多模态向量召回模型Que2Search_机器学习_13,经过query塔后,query侧的向量为Facebook的多任务多模态向量召回模型Que2Search_机器学习_14,同理,item侧的向量为Facebook的多任务多模态向量召回模型Que2Search_模态_15,且向量的维度为Facebook的多任务多模态向量召回模型Que2Search_模态_16。计算每一个query与item的cosine相似度矩阵,便得到Facebook的多任务多模态向量召回模型Que2Search_模态_17,这里只有Facebook的多任务多模态向量召回模型Que2Search_模态_18时是正样本,其他的为负样本,如下图所示:

Facebook的多任务多模态向量召回模型Que2Search_模态_19

对于最后的Facebook的多任务多模态向量召回模型Que2Search_倒排索引_20矩阵,只有对角线上的为正样本,选择一行来看,这是一个多分类的问题,类别数为Facebook的多任务多模态向量召回模型Que2Search_机器学习_13。对于该多分类,损失函数为:

Facebook的多任务多模态向量召回模型Que2Search_机器学习_22

其中,Facebook的多任务多模态向量召回模型Que2Search_模态_23为缩放系数,在文章中指出Facebook的多任务多模态向量召回模型Que2Search_模态_23在15和20之间。

缩放系数Facebook的多任务多模态向量召回模型Que2Search_机器学习_25实际上就是温度系数。

在文章中还提出了另一种对称的损失函数,上述的损失函数以query为主导,另外一部分以item为主导,基于此便有了对称的损失函数:

Facebook的多任务多模态向量召回模型Que2Search_倒排索引_26

不过实验表明在实际的线上并没有多大的收益。

除了上述的随机样本,还需要困难样本,在Que2Search中使用的是在线困难负样本挖掘,其方法是选择Batch内除了正样本以外所有负样本中相似度最高的样本作为困难负样本:

Facebook的多任务多模态向量召回模型Que2Search_机器学习_27

这样就构造了正负样本的集合Facebook的多任务多模态向量召回模型Que2Search_倒排索引_28

但是在Que2Search中,使用了两个阶段的训练:

  • 第一阶段只使用随机负样本,通过多分类的交叉熵损失函数;
  • 第二阶段只使用困难负样本,损失函数却是margin rank loss效果更好。

margin rank loss为:

Facebook的多任务多模态向量召回模型Que2Search_机器学习_29

margin的值在0.1和0.2之间最好。

3. 总结

在Que2Search中,主要是加入了更多的文本特征,并利用基于Transformer的方法提取文本语义信息,同时在特征中融入了图像的特征,实现了多模态的模型学习。另一方面,在训练的过程中提出了多任务的学习,有利于对item塔的模型学习。

参考文献

[1] Liu Y, Rangadurai K, He Y, et al. Que2Search: fast and accurate query and document understanding for search at Facebook[C]//Proceedings of the 27th ACM SIGKDD Conference on Knowledge Discovery & Data Mining. 2021: 3376-3384.

[2] Attention-Based BiLSTM


标签:模型,样本,item,Facebook,query,Que2Search,多任务,向量
From: https://blog.51cto.com/u_16161414/6485321

相关文章

  • web3产品介绍:mask将Web3的隐私和优势引入像Facebook和Twitter这样的社交媒体平台
    介绍:MaskNetwork是一个开源的浏览器扩展,将Web3的隐私和优势引入像Facebook和Twitter这样的社交媒体平台。它是一个功能强大的工具,允许用户在社交媒体上享受区块链的隐私保护和其他Web3的好处。让我们一起探索MaskNetwork的主要特点和为用户带来的益处。主要特点:1.隐私保护:Ma......
  • Facebook 最新可佩戴 AR 设备、AR 设备未来五年市场扩张、语音社交新创Swell等|Decode
     DecodetheWeek ≠音视频技术周刊 Credit: MeKyeoungLee /NewsBriefing. Clubhouse 聘请 Instagram前高管 Clubhouse聘请曾任职Instagram的FadiaKader担任新的媒体合作和创作主管。此前,OWN和Netflix的前高层MayaWatson被CH聘请担任其全球营销主管,这表明......
  • Facebook如何将QUIC应用于数十亿流量传输
    随着IETF很快完成QUIC标准定稿,越来越多的企业和开发者投入到QUIC开发实现与部署中。阿里巴巴实现了XQUIC;B站、快手在2019年就公开了QUIC的应用实践;Akamai等CDN服务商则很早就开始拥抱QUIC,并提供相应的支持。本文来自Facebook的工程博客,详细介绍了Facebook是如何将其3/4的流量切换到......
  • CH32--裸机系统实现多任务
    在ram和flash资源足够的芯片中,我们通常通过跑操作系统来实现多任务,但此方法有个弊端,那就是对ram要求高,那么对于比如003这种只有2K ram的小容量芯片可能就不太够用了。这时就需要裸机来实现多任务了,方法如下:在裸机中,通常都是在一个while循环中,通过判断相应的标志位,来按照顺序......
  • Quartz + SpringBoot 实现定时任务(多任务,多执行时间)代码模板(直接CV即可)
    一,什么是Quartzquartz是一款开源且丰富特性的Java任务调度库,用于实现任务调度和定时任务。它支持各种任务类型和灵活的配置选项,具备作业持久化、集群和分布式调度、错误处理和重试机制等功能。Quartz被广泛应用于各种应用程序中,提供可靠和灵活的任务调度解决方案。二,核心概念......
  • Python进阶:利用线程实现多任务
    文章目录Python进阶篇-系列文章全篇一、多任务的介绍二、[重点]线程-基本使用三、[重点]线程-线程名称、总数量四、[重点]线程-参数及顺序五、[重点]线程-守护线程六、并行和并发七、[重、难点]自定义线程类八、[重点]多线程-共享全局变量九、[难点]多线程-共享全局变量-问......
  • 时间管理是一项重要的技能,对于有效地达成目标和提高生产力至关重要。当我们面临许多任
    时间管理是一项重要的技能,对于有效地达成目标和提高生产力至关重要。当我们面临许多任务时,如何有效地处理这些任务,就需要使用优先级排序技术来帮助我们。以下是几种有效的优先级排序技术:Eisenhower矩阵法Eisenhower矩阵法将任务划分为四个象限,分别为:重要且紧急、重要但不紧......
  • facebook console.log bug All In One
    facebookconsole.logbugAllInOneconsole.logURLlinkbugerrors❌console.log(`查看https://www.facebook.com/selfxss详细了解。`)//查看https://www.facebook.com/selfxss详细了解。solutionaddwhitespacesbetweenURLandtext✅在链接与文字之间,添......
  • 单片机的裸机系统和多任务系统总结
    一、裸机系统1.1轮询系统 轮询系统是裸机编程时,先初始化好相关硬件,然后让主程序在一个死循环内不断循环,顺序完成各种事情。伪代码如下所示:1intmain(void)2{3/*硬件相关初始化*/4HardWareInit();56/*无限循环*/7for(;;){8......
  • 异步编排多任务异步执行
    参考: https://blog.csdn.net/teachy/article/details/104971814创建线程池:/***自定义线程池*intcorePoolSize,核心线程数=CPU核数*intmaximumPoolSize,最大线程数=CPU核数*2*longkeepAliveTime,等待时间,线程池线程>核心线程数,没......