天天看點

實時個性化推薦系統簡述

傳統的個性化推薦系統,都是定期對資料進行分析,然後對模型進行更新,進而利用新的模型進行個性化推薦。由于是定期更新模型的,推薦模型無法保持實時性,推薦的結果可能不會非常精準。

例如網易雲音樂的使用者,假如使用者這會兒無意中聽到了一種曲風,覺得這種曲風很好聽,連續聽了好幾首這樣子的歌曲。如果我們的推薦系統沒有做到實時性,那麼給使用者推薦的依然是他過去愛聽的,無法立即推薦給使用者他剛剛聽的那些歌的曲風,這就沒有很好的符合使用者的需求。

再舉個例子,比如使用者新通路一個網站,如果網站能夠做到實時性,就可能根據使用者通路網站的這一小段時間内的行為給使用者推薦到使用者需要的資訊。

實時性很大的好處在于,一方面更準确的為使用者進行推薦,另一方面是使用者可以根據實時性的推薦結果更快進行回報,進而可以對推薦模型進行盡快更新,使得推薦模型更加精确。

實時個性化推薦系統,與傳統個性化推薦系統,不僅在算法上有部分差别,更主要是系統架構上有很大差别。

首先在算法上。由于實時性的要求,使得算法本身在實時計算的部分不能太複雜,否則無法快速得到結果。在算法設計上,可以将推薦算法拆分成兩部分——實時部分和離線計算部分。可以利用離線部分将算法中可以離線計算的部分盡可能多的預先計算好,一般是資料量大并且是複雜的全局計算模型。然後将少量的增量更新計算留給實時計算部分,一般是輕量級的指定使用者模型訓練或者更新邏輯。

對監督式學習,傳統的分類方法不太合适,Matrix Factorization的方法是一個較好的方法,因為它的部分因子可以預先離線計算,其他部分可以實時增量更新來擷取最新的結果。

對無監督式學習,一般指聚類,也是可以提前離線計算出聚類的中心的,然後供實時計算使用。

 然後講一下架構。下圖是NetFlix的實時推薦系統系統架構圖。

實時個性化推薦系統簡述

 系統被分為3部分, online,nearLine和離線部分(offLine)。Online和nearLine部分一起認為是實時部分。

離線部分就是傳統的個性化推薦系統的主體,定期将大量存儲的資料拿出來進行批處理運算,然後對模型進行建立與更新,這裡就不詳細介紹了。

nearLine部分,是将使用者産生的事件,利用流式計算得到一些中間結果,這些中間結果一方面發送給online部分用于實時更新推薦模型,另一方面将中間結果存儲起來,例如存儲在MemCached、Cassandra、MySql等可以快速查詢的存儲中作為備份。在NetFlix的系統中,他們的流式計算是通過一個叫做NetFlix.Manhattan來實作的,它是一個類似于Storm的實時流式計算架構,隻是針對他們自己的應用有一定的特異性,不是通用的實時計算架構。

然後是online部分。這一部分利用離線部分的主體模型并考慮nearLine部分的實時資料對模型進行增量更新,然後可以得到一個實時的推薦模型,進而根據使用者的行為來對使用者進行實時推薦。

個性化推薦系統架構的關鍵問題,就是如何以無縫方式實作線上和離線計算過程,說到底,也是算法的設計,如何将算法的計算步驟合理配置設定到各個部分,使得得到的模型既可以非常準确,又可以快速計算出來以滿足實時性的要求。

轉載位址:http://backend.blog.163.com/blog/static/20229412620136553130281/

繼續閱讀