幕思城>電商行情>抖音小店>開店入駐>閑魚搜索召回升級:向量召回&個性化召回

    閑魚搜索召回升級:向量召回&個性化召回

    2022-11-28|09:05|發(fā)布在分類 / 開店入駐| 閱讀:161

    在搜索系統(tǒng)中,召回環(huán)節(jié)位于排序漏斗的最底層,決定了下游排序的空間大小,其重要程度毋庸置疑,在閑魚搜索場景亦是如此。然而由于機器和人力資源的限制,長期以來閑魚搜索的召回都是使用最簡單的基于文本的召回方式,其優(yōu)化迭代方式也只是在基礎(chǔ)商品字段(標題、描述)之上,增加擴展字段?;诖?,季度優(yōu)化前,閑魚主搜的召回整體方案如下:

    • Query側(cè):通過Query改寫,擴展Query語義,緩解用戶側(cè)搜索詞表達不充分的問題,間接實現(xiàn)擴召回;
    • Item側(cè):通過增加擴展字段,強化商品側(cè)的表征,具體的拓展字段包括:
    • 結(jié)構(gòu)化信息,如類目、算法識別的CPV(屬性值,如商品品牌、型號、顏色等);
    • 商品圖像識別的標簽,如OCR識別出的商品圖片中的描述字段;
    • I2I商品信息遷移:通過swing等I2I技術(shù),引入與trigger商品相似商品的基礎(chǔ)信息作為文本召回字段;
    • 同款、一鍵轉(zhuǎn)賣商品信息遷移,同I2I,只不過擴展信息通過確定的關(guān)聯(lián)商品得到;
    • 其他商品預(yù)測Tag拓展;

    雖然通過如上擴充索引字段的方式,有效提升了搜索的召回能力。但數(shù)據(jù)分析發(fā)現(xiàn),召回不足的情況仍有較大的搜索PV占比,說明召回側(cè)還有比較大的空間可挖(具體數(shù)據(jù)這里不做詳細羅列)。而優(yōu)化召回不足大體可以從兩個方向發(fā)力:1)算法策略層面進行優(yōu)化,提升召回能力;2)供給層面優(yōu)化,引導(dǎo)增加商品供給,或使賣家優(yōu)化商品供給描述。這里則討論前者,首先是當(dāng)前系統(tǒng)主要有以下不足之處:

    1. Query召回商品仍然使用純文本方式召回,Term命中規(guī)則嚴格,缺少語義匹配能力。
    2. 當(dāng)前召回個性化能力不足,或者說沒有兼顧效率特征,召回截斷后可能損失更具個性化的相關(guān)商品。

    對于1,本季度我們增加基于語義的向量召回,緩解召回語義能力不足的問題;對于2則有很多思路,如考慮成交效率的向量召回、u2i、u2i2i等,這里做了一些嘗試,發(fā)現(xiàn)有時常規(guī)的方案無法直接照搬到閑魚場景,而最終本次優(yōu)化我們優(yōu)先采用了基于行為的I2I(準確說是Q2I2I),同時為了彌補長尾query召回仍然不足的問題,我們補充了基于多模態(tài)內(nèi)容的I2I,從文本和視覺維度召回相關(guān)商品。

    對于上述擴召回的候選,我們使用類目、核心詞、語義相關(guān)性等維度保證相關(guān)性,召回升級后整體模塊構(gòu)成如下:

    后面的章節(jié),將依次分模塊進行詳細方案的介紹。

    語義向量召回

    建模目標

    搜索向量召回的最理想結(jié)果是盡可能檢索出“相關(guān)且高成交效率”的商品。由于閑魚搜索之前沒有向量召回鏈路,因此一期我們決定先從“相關(guān)性”目標出發(fā),設(shè)計基于純語義的向量召回,目的是彌補文本召回語義泛化能力弱的問題。其難點主要為閑魚場景特色下Query和商品的語義表征建模,以及線上機制策略的兼容;而對于“成交效率”目標的兼顧,本季度也做了相應(yīng)的實驗,但是由于閑魚場景的特殊性,暫時無法直接照搬常規(guī)方法,需要進一步探索,這點在本章結(jié)尾進行討論。

    模型設(shè)計

    閑魚搜索的語義向量模型同大多數(shù)的場景一樣,使用DSSM架構(gòu),Baseline Encoder為預(yù)訓(xùn)練的Electra-Small模型(相對于Bert-base效果微跌,但模型大小由300M+縮小到47M,提升了運行效率)。為了豐富Query語義,彌補Query表達不充分的問題,我們增加了臨近Query表征(基于行為的Q2Q),與集團ICBU、淘寶主搜通過多任務(wù)方式引入不同,這里直接增加Query和臨近Query的self-attention模塊,通過更為直接的融入信息,避免了多任務(wù)調(diào)餐的工作量及其不確定性。

    對于無臨近Query的Key Query,進行置空操作,此外對于有臨近Query的Sample也會以一定幾率置空,以適應(yīng)新Query與超長尾Query缺少Q(mào)2Q的問題。

    模型架構(gòu)如下:

    實現(xiàn)細節(jié)

    • 數(shù)據(jù)構(gòu)造

    搜索語義召回向量的核心目標為相關(guān)性,因此其樣本構(gòu)造也是圍繞此設(shè)計,這里方案參考閑魚搜索相關(guān)性——體驗與效率平衡的背后:

    • 正樣本:充足曝光下高點擊ctr樣本(如:ctr大于同query下商品點擊率平均值)
    • 負樣本:
    • Baseline隨機構(gòu)造負樣本:為增加隨機性,該部分實現(xiàn)可在訓(xùn)練時使用同Batch中其他樣本做負樣本,同時也可以引入經(jīng)典的Batch Level Hard Sample機制。
    • 同父類目的鄰居子類目負采樣。
    • 高曝光低點擊類目樣本:同一個Query搜索下,根據(jù)全局點擊商品的類目分布,取相對超低頻類目樣本作為負樣本。
    • 充足曝光情況下,低于相應(yīng)Query平均曝光點擊率一定百分比的樣本做負樣本。
    • 基于Query核心Term替換構(gòu)造負樣本:如,對于“品牌A+品類”結(jié)構(gòu)的Query,使用“品牌B+品類”結(jié)構(gòu)的Query做其負樣本。

    Graph Query Attention

    Query Graph即上文提到的行為Q2Q,這里參考Swing I2I算法,構(gòu)造Swing Q2Q結(jié)果。詳細地。取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的有用信息,缺點則是一定程度上損失了模型預(yù)測階段對于無Graph Query的樣本精度。這點則是通過隨機丟棄Graph Query的方式緩解,實驗證明該方法行之有效。

    • Batch-Level Triple loss vs InfoNCE loss

    早些時候,語義向量召回的優(yōu)化目標loss為經(jīng)典的Triple loss:

    其中 d(a,p)表示向量a和p的距離,a和p表示query和doc的正樣本對,a和n表示負樣本對。Triple loss訓(xùn)練的另一個標配是Online hard negative mining,即在mini-batch內(nèi),每個正樣本對之間互為負樣本,選擇其中最難的樣本作為負樣本(相似度打分最高的樣本對)。

    除了經(jīng)典的Triple loss外,我們也借鑒了對比學(xué)習(xí)框架(如MOCO、SimCLR等)下常用的InfoNCE Loss,:,這里增加溫度參數(shù),進一步提升模型的泛化能力。

    其中q為query向量,k+為商品正樣本對,k-為負樣本對,τ為temperature超參數(shù)。InfoNCE在自監(jiān)督對比學(xué)習(xí)中十分有效,同樣在有監(jiān)督的對比學(xué)習(xí)框架下,也被驗證效果。上式從代碼實現(xiàn)來看更加直觀,也比較巧妙:

      loss_fun = torch.nn.CrossEntropyLoss()# query_vecs : [batch, feat_dim]# item_vecs : [batch, feat_dim]# sim eg: cosine similarity,return dim: [batch, batch]scores = sim(query_vecs, item_vecs) / temp labels = torch.arange(scores.size(0)).long() # scores矩陣對角線為正樣本loss = loss_func(scores, labels)
      • 商品側(cè)引入其常搜query信息

      該部分策略出發(fā)點,閑魚搜索場景中很多標題也存在信息量不足的情況,如“便宜賣”,容易使模型學(xué)偏,這里使用商品歷史有點擊的Top3 Query作為商品的補充信息,與Query Graph一樣的方式融合進網(wǎng)絡(luò)(使用不同的Segment_id),但實驗發(fā)現(xiàn)效果不盡如人意,原因分析可能是閑魚商品在預(yù)測過程中,有不小占比的商品集合為新品,該部分商品往往補充信息不足。商品側(cè)引入其高點擊Query,根據(jù)模型《Shortcut Learning in Deep Neural Networks》的論述,這里模型容易走捷徑,過分關(guān)注補充的Query信息,對于缺失補充特征的商品預(yù)測效果有偏。因此在離線HitRate指標表現(xiàn)不好,在線也存在類似分布不一致的問題。而換個思路補充相似商品信息,也會存在類似問題,因此該路徑未繼續(xù)深挖。

      • 上述關(guān)鍵離線實驗對比
      策略AUC(相關(guān)性)HitRate@1、5、10online baseline model+dim=128

      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

      線上工程方案

      • 向量引擎

      得益于強大的Ha3引擎,使得向量引擎的搭建變得容易了許多。在構(gòu)建向量索引和使用向量引擎對外提供服務(wù)的過程中,需要注意以下的問題:

      • 商品狀態(tài)的維護,包括商品的下線以及新商品的發(fā)布。閑魚場景中的商品屬于孤品,通常商品被賣出或者下架后,將不能再被展示出來,這就要求商品在下架的同時能夠及時從索引中刪除;同樣,在閑魚平臺上,新商品的成交要比舊商品高,因此,新入庫商品需要能夠及時進入向量索引。
      • 召回結(jié)果的過濾、統(tǒng)計、排序等操作。為了能提高向量召回結(jié)果的效率,需要將這些操作封裝到引擎中,使得召回的結(jié)果符合相關(guān)性等要求。

      為了能夠同時滿足如上的需求,我們設(shè)計了如下的向量召回索引流程:

      • 索引構(gòu)建階段,分別搭建數(shù)據(jù)的批量和增量流程,并通過SARO(集團PB級數(shù)據(jù)處理能力以及秒級實時性能的大數(shù)據(jù)ETL平臺)統(tǒng)一管理
      • 每天例行通過ODPS構(gòu)建T+1全量的索引,使得每天的在線數(shù)據(jù)能夠及時同步;
      • 每天的增量數(shù)據(jù),如商品狀態(tài)的改變(如商品下線,價格更改等),新增商品,都會通過消息流的形式傳遞給SARO,通過SARO對數(shù)據(jù)統(tǒng)一管理。

      引擎查詢階段,得益于Ha3引擎的強大功能,通過scorer插件、function插件等對召回結(jié)果過濾、統(tǒng)計和排序

      • 多路召回

      在閑魚搜索業(yè)務(wù)中,存在多個索引引擎,主要包括倒排引擎,即主引擎和優(yōu)品引擎,在增加了向量引擎以及I2I引擎后,如何以最小的代價對鏈路改造多鏈路召回使其滿足整體RT的要求,我們設(shè)計了如下的多路召回流程:

      在實現(xiàn)的過程中,采用的是如上的并發(fā)多路召回的方式,目前索引引擎的種類分為兩種,分別為Ha3引擎和KV引擎引擎。當(dāng)前對于每一路引擎都是獨立的召回,通過設(shè)置不同的召回量控制每一路引擎的召回結(jié)果。

      問題討論與優(yōu)化方向

      在上述基礎(chǔ)的語義向量召回基礎(chǔ)上,本季度我們也做了一些其他的嘗試,下面主要簡單描述嘗試的方案,以及階段性的結(jié)論分析:

      • 增加個性化向量召回

      向量召回的理想目標是檢索出“相關(guān)且高成交效率”的商品,而基于語義的向量召回更多的是考慮“相關(guān)”目標,“高成交效率”的目標則是在粗排/精排階段實現(xiàn)。如果能在召回階段就考慮成交效率,一步到位,應(yīng)該是更加理想的狀態(tài)。

      因此,我們也嘗試了主流的個性化向量的建模方案:

      • 模型側(cè):仍為DSSM架構(gòu),升級query tower變?yōu)閡ser&query tower,item tower不變;
      • 數(shù)據(jù)側(cè):使用點擊/成交user&query-item對為正樣本,曝光為點擊/點擊未成交的樣本為負樣本,同時增加隨機采樣負樣本;
      • 特征側(cè):增加個性化特征,如用戶畫像和行為特征、商品和賣家維度的統(tǒng)計特征等。

      如上的改造期望使向量模型學(xué)習(xí)到個性化特征,但結(jié)果是模型失去了“相關(guān)性”的度量能力(原因也容易想到,在正負樣本的構(gòu)造過程中,“曝光未點擊”的負樣本極大的可能是“相關(guān)”樣本),其實上述方案被叫做“雙塔粗排模型”更加貼切。

      基于這個結(jié)論有兩條優(yōu)化路徑:

      • 在個性化向量召回過程中或過程后增加相關(guān)性策略(如類目、核心詞匹配),方案看上去可行,但回過頭來想,其實和使用“類目/核心詞召回,個性化向量粗排”差別不大,已經(jīng)失去了向量召回的初衷,因此廢棄。
      • 融合個性化和相關(guān)性向量,在召回階段兼顧二者目標,比較有代表性的工作如百度的《Mobius: Towards the next generation of query-ad matching in Baidu's sponsored search.》等,該部分方案是相對合理的解決方向,同樣也是后續(xù)的探索方向。
      • 引入多模態(tài)

      上述語義向量召回方案,并未考慮多模態(tài)信息,集團也有很多工作,這里也嘗試了類似方案,使用多模態(tài)bert強化item側(cè)的特征,事實上離線指標也能得到一定程度提升,但相對地,其鏈路的也變得更重,對資源的消耗也急劇增加。綜合考慮下,當(dāng)前線上主要還是使用文本模態(tài)。該方向仍需繼續(xù)探索,以兼顧鏈路的時效性以及資源的ROI。

      • 關(guān)于相關(guān)性控制

      閑魚搜索滿意度和badcase率是一個比較嚴格的監(jiān)測指標,而擴大召回勢必會增加badcase透出風(fēng)險,依賴語義的向量召回更是如此,由于沒有嚴格的Term命中限制,不可避免地對一些query存在語義漂移現(xiàn)象,對于少見的長尾query更甚。

      事實即是如此,在實踐過程中,僅使用語義向量召回,雖然成交效率可以取得可觀的提升,但badcase率也相應(yīng)的急劇提升,這里我們的解決方案也相對常規(guī):

      • 考慮到語義向量匹配分可以度量query-item相關(guān)性,但一刀切的方式卡匹配分閾值會收窄成交效率的收益,因此我們使用動態(tài)閾值方法對候選進行召回截斷,動態(tài)閾值通過離線query歷史行為統(tǒng)計得到;
      • 增加query-item類目匹配限制;
      • 增加核心term匹配限制,同時兼容同義詞。
      • 其他體感問題:不合理價格、虛標價格、站外引流等商品的過濾

      如此經(jīng)過一系列的調(diào)餐,達到了搜索滿意度和badcase率指標的可接受程度的微跌,但卻損失2個點左右的人均買賣家效率指標(相對不做滿意度優(yōu)化)。這個方向上,仍然有一部分優(yōu)化空間,如更柔型的相關(guān)性控制(當(dāng)前版本核心term匹配這里限制的比較嚴格),更準確的語義向量表達等。相應(yīng)的后續(xù)會從向量表征和機制策略兩方面進行優(yōu)化。

      基于行為的I2I召回

      當(dāng)前召回個性化能力不足,對于不同用戶的相同query,召回相同的候選,召回截斷后可能損失更具個性化的相關(guān)商品。

      建模目標

      分析發(fā)現(xiàn),用戶通過搜索到詳情頁猜你喜歡,通過猜你喜歡場景成交的商品占比可觀,通過case分析發(fā)現(xiàn),該部分diff商品,靠常規(guī)的文本召回方法難以成功檢索到。一個參考統(tǒng)計數(shù)據(jù),搜索導(dǎo)流到猜你喜歡的點擊PV里 ,僅有約25%在當(dāng)前query的召回集合中,也就是說有75%沒有被召回。如一個例子:搜索引擎中檢索“迪卡儂優(yōu)惠券”,返回結(jié)果量不足,而點擊相關(guān)商品進入詳情頁猜你喜歡卻可以關(guān)聯(lián)處滿足需求的商品。

      因此考慮直接通過I2I方法召回檢索池中的商品也會有一定的搜索效率提升空間。

      方案設(shè)計

      而在搜索場景下I2I實際上需要轉(zhuǎn)化為Q2I2I,因此該部分實驗可以分為兩個階段:

      • Q2I:通過用戶搜索query,得到trigger item,該部分有兩種方式:1)直接通過當(dāng)前query實時在線曝光的top item作為trigger商品;2)離線統(tǒng)計該query下歷史成交、點擊、加購、詢單的item集合,在線請求query2trigger表。
      • I2I:trigger item到擴召回item的映射,這部分同樣有多種選擇:1)使用閑魚推薦或搜索場景的i2i召回表;2)直接使用詳情頁猜你喜歡的曝光點擊日志表,構(gòu)造I2I映射表,trigger為詳情頁主商品id。

      通過以上兩個階段可以組合出Q2I2I的候選方案,最終通過AB test擇優(yōu)選擇。使用上述方案,最優(yōu)核心七日人均買賣家提升可以達到+4%的人均買賣家提升,人均成單相應(yīng)漲幅有+5%。但相應(yīng)的也伴隨著嚴重的相關(guān)性指標下跌的情況。如比較典型的,對于優(yōu)惠券/會員充之類的query,個性化召回往往會出現(xiàn)比較明顯的發(fā)散性召回:

      對此,我們將相關(guān)性的優(yōu)化也分成了兩個階段,Query2trigger item的相關(guān)性,保證trigger item和query的相關(guān)性;I2I后,通過query與候選item的類目、核心詞以及語義匹配分過濾相關(guān)性。在維持相關(guān)性波動不大的情況下,最終實現(xiàn)七日+1.8%人均買賣家,人均成單+2.65%??梢钥吹絿栏竦南嚓P(guān)性限制,也縮小了成交效率的空間,也是后續(xù)的優(yōu)化方向,如使用更加soft的相關(guān)性限制。

      各AB收益對比

      經(jīng)過本季度搜索召回優(yōu)化,核心指標上有了明顯的提升,推全時人均買賣家:近3日人均買賣家相對提升+4.66%;近7日人均買賣家相對提升+3.31%,人均成單:近3日人均成單+5.3%;近7日人均成單+4.02%;

      其中,階段性的參考切割實驗對比:

      • 向量召回:七日人均買賣家+2.25%,人均成單+2.69%;
      • 行為I2I召回:七日人均買賣家+1.8%,人均成單+2.65%;
      PS:參考主引擎等數(shù)量擴召回,七日人均買賣家+2.3%(未扣除相關(guān)性折損,即成交效率收益,損失相關(guān)性指標較嚴重。)相比之下,排除精排候選增多引入的不公平對比,擴召回優(yōu)化的收益仍然可觀。

      總結(jié)與展望

      閑魚搜索場景相對常規(guī)的電商場景有不小的差異,如商品上下架頻繁、整體庫存不足,各類型商品庫存分布差異大、用戶query發(fā)散、商品類型發(fā)散等,賣家側(cè)也是盤踞著各種類型的用戶,自由閑置賣家、小專業(yè)賣家、黃牛賣家、“投機倒把”的中間商等,因此在算法策略優(yōu)化中需要考慮的細節(jié)較多,召回優(yōu)化過程中也是如此。

      而對于后續(xù)優(yōu)化方向上,在上面的討論中其實也比較明確,總結(jié)一點即是召回效率與搜索體感指標的trade off,如何在保證相關(guān)的前提下盡可能召回高成交效率的商品,將是一個長期探索的方向。

      參考資源

      1、閑魚搜索相關(guā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

      這個問題還有疑問的話,可以加幕.思.城火星老師免費咨詢,微.信號是為: msc496。

      難題沒解決?加我微信給你講!【僅限淘寶賣家交流運營知識,非賣家不要加我哈】
      >

      推薦閱讀:

      淘寶平臺生鮮類商品爭議處理規(guī)范

      阿里巴巴淘管家怎么進入,淘寶店鋪的淘管家在哪里可以查看?

      淘寶賣家發(fā)布商品沒有品牌怎么辦?淘寶商品發(fā)布有哪些規(guī)范?

      更多資訊請關(guān)注幕 思 城。

      發(fā)表評論

      別默默看了 登錄\ 注冊 一起參與討論!

        微信掃碼回復(fù)「666