1. 程式人生 > 其它 >推薦系統中為什麼要有召回、粗排、精排

推薦系統中為什麼要有召回、粗排、精排

推薦系統中的召回和排序

在推薦系統中一般會分為召回和排序兩個階段:

召回

召回的目標是從千萬級甚至億級的候選中召回幾千個item,召回一般由多路組成,每一路會有不同的側重點(優化目標),如在廣告中成熟期廣告和冷啟動廣告分為兩路召回(如果廣告比較多,還可能分冷熱廣告分別召回)。在推薦系統,不同路可能代表了不同的優化目標,如喜歡、關注、觀看時長、評論這些都可以分不同的路召回。

目前召回常用的方法有:協同過濾、FM、FFM、圖模型、雙塔模型、還有YouTube在2017年論文中提出的DNN模型、位元組的Deep Retrieval演算法等

在工業屆,常常會用FM、雙塔模型等先學習user embedding、和 item embedding,然後用ball tree、fast ball tree 等近似最近鄰演算法進行檢索,加快效率

排序

排序階段就是把召回的結果進行排序,把top k(k 一般都是個位數)結果作為推薦系統最終的輸出。

排序階段常用的演算法:LR -> FM -> deepFM等

為什麼要把排序分為精排和粗排?

把排序階段分為粗排和精排,其實就是生成環境中成本和結果的一個平衡。進入排序階段的候選集一般確實只有幾千個,但是對於抖音、YouTube這種量級的應用來說,他們request是非常多的,依然不能上太複雜的模型和特徵。

因此把排序分為粗排和精排:

粗排漏斗一般是: 幾千 -> 幾百

精排漏斗一般是:幾百 -> 幾個

這樣精排可以把模型和特徵做到極致,可以達到非常高的精度

召回和粗排的差別在哪裡?

1. 建模目標不同

召回是漏斗的最上游,可以說是決定了推薦系統的上限

召回的目標是召回使用者可能感興趣的 item,會考慮多方面的因素

粗排是對召回的結果進行排序,top k 送入精排,常用的有兩種建模方式:

1. 獨立建模,如在在廣告推薦中,粗排也是優化ecpm,在推薦中也是優化Finish、Staytime等

2. 對齊精排,用 leaning to rank 等方法去學習精排的序