搜索召回作为搜索系统的基础,决定了效果提升的上限。如何在现有的海量召回结果中,继续带来有差异化的增量价值,是我们面临的主要挑战。而多模态预训练与召回的结合,为我们打开了新的视野,带来线上效果的显著提升。
多模态预训练是学术界与工业界研究的重点,通过在大规模数据上进行预训练,得到不同模态之间的语义对应关系,在多种下游任务如视觉问答、视觉推理、图文检索上能够提升效果。 在集团内部,多模态预训练也有一些研究与应用。 在淘宝主搜场景中,用户输入的Query与待召回商品之间存在天然的跨模态检索需求,只是以往对于商品更多地使用标题和统计特征,忽略了图像这样更加直观的信息。 但对于某些有视觉元素的Query(如白色连衣裙、碎花连衣裙),相信大家在搜索结果页都会先被图像所吸引。
淘宝主搜场景
一方面是图像占据着更显著的位置,另一方面则是图像可能包含着标题所没有的信息,如白色、碎花这样的视觉元素。对于后者,需要区分两种情况:一种是标题中有信息、但由于显示限制无法完全展示,这种情况不影响商品在系统链路里的召回;另一种是标题中没有信息但图像中有,也就是图像相对于文本可以带来增量。后者是我们需要重点关注的对象。
在主搜召回场景中应用多模态技术,有两个主要问题需要解决:
我们的解决思路如下:
多模態預訓練模型需要從影像中擷取特徵,再與文字特徵融合。從影像中擷取特徵的方式主要有三種:使用CV領域訓練好的模型擷取影像的RoI特徵、Grid特徵和Patch特徵。從模型結構來看,根據影像特徵和文字特徵融合方式的不同,主要有兩類:單流模型或雙流模型。在單流模型中,影像特徵與文字特徵在早期就拼接在一起輸入Encoder,而在雙流模型中,影像特徵和文字特徵分別輸入到兩個獨立的Encoder,然後再輸入到跨模態Encoder中進行融合。
我們擷取影像特徵的方式是:將影像分割為Patch序列,使用ResNet擷取每個Patch的影像特徵。在模型結構上,嘗試過單流結構,也就是將Query、標題、影像拼接在一起輸入Encoder。經過多組實驗,我們發現在這個結構下,很難提取出純粹的Query向量和Item向量作為下游雙塔向量召回任務的輸入。如果提取某一向量時,Mask掉不需要的模態,會使得預測與訓練不一致。這個問題類似於,在一個互動型的模型裡直接提取出雙塔模型,根據我們的經驗,這種模型的效果不如經過訓練的雙塔模型。基於此,我們提出了一個新的模型結構。
類似雙流結構,模型下方由雙塔構成,上方透過跨模態Encoder融合雙塔。與雙流結構不同的是,雙塔不是分別由單一模態構成,其中的Item塔中包含了Title和Image圖文雙模態,Title和Image拼接在一起輸入Encoder,這部分類似單流模型。為了建模Query與Title之間存在的語意連結與Gap,我們將Query與Item雙塔的Encoder分享,再分別學習語言模型。
對於預訓練來說,設計合適的任務也是比較關鍵的。我們嘗試過常用的Title和Image的圖文匹配任務,雖然能達到比較高的匹配度,但對於下游向量召回任務帶來的增益很少,這是因為用Query去召回Item時,Item的Title和Image是否符合不是關鍵因素。所以,我們在設計任務時,更考慮了Query與Item之間的關係。目前,共採用5種預訓練任務。
##其中 表示相似度計算, #表示溫度超參數, 和m分別表示縮放因子和鬆弛因子
在這5種預訓練任務中,MLM任務和MPM任務位於Item塔的上方,建模Title或Image的部分Token被Mask後,使用跨模態資訊相互恢復的能力。 Query塔上方有獨立的MLM任務,透過共享Query塔和Item塔的Encoder,建模Query與Title之間的語意連結與Gap。 QIC任務使用雙塔內積的方式,將預訓練和下游向量召回任務做一定程度的對齊,並用AM-Softmax拉近Query的表示與Query下點擊最多Item的表示之間的距離,推開Query與其他Item的距離。 QIM任務位於跨模態Encoder的上方,使用跨模態資訊建模Query和Item的匹配。出於計算量的考慮,採用通常NSP任務的正負樣本比1:1,為了進一步推開正負樣本之間的距離,基於QIC任務的相似度計算結果建構了難負樣本。 QIM2任務與QIM任務位於相同的位置,明確建模影像相對於文字所帶來的增量資訊。
其中 #表示相似度計算, 表示溫度超參數
#遵循常見的FineTune範式,我們嘗試過將預先訓練的向量直接輸入到雙塔MLP,結合大規模負採樣和Sampled Softmax來訓練多模態向量召回模型。不過,與通常的小規模下游任務相反,向量召回任務的訓練樣本量巨大,在數十億量級。我們觀察到MLP的參數量無法支撐模型的訓練,很快就會達到自身的收斂狀態,但效果並不好。同時,預訓練向量在向量召回模型中作為輸入而非參數,無法隨著訓練的進行而更新。這樣一來,在相對小規模資料上進行的預訓練,與大規模資料上的下游任務有一定的衝突。
解決的想法有幾種,一種方法是將預訓練模型整合到向量召回模型中,但預訓練模型的參數量過大,再加上向量召回模型的樣本量,無法在在有限的資源限制下,以合理的時間進行常態化訓練。另一種方法是在向量回想模型中建構參數矩陣,將預訓練向量載入到矩陣中,隨著訓練的進行更新矩陣的參數。經過調查,這種方式在工程實現上成本比較高。基於此,我們提出了簡單可行地建模預訓練向量更新的模型結構。
Recall@K :評測資料集由訓練集的下一天資料構成,先將同一個Query下不同使用者的點選、成交結果聚合成,再計算模型預測的Top K結果 命中 的比例:
在模型預測Top K結果的過程中,需要從預訓練/向量召回模型中提取Query和Item向量,使用近鄰檢索得到一個Query下的Top K個Item。透過這個流程模擬線上引擎中的向量召回,來保持離線與線上的一致性。對於預訓練模型來說,這個指標與Rank@K的差異是:在模型中提取Query和Item向量進行向量內積檢索,而不是直接用模態融合後的模型來評分;另外,一個Query下不僅要召回與之匹配的Item,也要召回這個Query下不同使用者的點擊、成交Item。 ###对于向量召回模型,在Recall@K提高到一定程度后,也需要关注Query和Item之间的相关性。一个相关性差的模型,即使能提高搜索效率,也会面临Bad Case增加导致的用户体验变差和投诉舆情增多。 我们采用与线上相关性模型一致的离线模型,评测Query和Item之间以及Query和Item类目之间的相关性。
我们选取部分类目下1亿量级的商品池,构造了预训练数据集。
我们的Baseline模型是经过优化的FashionBert,加入了QIM和QIM2任务,提取Query和Item向量时采用只对非Padding Token做Mean Pooling的方式。以下实验探索了以双塔方式建模,相对于单塔带来的增益,并通过消融实验给出关键部分的作用。
从这些实验中,我们能得出如下结论:
我们选取10亿量级有点击的页面,构造了向量召回数据集。在每个页面中包含3个点击Item作为正样本,从商品池中根据点击分布采样出1万量级的负样本。在此基础上,进一步扩大训练数据量或负样本采样量,没有观察到效果的明显提升。
我们的Baseline模型是主搜的MGDSPR模型。以下实验探索了将多模态预训练与向量召回结合,相对于Baseline带来的增益,并通过消融实验给出关键部分的作用。
从这些实验中,我们能得出如下结论:
我们在向量召回模型的Top 1000结果中,过滤掉线上系统已经能召回的Item,发现其余增量结果的相关性基本不变。在大量Query下,我们看到这些增量结果捕捉 到了商品Title之外的图像信息,并对Query和Title之间存在的语义Gap起到了一定的作用。
query: 痞帅西装
query: 女掐收腰小衫
針對主搜尋場景的應用需求,我們提出了文字-圖文預訓練模型,採用了Query和Item雙塔輸入跨模態Encoder的結構,其中Item塔是包含圖文多模態的單流模型。透過Query-Item和Query-Image匹配任務,以及Query和Item雙塔內積方式建模的Query-Item多分類任務,使預訓練更接近下游的向量召回任務。同時,在向量召回中建模了預訓練向量的更新。在資源有限的情況下,使用相對少量資料的預訓練,對使用大量資料的下游任務仍然帶來了效果的提升。
在主搜的其他場景中,如商品理解、相關性、排序,也存在著應用多模態技術的需求。我們也參與了這些場景的探索中,相信多模態技術在未來會為越來越多的場景帶來增益。
淘寶主搜召回團隊:團隊負責主搜鏈路中的召回、粗排環節,目前的主要技術方向為基於全空間樣本的多目標個人化向量回想、基於大規模預訓練的多模態回想、基於對比學習的相似Query語義改寫以及粗排模型等。
以上是多模態技術在淘寶主搜召回場景的探索的詳細內容。更多資訊請關注PHP中文網其他相關文章!