召回 粗排 精排,如何各司其职?
文 | 水哥
源 | 知乎
saying
1.AB測試幾乎是系統改進的不二法則,算法做AB,開發做AB,產品做AB,運營更要做AB
2.召回有點像一個甩鍋俠,我不管我給的準不準,我就管我把潛在的能投的都吃進來就行
3.其他環節想要提升,除了自身確實有改進,也要和精排相似。太超前的改進注定會被精排這個舊勢力打壓
4.粗排非常容易照本宣科,明明實際結果已經說明不需要粗排。內心的慣性還是讓人留著它
前兩講從比較寬的范圍講了一下推薦系統做什么,以及在這個時代背景下的發展歷程。從這一講開始,我們則會逐漸進入技術細節。
從大體上來說,推薦系統需要包含這幾種模塊:索引/庫存池,特征服務,排序模塊,線上展示邏輯,日志系統,分析系統。如下圖所示:
索引池是對當前所有item的判定,并不是所有item都可以出現在推薦這整個大的邏輯下面。舉個例子,廣告主的某個計劃,只設定了相應的預算,如果預算花完了,或者廣告主已經不想投了,那就需要從索引池里面拿掉。另一種情況是可能有多種索引池,廣告主不想投放20-30的人群的時候,索引池就等于是其他年齡段的索引池合并起來。
特征服務,用戶發生請求(刷新,剛進入app等都會有請求發生)時,算出該用戶信息所對應的特征,比如通過他的一些行為判定他的年齡性別等。另一個很重要的則是獲取這個用戶的一些歷史行為。對于item當然也要提取特征,但是圖上沒有畫出來,原因是item的大多數特征都相對固定,而用戶的行為特征變化很快,需要專門的服務來處理
排序模塊,這就是模型主導的部分了,下面要講的召回精排粗排都在這里,下一講要涉及的打壓保送策略也包含在內。排序模塊的作用就是從很多候選的item中挑出最好的一個或者多個進入到展示邏輯中
展示邏輯,這里有的同學可能會問,知道哪個最好不就直接放出去就好了嗎?為啥還要有一個邏輯的區分?其實這里一個主要的點指的是廣告和內容的混排,或者是視頻和文章的混排。廣告和文章,在各自的排序階段是誰也看不見誰的,也就是說,上面的排序系統是雙倍的。當雙方都排好之后,需要對廣告進行判定,要么是質量很高(預估的ctr,cvr都很高),要么是此刻之前展示的廣告比較少,門檻下降了。如果符合這兩種情況就可以對廣告選擇合適的位置投放。
日志系統:記錄推送前后系統發生的一切事情。注意在圖上有一個日志系統返回排序模塊的箭頭,這個箭頭的含義是,用戶的行為要落盤,形成新的訓練數據來讓排序模塊繼續訓練
分析系統:這個系統依賴于日志,此處主要指AB測試系統。AB測試就是指,把用戶隨機進行劃分,一部分用戶應用對照組(A組,也就是原來的系統),另一部分用戶應用實驗組(B組,也就是我們想添加的改進點)。通過對比AB之間的差異,來展示我們所加的改進點是否有效。所以整個系統的迭代都是嚴重依賴AB實驗的,想一個idea-做線下實驗-上AB試試-有效就推廣到全量,一般是這么個流程。當然AB實驗也不是萬能的,這個后面會講到。另外要注意的是,雖然這里叫做AB測試,但是實際上對照組的用戶不是都放在同一個桶里面,實踐中往往是AABB實驗,即對照組也有多組,實驗組也有多組。這么做是為了觀察組內的方差和組間的方差,假如兩個對照組之間的觀看時長差距有3%,對照組和實驗組差距只有2%,那我們就無法說明這個實驗是有正向的。
上面是對于整個系統框架的梳理,下面我們就細化到排序模塊里面,看看具體是如何排序的.
整體上,排序是一個漏斗,如下圖所示:
一開始我們可能有成千上萬的item,首先要由召回(也叫觸發,recall)來挖掘出原則上任何用戶有可能感興趣的東西。這個環節是入口。有時候,單獨的召回可能難以做到照顧所有方面,這個時候就需要多路召回。很好懂,就是多個召回路共同決定進入粗排的候選。比如可以由一個召回專門根據用戶過往的興趣來篩選候選,那可以再加一個召回專門輸出近一段時間的熱門視頻。他們的出發點都不一樣,共同組成下一級的輸入。粗排(pre-rank)一般接受幾千個輸入,這時候壓力就大大降低了。粗排就可以放一些較為復雜的結構,比如mlp就可以放上去了。粗排的輸出一般是小于1000的,那這個壓力就更小了,精排(rank)就可以變得很復雜,什么transformer啊放進去也不過分。
因此這幾級結構實際上是計算壓力從大到小,模型復雜度從小到大的一個過程。正因為如此,他們的角色其實也有差別。
精排-最純粹
精排是最純粹的排序,也是最純粹的機器學習模塊。它的目標只有一個,就是根據手頭所有的信息輸出最準的預測。我們也可以看到,關于精排的文章也是最多的。
研究精排雜七雜八的變量最少(雖然也是最卷的),精排訓練所需要的數據本身就是它自己產生的,沒有其他環節的影響。精排也是整個環節中的霸主,你在召回上的一個改進點,精排沒有get到,那你這個改進點就不能在實際環境中生效。前面的環節想要做出收益,都得精排“施舍”。
召回-入口大開
由于召回所要面對的item量是最大的,因此召回也是時延壓力最大的。簡單來說,就是要快。意味著他的模型結構最簡單,甚至有時候都不是模型,而是規則。
對于召回來說,最經典的模型莫過于雙塔(一個mlp輸出用戶的embedding,一個mlp輸出item的embedding,后面詳細介紹)。雙塔的輸出,通常建模在向量的近似搜索里面,可以極大地提升搜索的效率。因此,雙塔幾乎可以說是為召回而生的。
召回有一個原則是多樣化,多個召回路在他們所要涵蓋的地方應該有差異。考察方面有差異最好,模型結構有差異次之,如果僅僅有數據差異啥的可能不會有什么效果。
但是召回并不太關心準不準,第一是后面有粗排精排給他兜底,第二是他準了也沒用,反正還要看后面的臉色。我們在機器學習中有一類指標叫“召回率”,就是你認為的正樣本占所有正樣本的比例。這里的召回也有點這個意思,不在乎你犯了多少錯,只在乎你把對的放進來沒有,因此我們就得到saying 3.
粗排-略顯尷尬的定位
相比于召回和精排,粗排是定位比較尷尬的。在有的系統里,粗排可以很絲滑的平衡計算復雜度和候選數量的關系。但是在有的例子中,粗排可能只是精排甚至召回的一個影子。所以,粗排的模型結構大多數情況下都很像精排或者召回。
粗排是一個非常容易照本宣科的地方,因為粗排不是必需的環節。如果你的候選數量非常少,那連召回都不需要了;如果你的精排能吃的下召回的輸出,那可以考慮實驗對比是不是需要粗排。但是假如不加粗排,總感覺欠缺點什么。有的地方甚至出現過粗排輸出候選變少,整個系統反而漲點的情況。像這樣的情況出現,就說明整個鏈路設計存在不合理的地方。
后臺回復關鍵詞【入群】
加入賣萌屋NLP/IR/Rec與求職討論群
后臺回復關鍵詞【頂會】
獲取ACL、CIKM等各大頂會論文集!
總結
以上是生活随笔為你收集整理的召回 粗排 精排,如何各司其职?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 全球仅3000人通过的TensorFlo
- 下一篇: 谷歌 | 多任务学习,如何挑选有效的辅助