搜索召回作为搜索系统的基础,决定了效果提升的上限。如何在现有的海量召回结果中继续带来差异化的增量价值,是我们面临的主要挑战。多模态预训练与召回相结合,为我们开辟了新的视野,带来了在线效果的显着提升。前言多模态预训练是学术界和工业界研究的重点。通过在大规模数据上进行预训练,可以获得不同模态之间的语义对应关系,可用于视觉问答、视觉推理、图谱等各种下游任务,提高文本检索的性能。组内也有一些关于多模态预训练的研究和应用。在淘宝主搜场景中,用户输入的query和待召回的商品之间存在天然的跨模态搜索需求。但是,以往产品更多的是使用标题和统计特征,忽略了图片等更直观的信息。但对于一些带有视觉元素的查询(比如白色连衣裙、碎花连衣裙),相信大家首先会被搜索结果页面上的图片所吸引。在淘宝主搜索场景中,一方面,图片占据了更显眼的位置,另一方面,图片中可能包含标题没有的信息,比如白色、花卉等视觉元素。对于后者,需要区分两种情况:一种是标题中有信息,但由于显示限制无法完整显示,这种情况不影响系统链接召回商品;另一种是标题中没有信息但图像有,即图像可以带来相对于文本的增加。后者是我们需要关注的。?技术问题及解决方案多模态技术在主要搜索和召回场景的应用,主要需要解决两个问题:多模态图文预训练模型一般结合图像和文本模态,主要搜索有Query存在,在原有产品图片和标题的图文模式基础上,需要考虑增加一种文字模式。同时,查询和产品标题之间存在语义鸿沟。query比较短和宽泛,而producttitle往往又长又满是关键词,因为卖家会做SEO。通常,预训练任务与下游任务的关系是,预训练使用大量未标记数据,下游使用少量标记数据。但对于主搜索recall,下游vectorrecall任务规模巨大,数据量级在亿级。但受限于有限的GPU资源,只能使用相对少量的数据进行预训练。在这种情况下,预训练是否也能给下游任务带来好处。我们的解决方案如下:Text-graphic预训练:将query和productitem分别通过Encoder,作为双塔输入到跨模态Encoder。如果您查看Query和Item塔,它们在后期交互,这类似于双流模型。但是具体看Itemtower,前期image和title两种模式交互,这部分是单流模式。因此,我们的模型结构不同于常见的单流或双流结构。本次设计的出发点是更有效地提取查询向量和项目向量,为下游双塔向量召回模型提供输入,并在预训练阶段引入双塔内积的建模方法。为了建模Query和title之间的语义联系和差距,我们共享Query和Item双塔的Encoder,然后分别学习语言模型。预训练与召回任务联动:针对下游向量召回任务的样本构建方法和Loss,设计了预训练阶段的任务和建模方法。不同于常见的图文匹配任务,我们使用Query-Item和Query-Image匹配任务,将Query下点击次数最多的Item作为正样本,将batch中的其他样本作为负样本,增加使用Query和Item双塔由内积建模的多分类任务。本次设计的出发点是让预训练更贴近向量召回任务,在有限资源下尽可能为下游任务提供有效输入。此外,对于向量召回任务,如果在训练过程中预训练输入向量是固定的,则无法针对大规模数据进行有效调整。因此,我们还在向量召回任务中对预训练向量进行了建模。训练向量的更新。预训练模型?建模方法多模态预训练模型需要从图像中提取特征,然后将其与文本特征融合。从图像中提取特征主要有三种方式:使用在CV领域训练的模型来提取图像的RoI特征、Grid特征和Patch特征。从模型结构上看,根据图像特征与文本特征的融合方式不同,主要有两种:单流模型或双流模型。在单流模型中,图像特征和文本特征被拼接在一起输入到早期的Encoder,而在双流模型中,图像特征和文本特征被输入到两个独立的Encoder,并且然后输入到跨模态编码器进行进一步处理。融合。?初步探索我们提取图像特征的方式是:将图像划分为Patch序列,使用ResNet提取每个Patch的图像特征。在模型结构上,尝试了单流结构,即将Query、title、image拼接在一起输入到Encoder。经过几组实验,我们发现在这种结构下,很难提取纯Query向量和Item向量作为下游双塔向量召回任务的输入。如果Mask在提取某个向量时去掉了不必要的模式,就会使得预测与训练不一致。这个问题类似于直接提取交互模型中的双塔模型。根据我们的经验,这个模型的效果不如训练好的双塔模型。基于此,我们提出了一种新的模型结构。?模型结构类似于双流结构。模型的下半部分由两个塔组成,上半部分通过跨模态编码器与两个塔融合。与双流结构不同的是,两座塔楼并非由单一模态组成。Item塔包含Title和Image图形和文本双重模式。Title和Image拼接在一起输入到Encoder。这部分类似于单流模型。为了建模Query和Title之间的语义联系和差距,我们共享Query和Item双塔的Encoder,然后分别学习语言模型。对于预训练,设计合适的任务也很关键。我们尝试了Title和Image这个常用的图文匹配任务。虽然可以达到比较高的匹配度,但是对下游的向量召回任务带来的增益不大。这是因为在使用Query召回Item时,Item的Title和Image是否匹配并不是关键因素。所以我们在设计任务的时候,更多的考虑Query和Item的关系。目前一共使用了5个预训练任务。?预训练任务MaskedLanguageModeling(MLM):在文本Token中,随机Mask下降15%,剩下的文本和图像用于预测masked文本Token。对于查询和标题,有单独的MLM任务。MLMminimizescross-entropyLoss:itrepresentstheremainingtexttokenMaskedPatchModeling(MPM):在图像的PatchToken中,随机Mask下降25%,剩余图像和文本用于预测masked图像Token.MPMminimizesKLdivergenceLoss:表示剩余图像tokenQueryItemClassification(QIC):一个Query下点击次数最多的Item作为正样本,batch中的其他样本作为负样本。QIC通过线性层将Querytower和Itemtower的[CLS]token降到256维,然后计算相似度得到预测概率,并最小化交叉熵Loss:计算可以在多种ways:表示相似度计算,表示温度超参数,m分别表示比例因子和松弛因子。QueryItemMatching(QIM):一个Query下点击次数最多的Item作为正样本,batch中与当前Query相似度最高的其他item作为负样本。QIM使用cross-modalEncoder的[CLS]token计算预测概率,最小化cross-entropyLoss:QueryImageMatching(QIM2):QIM样本中,Mask去除Title,加强Query和Image的匹配.QIM2minimizescross-entropyLoss:模型的训练目标是最小化整体Loss:在五个预训练任务中,MLM任务和MPM任务位于Item塔之上。一些模拟Title或Image的Token被屏蔽后,能够使用跨模态信息相互恢复。查询塔上方有一个独立的传销任务。通过共享Querytower和Itemtower的Encoder,对Query和Title之间的语义联系和差距进行建模。QIC任务使用双塔内积法在一定程度上对齐预训练和下游向量召回任务,并使用AM-Softmax拉近query的表示与点击次数最多的item的表示之间的距离在查询下,并推动查询与点击次数最多的项目之间的距离。其他项目的距离。QIM任务位于cross-modalEncoder之上,利用跨模态信息对Query和Item的匹配进行建模。考虑到计算量,通常NSP任务的正负样本比例为1:1。为了进一步拉大正负样本之间的距离,根据QIC任务的相似度计算结果构建困难的负样本。QIM2任务位于与QIM任务相同的位置,明确地建模图像相对于文本带来的增量信息。向量召回模型?建模方法在大规模信息检索系统中,召回模型处于底层,需要在大量的候选集中进行打分。出于性能考虑,通常使用用户和项目双塔来计算向量的内积。向量召回模型的一个核心问题是:如何构造正负样本以及负样本采样的规模。我们的解决方案是:将用户在某个页面点击的item作为正样本,根据点击分布在全商品池中抽取数万个负样本,使用SampledSoftmaxLoss来推导item的全值来自抽样样本的产品池。中的点击概率。其中,表示相似度计算,表示温度超参数?初步探索遵循常见的FineTune范式。我们尝试将预训练好的向量直接输入双塔MLP,结合大规模负采样和SampledSoftmax训练多模态向量召回模型。然而,与通常的小规模下游任务相反,向量召回任务的训练样本量巨大,在数十亿量级。我们观察到MLP的参数量无法支撑模型的训练,很快就会达到自己的收敛状态,但效果并不好。同时,预训练向量在向量召回模型中作为输入而不是参数,不能随着训练的进行而更新。这样,相对小规模数据的预训练与大规模数据的下游任务发生冲突。有几种解决方案。一种方法是将预训练模型集成到向量召回模型中。但是预训练模型的参数太大,向量召回模型的样本量在有限的资源约束下无法使用。合理安排训练时间。另一种方法是在向量??召回模型中构造一个参数矩阵,将预训练向量加载到矩阵中,随着训练的进行更新矩阵的参数。经考察,该方法在工程实施中成本较高。基于此,我们提出了一种简单可行的模型结构,用于对预训练向量的更新进行建模。?模型结构我们首先通过FC对预训练向量进行降维。之所以在预训练中不降维,是因为目前的高维向量对于负样本采样来说还是在可接受的性能范围内。在这种情况下,向量召回任务中的降维更符合训练目标。同时,我们引入了Query和Item的IDEmbedding矩阵。Embedding维数与缩减后的预训练向量维数一致,然后将ID和预训练向量融合在一起。这种设计的出发点是引入足以支持大规模训练数据的参数,同时使预训练向量随着训练的进行自适应更新。在只使用ID和预训练向量融合的情况下,模型的效果不仅超过了只使用预训练向量的双塔MLP的效果,也超过了包含更多特征的Baseline模型MGDSPR。更进一步,在此基础上引入更多的特征,可以不断提升效果。实验分析?评价指标对预训练模型的影响,通常用下游任务的指标来评价,很少用单独的评价指标来评价。但是这样一来,预训练模型的迭代成本会比较高,因为一个版本的模型每次迭代都需要训练对应的vectorrecall任务,然后评估vectorrecall任务的指标,整个过程会很长。是否有任何有效的指标可以独立评估预训练模型?我们首先在一些论文中尝试了Rank@K。该指标主要用于评价图文匹配任务:首先使用预训练模型对人工构建的候选集进行打分,然后计算出按照得分排序的TopK结果命中图文的比例匹配正样本。我们直接将Rank@K应用到Query-item匹配任务中,发现结果并不符合预期。一个更好的Rank@K预训练模型可能在下游向量召回模型中取得更差的结果,无法指导预训练模型。迭代训练模型。基于此,我们将预训练模型的评估与向量召回模型的评估统一起来,使用相同的评估指标和过程,可以相对有效地指导预训练模型的迭代。Recall@K:评估数据集由训练集第二天的数据组成。首先聚合不同用户在同一个查询下的点击和交易结果,然后命中模型预测的TopK结果的比例:在模型预测的TopK结果中,需要抽取来自预训练/向量召回模型的Query和Item向量,并使用最近邻搜索获得Query下的TopKItems。通过这个过程模拟在线引擎中的vectorrecall,保持离线和在线的一致性。对于预训练模型,该指标与Rank@K的区别在于,Query和Item向量是从模型中提取出来进行向量内积检索,而不是直接与模态融合后的模型打分;另外,在一个Query下,不仅要召回匹配的Items,还需要召回这个Query下不同用户的点击和交易Item。对于vectorrecall模型,在Recall@K提升到一定程度后,还需要注意Query和Item的相关性。关联性差的模型,即使可以提高搜索效率,也会面临用户体验差,BadCases增加导致的投诉和舆论增加。我们使用与在线关联模型一致的离线模型来评估Query和Item之间以及Query和Item类别之间的关联。?预训练实验我们选择了一些类别下的1亿个商品池来构建预训练数据集。我们的Baseline模型是经过优化的FashionBert,它添加了QIM和QIM2任务,并且在提取Query和Item向量时仅对非填充标记使用MeanPooling。下面的实验探讨了用两塔建模相比单塔建模带来的收益,通过消融实验给出了关键部位的作用。从这些实验中,我们可以得出以下结论:实验8vs实验3:调整后,双塔模型在Recall@1000上明显高于单塔基线。实验3vs实验1/2:对于单塔模型,如何提取Query和Item向量很重要。我们尝试对Query和Item使用[CLS]令牌,但结果很差。实验一中使用相应的Token分别对Query和Item做MeanPooling效果较好,但进一步去掉PaddingToken再做MeanPooling会带来更大的提升。实验2验证了显式建模Query-Imagematching对突出图像信息的作用,会带来改进。实验6vs实验4/5:实验4将Itemtower的MLM/MPM任务移到cross-modalEncoder上,效果会更差,因为将这两个任务放在Itemtower上可以增强Itemrepresentation的学习;另外,基于Itemtower中的Title和Image的Cross-modalrecovery会有更强的对应关系。实验5验证了在训练和预测期间将L2范数添加到Query和Item向量会带来改进。实验6/7/8:改变QIC任务的Loss会带来改进。与Sigmoid相比,Softmax更贴近下游向量召回任务,AM-Softmax进一步拉近了正样本和负样本之间的距离。?Vectorrecall实验我们选取了10亿个有点击的页面,构建了一个vectorrecall数据集。每个页面包含3个点击项作为正样本,根据点击分布从产品池中抽取10000个负样本。在此基础上,进一步扩大训练数据量或负样本采样量,均未观察到效果有明显提升。我们的Baseline模型是主搜索的MGDSPR模型。下面的实验探索多模态预训练和向量召回的结合,相对于Baseline带来的增益,通过消融实验给出关键部分的作用。从这些实验中,我们可以得出以下结论:Experiment7/8vsExperiment6:通过FC融合多模态特征和ID后,三项指标均超过了Baseline。在提高Recall@1000的同时,商品相关性进一步提高。在此基础上加入与Baseline相同的特征可以进一步提升3个指标,在Recall@1000上提升更多。实验1vs实验2:只比多模态特征比只比ID时Recall@1000更低,但相关性更高,相关性接近线上可用的程度。说明此时的多模态召回模型从召回结果看BadCases较少,但对点击和交易的效率考虑不够。Experiment3/4/5vsExperiment1/2:multimodalfeatures和ID融合后,可以带来三个指标的提升,其中ID在multimodalfeatures经过FC降维后加入,效果更好。不过与Baseline相比,Recall@1000还是有差距的。实验7vs实验5:叠加预训练模型优化后,Recall@1000和商品相关性都有所提升,类别相关性基本一致。从向量召回模型的Top1000结果中,我们过滤掉了在线系统已经可以召回的项目,发现其余增量结果的相关性基本保持不变。在大量查询下,我们看到这些增量结果捕获了商品标题之外的图像信息,对查询和标题之间的语义鸿沟起到了一定的作用。查询:帅气西装查询:女式小腰上衣总结与展望针对主要搜索场景的应用需求,我们提出了文本-图像预训练模型,采用Query和Item双塔输入cross-modalEncoder结构,其中,Item塔为单流模型,包含图文多种模式。通过Query-Item和Query-Image匹配任务,以及Query和Item双塔内积建模的Query-Item多分类任务,使预训练更接近下游向量召回任务。同时,预训练向量的更新在向量召回中建模。在资源有限的情况下,使用相对少量的数据进行预训练仍然可以提高下游任务使用海量数据的效果。在主搜索的其他场景,如产品理解、相关性、排名等,也需要应用多模态技术。我们也参与了这些场景的探索,相信未来多模态技术会惠及越来越多的场景。团队介绍淘宝主搜召回团队:该团队负责主搜链接中的召回和粗排序环节。目前的主要技术方向有基于全空间样本的多目标个性化向量召回和基于大规模预训练的多模态召回、基于对比学习和粗排序模型的相似查询语义重写等。
