1、背景
在用戶的搜索Query中,有些詞在用戶的核心語(yǔ)義訴求中占據(jù)主導(dǎo)地位,在召回排序時(shí)需要重點(diǎn)關(guān)注,而有些詞則重要性較低,即使丟掉也不影響用戶的核心語(yǔ)義表達(dá)。
TermWeight是自動(dòng)計(jì)算用戶查詢query中各term之間相對(duì)重要性關(guān)系的模塊。通過(guò)區(qū)分用戶查詢query中不同term的重要程度并賦予相應(yīng)的得分,從而召回與用戶意圖最為相關(guān)的結(jié)果,繼而提高搜索的用戶體驗(yàn)。
2、靜態(tài)詞權(quán)重
方法:利用query和doc的文檔集合計(jì)算tf-idf并歸一化,作為term的詞權(quán)重
優(yōu)勢(shì):簡(jiǎn)單,易實(shí)現(xiàn)
劣勢(shì):每個(gè)term的詞權(quán)重是靜態(tài)的,無(wú)法根據(jù)上下文變化,效果差
3、動(dòng)態(tài)詞權(quán)重
3.1 訓(xùn)練數(shù)據(jù)獲取
term weight訓(xùn)練,方法主要分為兩種:(1) 基于點(diǎn)擊詞共現(xiàn) 和 (2) 基于偏序關(guān)系。
3.1.1 基于點(diǎn)擊詞共現(xiàn)
基于點(diǎn)擊詞共現(xiàn)法將term weight看做是回歸任務(wù)來(lái)解,標(biāo)注數(shù)據(jù)計(jì)算時(shí)采用term recall得分來(lái)表示query中各term的重要性關(guān)系。
詞共現(xiàn):基于uclog的query-title點(diǎn)擊數(shù)據(jù)構(gòu)建訓(xùn)練集,即通過(guò)計(jì)算指標(biāo) term recall 作為詞權(quán)重。
term recall 計(jì)算公式如下:

Dq :與query相關(guān)的doc集合
Dq,t:Dq包含query中term t的doc集合
注:(1) 詞共現(xiàn)計(jì)算時(shí)需要考慮 同義詞;(2) 如果query的topK點(diǎn)擊doc量比較少,可以考慮用topN語(yǔ)義召回doc補(bǔ)充。
如果是冷啟動(dòng)階段或詞共現(xiàn)計(jì)算的 term recall 準(zhǔn)確率低,可通過(guò)分層回歸得分做人工數(shù)據(jù)標(biāo)注,示例如下:
query:ABCD
標(biāo)注:B(1擋:1.0)> A(2擋:0.7)> C(3擋:0.4) > D(4擋:0.1)
注:分層數(shù)和得分可根據(jù)具體業(yè)務(wù)場(chǎng)景來(lái)調(diào)整
3.1.2 基于偏序關(guān)系
基于偏序關(guān)系的方法將term weight看做是排序任務(wù)來(lái)解,標(biāo)注數(shù)據(jù)時(shí)采用偏序關(guān)系來(lái)表示query中各term的重要性關(guān)系,如:
query:ABCD
標(biāo)注:B > A > C > D
該方法適用于 用戶query短,多數(shù)點(diǎn)擊doc都會(huì)包含query中所有term,從而使得 詞共現(xiàn) 方法失效。
3.2 模型選型
應(yīng)用場(chǎng)景的不同,會(huì)對(duì)應(yīng)不同的模型選型方案:
(1) DeepCT/DeepRT
基于深度上下文語(yǔ)義的詞權(quán)重。(a) 通過(guò)深度模型生成上下文化的詞embedding + (b) 線性回歸預(yù)測(cè)詞權(quán)重。
優(yōu)勢(shì):利用上下文語(yǔ)義,效果好。
劣勢(shì):模型略復(fù)雜,需要控制模型復(fù)雜程度,滿足實(shí)時(shí)推理。
(2) Feature+ML
基于特征設(shè)計(jì)+機(jī)器學(xué)習(xí)回歸模型預(yù)測(cè)詞權(quán)重得分。
優(yōu)勢(shì):計(jì)算高效,滿足實(shí)時(shí)推理。
劣勢(shì):需要人工精細(xì)化設(shè)計(jì)特征。
下面就兩類模型選型詳細(xì)展開(kāi)介紹。
3.2.1 DeepCT / DeepRT
DeepCT/DeepRT框架中整體使用的是:(a) 通過(guò)深度模型生成上下文化的詞embedding + (b) 線性回歸預(yù)測(cè)詞權(quán)重。
如果數(shù)據(jù)集是基于詞共現(xiàn)的得分,則可直接用MSE等損失函數(shù),如果是基于偏序關(guān)系構(gòu)建的訓(xùn)練集,則可以使用Pairwise Hinge Loss。
論文中使用的是BERT做上下文語(yǔ)義提取,我自己的實(shí)踐中用的是BiLSTM+Attention,無(wú)論哪種方法,其核心本質(zhì)是希望利用NMT結(jié)合上下文語(yǔ)義來(lái)動(dòng)態(tài)判斷term在當(dāng)前語(yǔ)境的重要程度。
國(guó)際慣例,一圖以蔽之

如果系統(tǒng)RT要求較高,則推薦使用BiLSTM,如果追求效果,預(yù)訓(xùn)練語(yǔ)言模型的更有優(yōu)勢(shì),需要結(jié)合自己的業(yè)務(wù)場(chǎng)景做選型。
3.2.2 Feature + ML
Feature+ML的整體思路是:通過(guò)人工設(shè)計(jì)有效特征,再利用機(jī)器學(xué)習(xí)中的GBDT/LR等模型來(lái)做回歸預(yù)測(cè)或排序。常用的模型有Xgboost,LightGBM等。
很明顯,該類方法的效果取決于特征設(shè)計(jì)的好壞,不同業(yè)務(wù)場(chǎng)景具體特征會(huì)有差別,下面總結(jié)一些常用特征。
term靜態(tài)特征:idf值、詞頻、term長(zhǎng)度、term詞性、詞位置、是否停用詞、是否語(yǔ)氣詞、是否專有名詞(人名/地名)等等。
term交互特征:term長(zhǎng)度占query長(zhǎng)度比值、text-rank值、term在query中相對(duì)位置、term對(duì)query的ppl貢獻(xiàn)度等等。
ngram特征:包含該term的ngram統(tǒng)計(jì)特征、以該term開(kāi)始的ngram統(tǒng)計(jì)特征、以該term結(jié)尾的ngram統(tǒng)計(jì)特征等等(通常用bigram和trigram)。
特征設(shè)計(jì)后,再用ML模型做回歸預(yù)測(cè)或排序即可,比較簡(jiǎn)單,不再贅述。
參考文獻(xiàn)
- DeepCT論文:Context-Aware Sentence/Passage Term Importance Estimation For First Stage Retrieval
- DeepCT代碼:https://github.com/AdeDZY/DeepCT
- DeepRT論文:Learning to Reweight Terms with Distributed Representations
- TRW論文:Term Necessity Prediction
- Pairwise Hinge Loss代碼:https://github.com/tensorflow/ranking/blob/master/tensorflow_ranking/python/losses.py
- qtAnalyzer工具:Query Term Analyzer