閑魚搜索召回升級:向量召回&個性化召回
2022-11-28|09:05|發(fā)布在分類 / 開店入駐| 閱讀:161
2022-11-28|09:05|發(fā)布在分類 / 開店入駐| 閱讀:161
在搜索系統(tǒng)中,召回環(huán)節(jié)位于排序漏斗的最底層,決定了下游排序的空間大小,其重要程度毋庸置疑,在閑魚搜索場景亦是如此。然而由于機器和人力資源的限制,長期以來閑魚搜索的召回都是使用最簡單的基于文本的召回方式,其優(yōu)化迭代方式也只是在基礎商品字段(標題、描述)之上,增加擴展字段?;诖耍径葍?yōu)化前,閑魚主搜的召回整體方案如下:
雖然通過如上擴充索引字段的方式,有效提升了搜索的召回能力。但數(shù)據(jù)分析發(fā)現(xiàn),召回不足的情況仍有較大的搜索PV占比,說明召回側還有比較大的空間可挖(具體數(shù)據(jù)這里不做詳細羅列)。而優(yōu)化召回不足大體可以從兩個方向發(fā)力:1)算法策略層面進行優(yōu)化,提升召回能力;2)供給層面優(yōu)化,引導增加商品供給,或使賣家優(yōu)化商品供給描述。這里則討論前者,首先是當前系統(tǒng)主要有以下不足之處:
對于1,本季度我們增加基于語義的向量召回,緩解召回語義能力不足的問題;對于2則有很多思路,如考慮成交效率的向量召回、u2i、u2i2i等,這里做了一些嘗試,發(fā)現(xiàn)有時常規(guī)的方案無法直接照搬到閑魚場景,而最終本次優(yōu)化我們優(yōu)先采用了基于行為的I2I(準確說是Q2I2I),同時為了彌補長尾query召回仍然不足的問題,我們補充了基于多模態(tài)內容的I2I,從文本和視覺維度召回相關商品。
對于上述擴召回的候選,我們使用類目、核心詞、語義相關性等維度保證相關性,召回升級后整體模塊構成如下:
后面的章節(jié),將依次分模塊進行詳細方案的介紹。
搜索向量召回的最理想結果是盡可能檢索出“相關且高成交效率”的商品。由于閑魚搜索之前沒有向量召回鏈路,因此一期我們決定先從“相關性”目標出發(fā),設計基于純語義的向量召回,目的是彌補文本召回語義泛化能力弱的問題。其難點主要為閑魚場景特色下Query和商品的語義表征建模,以及線上機制策略的兼容;而對于“成交效率”目標的兼顧,本季度也做了相應的實驗,但是由于閑魚場景的特殊性,暫時無法直接照搬常規(guī)方法,需要進一步探索,這點在本章結尾進行討論。
閑魚搜索的語義向量模型同大多數(shù)的場景一樣,使用DSSM架構,Baseline Encoder為預訓練的Electra-Small模型(相對于Bert-base效果微跌,但模型大小由300M+縮小到47M,提升了運行效率)。為了豐富Query語義,彌補Query表達不充分的問題,我們增加了臨近Query表征(基于行為的Q2Q),與集團ICBU、淘寶主搜通過多任務方式引入不同,這里直接增加Query和臨近Query的self-attention模塊,通過更為直接的融入信息,避免了多任務調餐的工作量及其不確定性。
對于無臨近Query的Key Query,進行置空操作,此外對于有臨近Query的Sample也會以一定幾率置空,以適應新Query與超長尾Query缺少Q2Q的問題。
模型架構如下:
搜索語義召回向量的核心目標為相關性,因此其樣本構造也是圍繞此設計,這里方案參考閑魚搜索相關性——體驗與效率平衡的背后:
Graph Query Attention
Query Graph即上文提到的行為Q2Q,這里參考Swing I2I算法,構造Swing Q2Q結果。詳細地。取Top 3 Query拼接后作為Key Query的補充信息,而后Key Query與Graph Querys通過[SEP]拼接作為模型Query塔的輸入。為了使模型能夠區(qū)分Key Query和Graph Querys的差異,不同的Query類型使用不同的Segment_id作為標識。對于Item-Title塔,其Segment_id與Key Query一致。
直接拼接的方式融合Graph Query信息可以從模型底層就與key Query進行相互的Attention交互,以Query-Title的匹配為目標優(yōu)化可以更直接的引入臨近Query的有用信息,缺點則是一定程度上損失了模型預測階段對于無Graph Query的樣本精度。這點則是通過隨機丟棄Graph Query的方式緩解,實驗證明該方法行之有效。
早些時候,語義向量召回的優(yōu)化目標loss為經典的Triple loss:
其中 d(a,p)表示向量a和p的距離,a和p表示query和doc的正樣本對,a和n表示負樣本對。Triple loss訓練的另一個標配是Online hard negative mining,即在mini-batch內,每個正樣本對之間互為負樣本,選擇其中最難的樣本作為負樣本(相似度打分最高的樣本對)。
除了經典的Triple loss外,我們也借鑒了對比學習框架(如MOCO、SimCLR等)下常用的InfoNCE Loss,:,這里增加溫度參數(shù),進一步提升模型的泛化能力。
其中q為query向量,k+為商品正樣本對,k-為負樣本對,τ為temperature超參數(shù)。InfoNCE在自監(jiān)督對比學習中十分有效,同樣在有監(jiān)督的對比學習框架下,也被驗證效果。上式從代碼實現(xiàn)來看更加直觀,也比較巧妙:
該部分策略出發(fā)點,閑魚搜索場景中很多標題也存在信息量不足的情況,如“便宜賣”,容易使模型學偏,這里使用商品歷史有點擊的Top3 Query作為商品的補充信息,與Query Graph一樣的方式融合進網絡(使用不同的Segment_id),但實驗發(fā)現(xiàn)效果不盡如人意,原因分析可能是閑魚商品在預測過程中,有不小占比的商品集合為新品,該部分商品往往補充信息不足。商品側引入其高點擊Query,根據(jù)模型《Shortcut Learning in Deep Neural Networks》的論述,這里模型容易走捷徑,過分關注補充的Query信息,對于缺失補充特征的商品預測效果有偏。因此在離線HitRate指標表現(xiàn)不好,在線也存在類似分布不一致的問題。而換個思路補充相似商品信息,也會存在類似問題,因此該路徑未繼續(xù)深挖。
0.780
51.0、73.3、80.7query+難樣本構造+dim=64
0.805
52.6、 76.8、 84.4query+graph query+dim=640.79050.5、 76.3、 84.4query+graph query+難樣本構造+dim=640.80455.2、 79.6、 86.6query+graph query+難樣本構造+infonce loss+batch size=640.82261.2、 83.9、 89.6aph query+難樣本構造+infonce loss+batchsize=1280.82462.6、 84.7、90.1
得益于強大的Ha3引擎,使得向量引擎的搭建變得容易了許多。在構建向量索引和使用向量引擎對外提供服務的過程中,需要注意以下的問題:
為了能夠同時滿足如上的需求,我們設計了如下的向量召回索引流程:
引擎查詢階段,得益于Ha3引擎的強大功能,通過scorer插件、function插件等對召回結果過濾、統(tǒng)計和排序
在閑魚搜索業(yè)務中,存在多個索引引擎,主要包括倒排引擎,即主引擎和優(yōu)品引擎,在增加了向量引擎以及I2I引擎后,如何以最小的代價對鏈路改造多鏈路召回使其滿足整體RT的要求,我們設計了如下的多路召回流程:
在實現(xiàn)的過程中,采用的是如上的并發(fā)多路召回的方式,目前索引引擎的種類分為兩種,分別為Ha3引擎和KV引擎引擎。當前對于每一路引擎都是獨立的召回,通過設置不同的召回量控制每一路引擎的召回結果。
在上述基礎的語義向量召回基礎上,本季度我們也做了一些其他的嘗試,下面主要簡單描述嘗試的方案,以及階段性的結論分析:
向量召回的理想目標是檢索出“相關且高成交效率”的商品,而基于語義的向量召回更多的是考慮“相關”目標,“高成交效率”的目標則是在粗排/精排階段實現(xiàn)。如果能在召回階段就考慮成交效率,一步到位,應該是更加理想的狀態(tài)。
因此,我們也嘗試了主流的個性化向量的建模方案:
如上的改造期望使向量模型學習到個性化特征,但結果是模型失去了“相關性”的度量能力(原因也容易想到,在正負樣本的構造過程中,“曝光未點擊”的負樣本極大的可能是“相關”樣本),其實上述方案被叫做“雙塔粗排模型”更加貼切。
基于這個結論有兩條優(yōu)化路徑:
上述語義向量召回方案,并未考慮多模態(tài)信息,集團也有很多工作,這里也嘗試了類似方案,使用多模態(tài)bert強化item側的特征,事實上離線指標也能得到一定程度提升,但相對地,其鏈路的也變得更重,對資源的消耗也急劇增加。綜合考慮下,當前線上主要還是使用文本模態(tài)。該方向仍需繼續(xù)探索,以兼顧鏈路的時效性以及資源的ROI。
閑魚搜索滿意度和badcase率是一個比較嚴格的監(jiān)測指標,而擴大召回勢必會增加badcase透出風險,依賴語義的向量召回更是如此,由于沒有嚴格的Term命中限制,不可避免地對一些query存在語義漂移現(xiàn)象,對于少見的長尾query更甚。
事實即是如此,在實踐過程中,僅使用語義向量召回,雖然成交效率可以取得可觀的提升,但badcase率也相應的急劇提升,這里我們的解決方案也相對常規(guī):
如此經過一系列的調餐,達到了搜索滿意度和badcase率指標的可接受程度的微跌,但卻損失2個點左右的人均買賣家效率指標(相對不做滿意度優(yōu)化)。這個方向上,仍然有一部分優(yōu)化空間,如更柔型的相關性控制(當前版本核心term匹配這里限制的比較嚴格),更準確的語義向量表達等。相應的后續(xù)會從向量表征和機制策略兩方面進行優(yōu)化。
當前召回個性化能力不足,對于不同用戶的相同query,召回相同的候選,召回截斷后可能損失更具個性化的相關商品。
分析發(fā)現(xiàn),用戶通過搜索到詳情頁猜你喜歡,通過猜你喜歡場景成交的商品占比可觀,通過case分析發(fā)現(xiàn),該部分diff商品,靠常規(guī)的文本召回方法難以成功檢索到。一個參考統(tǒng)計數(shù)據(jù),搜索導流到猜你喜歡的點擊PV里 ,僅有約25%在當前query的召回集合中,也就是說有75%沒有被召回。如一個例子:搜索引擎中檢索“迪卡儂優(yōu)惠券”,返回結果量不足,而點擊相關商品進入詳情頁猜你喜歡卻可以關聯(lián)處滿足需求的商品。
因此考慮直接通過I2I方法召回檢索池中的商品也會有一定的搜索效率提升空間。
而在搜索場景下I2I實際上需要轉化為Q2I2I,因此該部分實驗可以分為兩個階段:
通過以上兩個階段可以組合出Q2I2I的候選方案,最終通過AB test擇優(yōu)選擇。使用上述方案,最優(yōu)核心七日人均買賣家提升可以達到+4%的人均買賣家提升,人均成單相應漲幅有+5%。但相應的也伴隨著嚴重的相關性指標下跌的情況。如比較典型的,對于優(yōu)惠券/會員充之類的query,個性化召回往往會出現(xiàn)比較明顯的發(fā)散性召回:
對此,我們將相關性的優(yōu)化也分成了兩個階段,Query2trigger item的相關性,保證trigger item和query的相關性;I2I后,通過query與候選item的類目、核心詞以及語義匹配分過濾相關性。在維持相關性波動不大的情況下,最終實現(xiàn)七日+1.8%人均買賣家,人均成單+2.65%??梢钥吹絿栏竦南嚓P性限制,也縮小了成交效率的空間,也是后續(xù)的優(yōu)化方向,如使用更加soft的相關性限制。
經過本季度搜索召回優(yōu)化,核心指標上有了明顯的提升,推全時人均買賣家:近3日人均買賣家相對提升+4.66%;近7日人均買賣家相對提升+3.31%,人均成單:近3日人均成單+5.3%;近7日人均成單+4.02%;
其中,階段性的參考切割實驗對比:
PS:參考主引擎等數(shù)量擴召回,七日人均買賣家+2.3%(未扣除相關性折損,即成交效率收益,損失相關性指標較嚴重。)相比之下,排除精排候選增多引入的不公平對比,擴召回優(yōu)化的收益仍然可觀。
閑魚搜索場景相對常規(guī)的電商場景有不小的差異,如商品上下架頻繁、整體庫存不足,各類型商品庫存分布差異大、用戶query發(fā)散、商品類型發(fā)散等,賣家側也是盤踞著各種類型的用戶,自由閑置賣家、小專業(yè)賣家、黃牛賣家、“投機倒把”的中間商等,因此在算法策略優(yōu)化中需要考慮的細節(jié)較多,召回優(yōu)化過程中也是如此。
而對于后續(xù)優(yōu)化方向上,在上面的討論中其實也比較明確,總結一點即是召回效率與搜索體感指標的trade off,如何在保證相關的前提下盡可能召回高成交效率的商品,將是一個長期探索的方向。
參考資源
1、閑魚搜索相關性——體驗與效率平衡的背后
2、Vaswani, A., Shazeer, N., Parmar, N., Uszkoreit, J., Jones, L., Gomez, A.N., Kaiser, L., Polosukhin, I.: Attention is all you need. In: NeurIPS (2017)
3、Mobius: Towards the next generation of query-ad matching in Baidu's sponsored search
4、Shortcut Learning in Deep Neural Networks
這個問題還有疑問的話,可以加幕.思.城火星老師免費咨詢,微.信號是為: msc496。
推薦閱讀:
淘寶賣家發(fā)布商品沒有品牌怎么辦?淘寶商品發(fā)布有哪些規(guī)范?
更多資訊請關注幕 思 城。
微信掃碼回復「666」
別默默看了 登錄\ 注冊 一起參與討論!