告別1人年,教你21天搭建推薦系統
作者: 盧梭
摘要: 本文作者為阿里云技術專家鄭重(盧梭),主要分享內容是如何在21天內快速搭建推薦系統。推薦系統的搭建是個復雜工程,涉及到實時計算、離線計算,以及各種數據采集、流轉等,對自建推薦系統來說,1人年是跑不掉的。 本文介紹的內容還包括如何搭建一個個性化推薦系統所需的環境準備、基本配置和離線技術等基本功能的搭建。
本文介紹的內容還包括如何搭建一個個性化推薦系統所需的環境準備、基本配置和離線技術等基本功能的搭建,也有效果報表、算法優化和實時修正等高級功能的剖析。
大數據有三個非常經典的應用:計算廣告、搜索、推薦。每一種應用最核心的地方都離不開三個字——個性化。廣告不用說了,計算廣告的基本要求就是要精準,為廣告選擇對其感興趣的目標受眾;搜索可以理解為對搜索關鍵詞的個性化;而推薦,則需要在用戶和物品之間建立興趣關系。推薦的業態比較復雜,有類似淘寶天貓這樣的真正意義上大數據場景,也有很多中小網站、應用,數據量其實并不是很大。阿里云推薦引擎(https://data.aliyun.com/product/re)的初衷,是為了幫助阿里云的客戶、創業者、中小網站,讓他們能夠更好的運營自己的產品或網站。
推薦系統一般包括展現子系統、日志子系統和算法子系統三個部分,三者互為一體。

阿里云推薦引擎(RecEng)是推薦系統的一部分,主要實現的是算法子系統,需要和其他子系統配合工作。使用阿里云推薦引擎分為兩大階段
第一階段:基本功能的搭建
Day1. 環境準備

Day2-3. 數據準備
DT時代的基本要求是數據要能夠“存、通、用”。采集日志,并將其上傳到公共云實現了數據“存”的過程;推薦引擎負責解決數據的“通”和“用”。“用”比較好理解,“通”則指的是所有進入推薦引擎的數據必須滿足推薦引擎所定義的格式規范。推薦有三類數據:用戶數據、物品數據和行為數據,我們定義了這三種表的格式規范,比較簡單,具體細節可以參考:鏈接
那么,如何把數據傳到公共云上來呢?目前主要有兩種方法,一是利用集成在MaxComputeconsole中的Tunnel命令,該命令的缺點只能上傳文本格式數據;另一種方法是定制DataX上傳,DataX作為連接各種數據庫中間的節點,它除了可以作為文本上傳,還可以把各種數據庫打通。DataX的缺點是目前只能在Linux環境下運行。
當然,未必每一個業務的數據都滿足規范的要求,所以還需要做一些格式轉換。DataIDE提供了比較友好的格式轉換界面,還可以把配置好的任務設置為定時任務,每天定時調度;也可以在MaxComputeconsole下直接執行格式轉換的SQL腳本,再利用系統的crontab命令實現定時任務。
Day4-5. 基本配置和離線計算

第一個概念是業務。 在阿里云推薦引擎中,業務指的是一組可被用來進行推薦算法計算的完備數據集,包括物品表、行為表、用戶表這三張表。也可以簡單的認為這三張表就構成了一個業務。
第二個概念是場景, 所謂場景就是推薦的上下文。換句話說,就是在進行推薦時有哪些可用的參數。比如在進行首頁推薦的時候,可用的參數只有用戶的ID;在進行詳情頁推薦的時候,可用的參數除了用戶ID,還可以由詳情頁上展示的物品ID,這樣首頁推薦和詳情頁推薦就是兩個推薦的場景。一個業務可以包括多個場景。
第三個概念是算法流程, 算法流程指的是數據端到端的處理流程,從客戶的輸入數據開始,到產出最終結果為止。推薦算法流程從屬于場景,一個場景可以包含多個算法流程。每個推薦算法流程都包括兩部分,離線計算流程和在線計算流程。離線計算流程負責從原始的業務數據(用戶、物品、行為)開始,計算用戶對物品的興趣,輸出本場景下用戶可能會感興趣的物品集合;在線計算流程實時接受推薦請求,從離線計算流程得到的物品集合中根據業務規則挑選出最合適的若干個物品返回給請求方。一個場景包含多個推薦算法流程這種設定使得我們在做效果對比變的比較容易,后面會介紹A/BTesting,在A/BTesting中,每個推薦算法流程都是一個可被效果指標度量的最小單元。在做完A/BTesting之后,通常只會在一個場景下保留一個效果最好的推薦算法流程。

Day6-8. 推薦API集成

首先需要把離線數據傳上來,可以用前面提到的方法,Tunnel啊,DataX啊,都可以,但是一定要是定時任務,我們總不能每天都去手工執行數據上傳。上傳完成之后首先調用數據預處理API,對數據做一些預處理;然后調用離線計算API,啟動離線計算。待離線計算完成后,通過推薦API就可以實時獲取用戶的推薦結果了。在離線計算的過程中,還可以通過查看計算任務狀態API實時獲取計算任務的狀態,便于及時發現異常。
上圖也展示了我們對推薦服務器的一些基本建議。諸如數據上傳、啟動離線計算這些功能建議由一個相對獨立的數據管理組件來負責;而實時性要求比較高的推薦結果獲取建議由專門的推薦管理組件來負責。推薦管理組件和數據管理組件為什么要有一個交互呢?這是因為從推薦引擎返回的結果中可能只包括了物品的ID,展示時不能只展示一個ID,還有很多材料,這些東西可以放在推薦服務器中,由數據管理模塊負責管理。UI可以提供人工管理數據的界面,比如新錄入了一個物品,或者某個物品賣完了要下線,需要做實時修正時就可以用到了。
這些工作都完成之后,一個具備最基本功能的推薦系統就可以運行起來了。
via:博客園
End.