愛奇藝搜索排序算法實踐(內附福利)

7月3日下午,愛奇藝技術產品團隊舉辦了“i技術會”線下技術沙龍,本次技術會的主題是“NLP與搜索”。我們邀請到了來自字節跳動、去哪兒和騰訊的技術專家,與愛奇藝技術產品團隊共同分享與探討NLP與搜索結合的魔力。


其中,來自愛奇藝的技術專家張志鋼爲大家帶來了愛奇藝搜索排序算法實踐的分享。


福利!關注公衆號,在後臺回覆關鍵詞“NLP”,就可以獲得本次i技術會嘉賓分享完整PPT和錄播視頻。


 以下爲“愛奇藝搜索排序算法實踐”乾貨分享,根據【i技術會】現場演講整理而成。


01

背景介紹


1.愛奇藝搜索場景


愛奇藝的搜索場景主要有以下三個特點:


(1)多產品線,如愛奇藝主端、隨刻、極速版、TV等;


(2)多業務形態,包括綜合搜索及各垂類業務;


(3)多數據類型,包括專輯、短視頻、愛奇藝號等。


我們以下圖這個具體的搜索場景爲例,首先,我們在搜索框輸入對應的Query,點擊搜索按鈕,跳轉到最終的結果頁。


結果頁的情況如圖所示:第一個是專輯長視頻,下面是三個短視頻,接着是相關小說,數據類型是比較多樣的。

此外,結果頁頂部的Tab欄還分爲綜合、影視、短視頻、小視頻等等,“綜合”欄對應的是我們的綜合搜索業務,後面的“影視”“短視頻”等對應的則是我們的多垂類搜索業務。


本文將主要介紹我們基於綜合搜索的實踐。


2.業務優化目標


我們的業務優化目標主要分爲四大塊:


(1)提升搜索效率。這裏主要有三個衡量指標,都與用戶的體驗有關。第一個指標是Session CTR,就是用戶一次請求對應的點擊率;第二個指標是UCTR,指的是用戶整體點擊率;第三是二次搜索率,也就是一個用戶在短時間內有多次搜索行爲,說明對當前搜索結果不是特別滿意;


(2)促進用戶消費。用戶消費的衡量指標目前包括三大類:用戶播放時長、點擊次數及互動次數。


(3)完善內容生態。目前我們搜索的範圍包括全網視頻(站內及站外)、優質垂類分發、愛奇藝號等等。


(4)新熱多樣,包括針對新視頻的冷啓動、時效性提升、多樣性優化等。


3.整體架構


下圖是我們的整體架構圖


最上方是用戶業務方的調用接口,之後進入到綜合調度模塊,這塊主要負責URL的接收,以及整體業務邏輯的處理。


綜合調度會讀取一系列數據,包括Query的分詞解析糾錯以及Query的意圖識別,例如Query本身要查詢哪些品類?是電影、電視劇還是綜藝?要查詢查詢長視頻還是短視頻?



另外,還有運營配置模塊,這裏我們支持人工定義,在特定的Query和場景下,吐出相應的Doc。


中間這一部分是歸併重排,負責合併從多個分片的Doc並去重,同時進行重排以及策略調權。


下方部分的預測服務採用Lambda架構,索引部分主要分爲兩大塊——全量索引和實時索引,均匹配對應的召回、粗排、精排流程。


同時,我們的預測服務也會讀取用戶畫像和交叉特徵。交叉特徵計算是獨立的一個服務,主要內容爲當前Query和當前候選Doc的交叉統計後驗特徵,包括點擊率、時長等維度,另外會進行Term擴展,將Query分詞後的多個Term分別與候選Doc計算交叉特徵,然後聚合形成新的特徵。


此外,歸併重排這部分會打印實時日誌,然後產生樣本,進行模型訓練。


4.算法策略框架


我們的整體算法策略框架也分爲三大塊第一部分是索引,這部分主要進行分級、分片的處理。


分級策略包括規則和模型,比如站內視頻、長視頻、新視頻、模型分數較高的優先進入一級索引。


此外,我們還需要對不同的分級進行分片,分片主要按照天級、小時級、實時等生成時間窗口劃分,並基於索引進行基礎搜索,即召回流程,如倒排索引、向量召回等。


框架的最上方則是上層排序,包括粗排、精排、Rerank的功能。



5.排序流程


愛奇藝綜搜場景下,全量Corpus爲億級別,召回階段候選集爲十萬量級,粗排爲千級,精排爲百級,Rerank爲十級,最終展現到用戶UI界面中。


02

愛奇藝搜索排序算法實踐


接下來我們按照下圖的搜索排序流程來依次進行介紹。

STEP1:選擇攻擊對象


首先是召回Trigger的選取。


我們會先對用戶的Query進行對應分詞單純的分詞會存在一些問題,比如“臺媒”和“臺灣媒體”本身是相同意義的詞,另外還有一些中英文的對照,這些詞之間需要一定的映射匹配。


這裏會涉及到Term的翻譯問題。


下圖最右側是Term翻譯模型實現的流程:


首先,我們提取一定時間窗內點擊次數較高的Query-Doc_title對,爲翻譯模型提供平行語料;


第二步,構建翻譯模型的訓練挖掘,進行詞對齊和短語對齊。


第三步,我們基於翻譯模型輸出的候選對,進行一系列的特徵的抽取,如翻譯模型對應的輸出概率、分詞特徵、字向量等,然後建立二分類質量模型。


最後,我們會對模型分數較高的候選對進行篩選評測,把質量較高的候選對存儲到線上詞表進行應用。


整體來看,Term可以分爲三類:原始Term、對齊Term還有點擊相似Term。其中點擊相似Term是通過構建Query-Doc的點擊二部圖,對 Query/Doc 的表達向量進行無監督的迭代訓練獲取。


上圖虛線框對應的是召回的種類,如常規、結構化、語義的倒排索引以及向量召回等。向量召回包括DSSM召回、Bert召回等,線上採用ANN計算方式。


下面主要詳細介紹一下Bert召回


離線訓練主要採用三元組的構建方式,同時Query和Doc共享相同的Bert參數。Query和Doc的Bert輸出層接入多層MLP後進行相似度計算。具體可以分爲以下四部分介紹:



1.樣本訓練


正樣本主要包含當前Query下用戶的長點擊Doc。


對負樣本,我們會做一些相關的處理。整體負樣本來主要自三個方面:


首先,用戶有展無點隱式負反饋樣本的隨機採樣。


第二,我們會把與當前Query有一些少量點擊Doc交集的相似Query中,點擊位置較低的Doc作爲負樣本,加速模型的收斂。


最後,我們對全局的Doc進行一定比例的隨機負採樣。


2.特徵建構


Query側特徵是Query本身字的序列。Doc側則包含它的原始title、別名、對應的英文翻譯以及導演、演員、角色等多Field的信息。每個Field信息以[SEP]進行分隔。


橫向部分主要包括多Field對應的字ID的拼接,縱向部分會加入Position、Field ID以及Mask標記


3.訓練loss


整體Loss中,首先是Triplet Loss,主要學習正負Doc之間的序關係。另外,我們會加一個對比學習的Loss,以避免模型坍塌。第三,我們還會加入頻道多分類的loss,用以提高整體語義的學習。


最終Loss爲這三者的線性加和。


4.在線服務


訓練之後我們會進行在線服務。由於Doc側量較大,多Field字特徵也比較長,90%分位的字特徵長度在128左右。因此這部分進行離線刷庫,線上直接調用。


由於Query字特徵較短,因此進行在線實時預測,並與Doc側向量進行相似度學習計算,獲取對應倒排拉鍊。


STEP2:粗排


我們知道粗排的主要功能是爲精排提供候選集,其中最主要的就是負樣本的選取。由於線上計算耗時的原因,對於比較重的精排,如果對全量的召回Doc進行預測,將會帶來極大的延時,因此需要增加粗排來進一步過濾篩選。



粗排主要是把精排輸出的TopK以及用戶的最終點擊作爲優化的目標。正樣本爲用戶的正向點擊,負樣本除有展無點樣本外,會按一定比例加入精排分數較低的doc,同時對相關性較差的樣本進行負採樣,以提高相關性。


整體模型構建採用樹模型的方式,以減小線上壓力。整體來看,粗排階段的Doc質量分、交叉特徵、時效性等特徵重要性較高。


STEP3:精排


1.Learning to Rank


首先,我們回顧一下Learning to Rank的基礎概念


一是Point-wise,把全局所有的單個Doc進行學習,當前Doc的Loss和其他Doc是相對獨立的。



二是Pair-wise。這部分主要通過所有Doc兩兩組合,生成不同的Pair,學習各樣本之間的大小關係。


這種情況下會出現一個問題:沒有考慮同一個Query對應的Doc Pair間的內部依賴性,同時也沒考慮Doc Pair的相對位置,比如排行第一與排行第十的Pair之間的重要性比排行第四、第五之間的Pair重要性高很多,因此引入IR評價指標作爲樣本的權重顯得非常重要


這其實是List-wise的一個思路。


2.RankNet & LambdaMart


Pair-wise目前比較常用的模型是RankNet,按照Doc Pair的點擊質量大小關係,打標爲1、0和-1,之後採用交叉熵Loss進行學習,對應的計算公式如下圖所示。


在RankNet最終的梯度基礎上,加入評估指標NDCG的變化量,可以將其轉化爲List-wise的學習,同時可以達到損失可導的效果


另外,我們的訓練框架採用MART,其訓練效率較高,而且支持不同特徵組合及熱啓動等。


我們目前採用點擊質量來構建Label,在不同的數據類型下將對應的播完率劃分成0到3檔。同時樣本按Query不同搜索頻次分段進行不同比例的採樣,着重學習搜索量分佈中,軀幹部分的Query。


整體來看,LambdaMart適用於排序場景,對比大小並非絕對值,對正負樣本比例不敏感。


3.LambdaRank DNN


但是LambdaMart模型仍然存在以下問題有待解決:


(1)對高維稀疏的支持較差;


(2)當樣本達到億級,樹模型會存在一定的訓練效率低下的問題;


(3)對一些多目標還有增量學習支持不太好。


因此,我們做了DNN模型的升級


從其升級情況來看,首先,和樹模型相比,只有稠密特徵的前提下,DNN模型想要超越前者仍然較爲困難。因此,我們新增了一部分稀疏特徵,具體如下。


Query側主要加入了Query分詞、意圖識別標籤等


Doc側加入了演員、內容標籤、Title、Clicked-query等特徵


Query側和Doc側的多值Meta特徵分別Pooling後進行交叉學習。


另外,我們還會加入一些用戶畫像的序列,比如用戶的長期、短期畫像,用戶按時間序列的點擊序列等。目前我們採用的是一個DIN的結構,學習用戶的多興趣表達。另一部分是原始的稠密統計特徵,以及候選Doc的ID特徵。Loss採用的是樹模型相同的LambdaRank。


    DNN升級在整體點擊率指標上有百分位以上的提升。


4.TopK Optimization – Hot Query


在DNN升級的基礎上下,我們進行了針對性的TopK業務優化。


從搜索業務來看,TopK位置的展示效果對用戶體驗的影響非常大,如果Top位置的內容質量及相關性較差,會直接導致用戶跳出。


因此,我們對其進行了特定優化。下圖所展示的是熱門Query部分的優化方案。


首先,我們擴充大量頭部樣本,對採樣邏輯進行了大幅調整。從統計情況來看,TopK樣本所在的List往往較短,用戶點擊並看完第一個位置的Doc後,可能會馬上離開。在這種情況下,List內的Doc只能有兩個左右。因此,我們調整樣本採樣策略,同時把List長度放開到大於等於2。


另外,List-wise的訓練模型也存在一定的問題。不同的List下的Doc長度是不一樣的,點擊的總次數也不同,因此,整體Query會面臨學習不是特別穩定的情況,構造權重也相對比較複雜。


因此,我們直接將訓練方式切換成Point-wise,採用對CTR單目標進行時長加權,不僅有利於克服以上問題,還有一個好處就是頭部的樣本對應時長的權重非常高,以此加強整個模型對頭部樣本的學習。


在模型上,我們採用混合專家網絡,以提升整體模型的精度。


另外,我們也增加了ID特徵。我們將QueryID和DocID直接Concat,並做低頻過濾,這樣做主要是加強TopK的記憶功能。熱門Query部分TopK優化後,Top區點擊率大幅提升。


5.TopK Optimization-Longtail Query


接下來,我們再來看一下長尾部分的優化。


我們主要是加大了對Top1的懲罰,具體實現的邏輯是:在當前模型訓練中,對應Query下所有的Doc中,我們會把模型得分最大的Doc對應的Label取出來,二者進行MSE計算,並加入到原始LambdaRank Loss中,這樣就可以加大對Top1的排序和絕對值偏差的懲罰,長尾Query部分的點擊率提升顯著。


6.Residual PLE


下面是多任務學習這一部分,我們參考的是PLE的結構。如下圖左邊的網絡所示,首先是Input層,再往上是點擊以及時長的多任務多專家網絡。


首先,PLE結構能夠使不同的專家網絡分工更加明確,如圖所示,Experts Shared模塊多任務共享的網絡,Experts A模塊則專門學習CTR目標,Experts B模塊則專門學習播放時長目標。從Label層面來看,點擊部分主要爲點擊率,時長部分則由於時長值域分佈較廣,模型學習非常困難,因此對播放時長的原始值進行Log平滑處理,相對於指數平滑,這種方式更注重時長腰部的提升。



Loss部分我們採用的是交叉熵與MSE的線性加權

從模型結構來看,單個Expert採用的是DCN結構,在我們的業務中,由於後驗統計特徵重要性是最高的,且DCN結構中融合了線性與非線性交叉的特徵,同時包含殘差的功能,因此非常適用於我們的場景。


整體PLE結構採用了兩層,我們曾經做過相關嘗試,如果直接使用,效果較差,下限比較低。但若將第一層疊加到最後一層進行殘差的學習,將可以極大地提升離線效果。


最後是線上融合,乘法相對加法更能兼顧不同目標的獨立性。在熱門部分,長點擊率獲得了明顯提升。


7.Position Bias


下面,我們再介紹一下搜索場景比較常見的Position偏差的問題。


圖中藍色部分代表的是點擊率,紅色代表曝光佔比。從點擊率來看,我們可以發現Top1點擊率要遠遠高於其他所有位置,並且Top1與其之後的位置間有着極大的落差。曝光佔比也是頭部遠高於其他位置。其實這種情況說明了一個問題——當前所有Doc隨機分發,Top區位置的Doc存在更大的概率被用戶注意到並點擊,因此存在一個較爲明顯的偏差問題。

另外,如果有的Doc一直排行在Top1位置,特徵積累非常豐富,也會造成特徵的偏差。這樣會使得有些Doc雖然效果並不好,但卻常常處於Top1的位置。


於是,我們開展了去Position Bias的工作。首先採用了較爲常規的方法,利用Position特徵以及少量上下文特徵,構建了單獨的Position塔,並將其輸出加入到模型Wide部分。上線實驗後效果較差,經分析,我們發現了Position特徵與Label相關性過高,離線的模型非常依賴它,Position特徵線上線下不一致性對指標影響非常嚴重,線上全部填1後AB指標降幅較大。


因此,我們繼續做了一些優化,加入了當前Doc被用戶看到(注意到)的概率建模。



整體來看,用戶真實的點擊率存在着一個條件概率。


首先,這個用戶在這個Position下能注意到它,如果排行靠前,用戶更容易被它吸引。


另外,我們會對原始的CTR進行建模,會複用之前的精排模型結構。之後再將二者的整體輸出進行相乘,對真實CTR進行建模。


線上預測時直接用右側DNN模型,整體來看,長尾部分取得了明顯的正向收益。


STEP4:重排


這部分主要採用的是SE-Rank模型。我們之所以要進行重排,是因爲精排部分是分片的,沒法加入上下文感知,比如同一個Query下,每一個Doc在精排階段都是相對獨立的,並不清楚要對比的候選集是怎樣的,存在所有候選Doc的特徵值相似,導致Doc之間的精排得分區分度不高,因此需要把上下文感知加進去,並進行重排。


SE-Rank中的X就是對應一系列輸入的Doc及其對應的特徵,上圖中的L則表示對應Doc的個數,C是特徵的個數。在目前採用多Field的情況下,每一種特徵都單獨學習對應的上下文感知模塊。


首先將原始Query下所有候選Doc的特徵聯結起來,同時,對網絡進行一定比例的壓縮,降低模型複雜度,避免過擬合,效果有一定提升。


然後進行Pooling,構建上下文感知,學習當前的全局情況。


最終我們將Pooling後FC的結果返回給所有的候選Doc,這樣完成上下文感知的構建。


這裏使用的訓練的方式也是List-wise。


由於Transformer非常適合上下文場景感知的學習,於是我們在SE-Rank的基礎上進行了優化。整體模型結構是輸入層接入Transformer結構,更利於當前Doc對所有候選Doc注意力及上下文影響的學習。


我們的離線評估採用的是NDCG,線上也取得了不錯的效果。從離線NDCG來看,能夠提升百分位以上。


STEP5:可解釋性


由於我們進行了一系列深度模型升級和優化,會面臨一個問題:深度模型越來越複雜,應該如何解釋?


這個問題的解決有助於我們後續的一系列模型和特徵優化。


1.可解釋性—稠密特徵


稠密特徵解釋性部分,我們採用了LIME框架


LIME是一個局部可解釋的框架,在我們場景中,以Query-Doc Pair的粒度,獲取線上的準確實時特徵,並進行局部擾動,生成一系列衍生樣本。


具體實現邏輯爲:稠密特徵擾動主要是對當前每個特徵隨機加減或者乘以一定的係數,構建一系列新的特徵,同時,稀疏特徵部分會用默認值填充。然後將包含原始特徵數據在內的所有特徵數據爲輸入,逐個依次訪問線上模型,獲取到對應的輸出得分,這樣可以得到包含本身樣本及擾動後樣本的集合,並進行LR的訓練學習。LR是可解釋性很強的機器學習方法,每個特徵的權重可以表達特徵的重要性以及正負相關性。


在我們的視頻搜索業務場景下,這個方法還是比較奏效的。從上圖中的Case來看,紅色部分主要是實時計算的點擊率交叉特徵,有非常明顯的正向相關性。另外,還有一些藍色部分的特徵如Query實時點展特徵,特徵值比較低,但當前Doc熱度比較高,二者差異較大,因此這部分特徵與當前Doc的模型得分存在一定的負相關性。


整體來看,稠密特徵的解釋性效果比較顯著。


2.可解釋性—稀疏特徵


另外,我們再介紹一下稀疏特徵的解釋性。這一部分我們主要是加入簡化版的SE-Block


具體實現邏輯是,以單個稀疏特徵的Embedding爲輸入,加入全連接,生成權重W,W和原始Embedding相乘,生成新的Embedding,新的Embedding直接輸入最終的DNN模型中。從模型訓練完畢後權重的結果來看,有較爲明顯的可解釋性效果。


從下圖的表格來看,稀疏特徵的重要性權重出現較爲明顯的區分度,一部分稀疏特徵特徵的重要性權重接近1.0,部分特徵的重要性權重只有0.3左右,甚至更低。


整體來看,加入SE-Block不僅有一定解釋性作用,對整體模型的收斂有一定好處,可以對於重要性權重高的稀疏特徵着重學習,對重要性權重接近於0的稀疏特徵則有將其直接Mask掉的效果。從模型評估指標來看,離線AUC有明顯的提升,同時大幅增強了模型的可解釋性。


福利!關注公衆號,在後臺回覆關鍵詞“NLP”,就可以獲得本次i技術會嘉賓分享完整PPT和錄播視頻。

也許你還想看

愛奇藝多語言臺詞機器翻譯技術實踐

工程師訪談 | 初心在方寸,咫尺在匠心,愛奇藝NLP的成長之路

愛奇藝逗芽表情搜索分析與實踐



 關注我們,更多精彩內容陪伴你!

本文分享自微信公衆號 - 愛奇藝技術產品團隊(iQIYI-TP)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章