簡單易懂的現代推薦系統 Recommender Systems

在這個資訊超載的年代,使用者有限的注意力也成為各種串流平台、網路廣告、電商等數位服務的兵家必爭之地。這篇文章將會概略的談論推薦系統常見的幾種方式。

本篇內容節錄自我在 DataCon.TW 2019 講的《推薦系統:從 Data Pipeline 到 Machine Learning》


什麼是推薦系統

推薦系統是一種過濾資訊的系統,用於推測使用者的喜好,藉以達成如提升使用者黏著度或是商品購買率等目標。

對於社群網站、內容網站或是串流服務,使用推薦系統來提升使用者黏著度。例如動態牆貼文的排序演算法、你可能會喜歡的文章/音樂/影片等形式,一方面可能與品牌經營有關,另一方面就是關係到網站上的廣告收益

而其他的電商、訂房網站上推薦系統的成功與否,更是直接與營收相關


推薦系統的常見方式

隨機 Random

隨機雖然可恥但是有用

事實上有用的話一點都不可恥,在某些環境下隨機推薦就可以有一定的成果。特別是如果再採用部分已知特徵後(作者、類別、品牌等),可能會得到很不錯的效果

是一個成本極為低廉的優質方案。

開發難度 ★☆☆☆☆
服務成本 ★☆☆☆☆

最新趨勢 Latest/Trending

在有些情境下推薦內容的即時性非常重要,例如大家都在颱風夜等著停班停課通知,或是大家都不會在意租屋網站上那些放很久且又破又貴的頂樓加蓋租出去了沒有,只想知道有沒有新的房間上架

相較於隨機推薦來說開發成本並沒有顯著的差異,而服務成本可能會需要額外的元件而上升一點點(如架設 Elasticsearch 計算趨勢排行)。

開發難度 ★☆☆☆☆
服務成本 ★★☆☆☆

內容推薦 Content-Based

這個應該是大家十分容易理解的推薦方式。例如看單眼相機就推薦其他型號的相機,或是看了《幼女戰記動畫》於是推薦了《幼女戰記劇場版》之類的。

現有的搜尋引擎(Solr、Elasticsearch)可以輕鬆地做到這件事,只要將資料匯入並使用 More Like This 的功能即可,也可以自行開發查詢的方式。

但是這方法產生一些像是如何維護資料的正確性資料保存期限等衍生性問題。

開發難度 ★★★☆☆
服務成本 ★★★☆☆

協同過濾/行為推薦 Collaborative Filtering

這方法用最直白的方法來解釋的話,其實就是「買了這東西的人也買了什麼」,先歸納出的使用者行為模式,並找出與你相似的使用者依此推薦內容。

像是其他買了單眼相機的人之中,許多都買了相機電池。因此當你要買相機時,就會推薦你相機電池。

這個方式相對的開發起來麻煩了很多,而且也有著無法包含情境、新使用者/新物件冷啟動(Cold Start)的問題。

開發難度 ★★★★★
服務成本 ★★★★☆

機器學習 Machine Learning

許多基於 ML 的方法,都是以向量(Vector)來代表一個物件(Representation),因此只要使用 Cosine Similarity 就能找到最相似的物件。而優點在於可以同時物件內容使用者行為作為訓練資料,藉此產生混合式(Hybrid)的推薦方式。

例如之前的一篇文章就介紹過 Airbnb 的做法,他們因此提高了 21% 的點擊率以及 4.9% 的下訂率

論文選讀—Real-Time Personalization using Embeddings for Search Ranking at Airbnb

雖然有著許多優點,但是相對的成本卻十分高昂。 不管是模型的實驗開發、訓練的運算成本、部署服務的難度等等,因此我比較不建議直接使用這個方法,開發難度與服務成本都是爆表的六顆星

開發難度 ★★★★★★
服務成本 ★★★★★★

總結

不同的推薦方式有各自適用的情境,適當的混合多種不同方式可能得到更佳的效果。因此具統計意義A/B Test 絕對不可少,並且在有些時候參考專家(Domain Expert)的直覺可能會少走很多彎路(在此向那位被團隊成員稱為仙姑的 PM 致敬)。

最後是這領域其實有許多 paper 分享,閱讀時可能會獲得大量的啟發,不看實在可惜。


後記

要發佈的前一刻才發現本來的篇名《淺談推薦系統 Recommender Systems》已經有人用過了,只好再回來改名。

如果喜歡這篇文章的話歡迎拍手、追蹤加分享,有什麼想討論的也可以在下方留言。我們下回見,掰掰。(Youtuber 語調)