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