推薦策略產品經理必讀系列—第二講推薦系統的架構
編輯導語:推薦系統是如何做到向用戶推薦他感興趣的物料的,這個取決于我們的推薦系統架構。作者對推薦系統的架構進行了詳細的闡析,總結了7大搭建架構環節,希望對你有所幫助。
上一篇為大家介紹了作為一個推薦策略產品必須了解的行業里發生的大事以及行業整體未來的趨勢,本篇就為大家詳細介紹推薦系統的架構,推薦系統是如何把我們感興趣的物料推薦到我們面前的。
一、整體架構
將推薦系統架構里面主要的部分整體如上圖,用戶打開APP看到為自己推薦的物料,正常都是需要經過5-6個環節。常見的流程從建立物料索引,再到召回、粗排、精排、重排到過濾層,最終展示在了APP前段,為用戶推薦了感興趣的物料。
二、物料索引
APP里有哪些物料是可以推薦給用戶,會有一個總的物料池,物料池本身存儲在數據庫中。同時為了查詢時更加方便快捷,我們需要提前構建好物料索引。尤其是很多召回路是基于一些標簽進行召回的,更加需要提前構建好倒排索引。物料的清洗和索引的構建是推薦系統的第一步基礎工作。
三、召回層
構建完物料索引后,推薦系統是如何挑選出用戶感興趣的物料了。推薦算法發展到現在,我們可以稱之為4.0時代。4.0時代的推薦算法都是以預估用戶的點擊率(CTR)為核心,基于用戶對于每個物料的預估點擊率(Predicted-CTR)來進行排序,按照Predicted-CTR值進行倒排。以上介紹的是最理想的方式,但是實際卻無法執行也沒必要。
原因一:無法實現
物料庫的量級太大,比如像淘寶這種平臺物料幾十億商品,如果用戶的每次請求都去預估幾十億商品的Predicted-CTR,需要大量的機器資源,同時時延會非常高。大家打開淘寶首頁可能需要幾十個小時,且不一定能加載出來。
原因二:沒有必要
幾十億的商品,有很多商品是非常冷門商品,99%以上的商品和用戶毫無關聯,完全沒有必要如此精細化去預估用戶對于幾十億商品的興趣度。
所以推薦系統演變成先通過召回層初步篩選出用戶可能感興趣的一些物料,比如800個。然后再進入粗排和精排,其他幾十億的物料直接在召回階段就被過濾了。這樣的架構設計大大降低了推薦系統的計算壓力,同時也不影響推薦系統的整體效果。
而召回階段,市面上最先進的模式就是針對不同的用戶進行分層,然后不同層級的用戶使用的召回路數不一樣,核心都是多路召回,每一路召回返回的物料個數以及對應的權重都是和用戶本身的分層有很大關系,實現非常精細化的用戶和召回路數的管理。
常見的召回方法有基于熱銷商品的召回、基于歷史高點擊商品的召回、用戶歷史看過商品的召回,還有一些常見的協同過濾算法比如Item-CF、User-CF。關于召回階段常用的策略和算法后面會有專門的文章進行講解。
四、粗排層
大家可以看到召回階段會有非常多的召回策略,那我們如何將這些各路召回的商品匯總在一起進行一個統一排序了。比如熱銷路的召回,召回了Top 100的商品;歷史高點擊的召回,同樣召回Top 100的商品。這兩路召回的商品可能還會有重疊的。
在召回層里,每一路的召回都需要將物料的分數進行歸一化。比如說熱銷路的召回,如何召回Top 100的商品,首先需要計算每一個商品的熱銷分數,然后取Top 100的商品。歷史高點擊的召回路也是一樣,并且每一路的分數都需要歸到【0,1】之間,這樣各個路之間才能比較。
同時不同場景下每一路召回的重要性也完全不一樣,可以再設置一個對應的系數。比如熱銷路召回為0.5,歷史高點擊路召回為0.7,假設商品A在熱銷路召回分數為0.8,歷史高點擊路召回分數為0.3,那么最終這個商品的總召回分數為:0.5 X 0.8 + 0.7 X 0.3 = 0.61。粗排層就需要將每一個召回的商品進行上述計算方式進行處理后,匯總得到一個總的List,然后選擇Top K的商品給到精排層。
五、精排層
精排層的核心任務就是預估用戶對于召回層返回的Top K商品的Predicted-CTR。召回和粗排只是選擇出了用戶可能感興趣的物料,但是每一個物料具體的預估CTR是多少并不知道。
精排層就需要基于用戶歷史點擊過的物料作為正樣本,曝光未點擊的物料作為負樣本,然后構建CTR預估模型,預估用戶對于每一個物料的Predicted-CTR。在精排層核心要做的幾件事情:數據清洗構建正負樣本,選擇合適的排序算法,構建特征工程、模型訓練與效果評估。
最終基于精排模型預估出的CTR對于召回的物料再重新進行一次排序。精排模型的預估是整個推薦系統中耗時最多的,因為特征十分復雜,特征維度很多。如果針對幾十億物料全部進行CTR預估,系統直接崩潰,這也是需要先進行召回的原因。
六、重排層
那是不是精排過的物料,直接按照精排后的順序直接展示在了APP前端了。很多時候推薦系統仍然有一些其他業務規則進行干預。比如在電商推薦系統里面,就會有以下的一些策略:
1. 類目打散
對于給用戶推薦的商品如果類目集中度過高,會進行一定程度的打散。比如精排模型給用戶返回的前10個商品全部都是鞋子,可能該用戶偏好鞋子,但前10個商品全部是鞋子此種集中度還是過高了,重排層就會將后面其他類目的商品插入到這10個商品中。具體按照類目打散的規則每家不一樣,核心是基于業務場景。打散不是目的,目的是為了提升推薦系統的點擊率。
2. 不同類型物料混合
比如淘寶,淘寶推薦場景里面有的內容類型有:店鋪、活動、直播、商品、視頻等等。那這些不同類型內容之間如何進行混合。能否可以出現連續4個全部都是直播,或者4個全部都是視頻。為了降低用戶的審美疲勞,很多時候針對不同類型的內容推薦系統也會進行重新打散。但同樣打散不是目的,目的是為了提升推薦系統的點擊率。
3. 全局最優
重排層還有一個核心的邏輯就是實現全局最優。精排層是預估用戶對于單個物料的CTR,這是一種局部最優的思想。但是用戶在瀏覽時正常都會一次性瀏覽多個,怎么樣的物料組合可以實現全局最優而不是局部最優。同樣4個坑位,有可能精排排序在1,3,5,7的四個物料組合比精排排序在1,2,3,4的四個物料組合整體CTR更高。
總的來說重排層是推薦系統最后一道策略和模型的調整了。
七、過濾層
重排層調整完的物料順序還會再進行一些業務規則和策略的干預,比如電商領域會進行以下的過濾:
1. 未上架過濾
當前已經上架的商品不展示在APP前端。
2. 缺貨過濾
當前已經缺貨的商品不展示在APP前端。
包括還有同圖過濾等等策略。過濾層很多時候我們會做在了粗排和精排之間,確保進入到精排的物料后續都是能夠直接在APP前端展示的,這樣后續的精排和重排層的價值才更高。原本重排挑選出的最優組合,結果全部在過濾層被過濾了,那么整體推薦系統的效果就會大打折扣。
八、APP前端
經過過濾層的物料順序是不會再發生變化,但還是有最后一步工作要做,而很多推薦系統的文章都沒有介紹。就是內容樣式和創意。比如電商平臺里面同樣都是店鋪的內容,到底應該展示哪一種樣式。大家打開淘寶首頁經常會覺得花里胡哨,就是因為內容的樣式太多了。
APP前端選擇最合適的一種內容樣式進行展示,具體關于內容樣式和創意的選擇后續也會有專門文章進行介紹。
經過7個大的環節,推薦系統也就在APP推薦場景為用戶推薦了他可能感興趣的物料。以上就是關于推薦系統架構的一個完整介紹。下一期為大家詳細介紹推薦系統的召回策略,歡迎大家持續關注。
本文由 @King James 原創發布于人人都是產品經理。未經許可,禁止轉載。
題圖來自 Unsplash,基于 CC0 協議
收貨頗豐!想請教一下,內容策略經理(音視頻類產品)實戰中,在進行推薦策略的制定時,具體的顆粒度大概是什么呢?因為要涉及到跟算法工程師的對接