推薦系統中為什麼要有召回、粗排、精排
推薦系統中的召回和排序
在推薦系統中一般會分為召回和排序兩個階段:
召回
召回的目標是從千萬級甚至億級的候選中召回幾千個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 等方法去學習精排的序