你也注意到了嗎?我們無時無刻都在「被推薦」
想聽音樂,Spotify 會幫你整理好專屬的 Daily Mix 音樂合輯;想看影片,Netflix 會幫你篩選適合於你的電影或影集;想玩遊戲,Google Play 商店會根據不同主題推薦你有趣的新遊戲。但你有想過這些優質推薦的背後,都是怎麼做出來的嗎?
這堂 TensorFlow 推薦系統課程,由 Google Cloud 合作夥伴 CloudMile 萬里雲的講師主講,在六個小時的時間裡,從傳統的推薦系統演算法、機器學習的基本概念、講到如何應用深度學習來實作推薦系統
對於稍微有點基礎的同學,我認為是一個非常棒的概念整理,讓你可以在短時間之內,了解整個脈絡,並透過 TensorFlow 的範例程式,學習如何套用到實際問題。至於微積分、線性代數基礎較不好的同學,其實也不用擔心聽不懂,只是針對一些公式推導,就要另外花時間研究囉
以下我會大致介紹一下什麼是推薦系統、為什麼可以透過深度學習強化推薦系統,接著分享一些與深度學習相關的學習資源,讓有興趣的朋友們參考
什麼是推薦系統
推薦,其實就是在預測你可能會喜歡的東西
假如今天有一群朋友要去看電影,而你已經把預告片、網路評論都看完、也知道朋友們的觀影喜好,如果是你,會怎麼推薦他們呢?
是不是會考慮到朋友的個性、他過去的電影口味、電影的類型適不適合、或者可能會因為 A 朋友跟 B 朋友性格類似,而推測他們可能有相似的喜好?
你怎麼想的,推薦系統也大概就是這麼做的,背後的出發點不難,主要是根據影片內容、使用者的基本資料 (Content) 或使用者觀影紀錄、行為 (Behaiver) 來做推薦,也就是以內容為主的內容過濾 (Content Filtering),以及聽起來很炫的協同過濾 (Collaborative Filtering)
內容過濾很好理解,其實就是根據既有的用戶與影片資訊來做推薦
比如我們已知有一位 16 歲的小男孩,喜歡看動作片,我們就可以基於這項資訊推薦他觀看非限制級的動作電影。雖然這個方法很簡單,但實際上你很難取得用戶的個人檔案,多半需要慢慢的從用戶身上挖掘
所以比較厲害的 Collaborative Filtering 來了!這個方法是基於用戶或電影的關聯性來做推薦,他不需要詳細的用戶個人檔案,只要從一群用戶的觀影紀錄、評價紀錄就能推估出某個用戶的喜好
舉例來說,你朋友常看推理卡通《名偵探柯南》,而你除了看這部片之外,還會看其他推理劇如《偵探伽利略》、《新世紀福爾摩斯》,因此根據你這個案例,你朋友很可能也會喜歡你看的這些推理劇
那實際上要怎麼算出來呢?
Collaborative Filtering 中有一種 Memory-based 的方法,透過相似度來做推薦。我們會把用戶與電影間的關係變成一個矩陣,你可以想像是把這些資料投影到一個平面地圖上,每當你看過某些電影,就像是在地圖上的景點打卡,並隨著你的觀影歷程繪製出移動軌跡。假如,在地圖上發現有其他人也跟你走出相似的路徑,去過相似的景點,那麼你們兩人產生的景點差距肯定相當的小,這也代表著你們兩人很相似。數學上,我們會把用戶的觀影喜好轉為向量,透過諸如 Consine Similarity 的方式,計算出用戶間的向量的相似度
舉個之前參加黑客松比賽的例子,我們做了一個行程推薦系統,其背後的概念是「人格特質與消費習慣相似的人,應該會有相似的旅遊喜好」,所以根據這樣的前提,我們結合了銀行掌握的使用者基本資料、消費紀錄,再加上個人財務狀況與喜好興趣,推薦旅客合適的旅遊行程
概念上聽起來很容易,但實際在計算矩陣的時候,並沒有想像中美好,有些使用者可能沒有對某些影片作出評分、有些旅客可能沒有做過評價,導致我們的矩陣中有缺失的資料
然而 Memory-based 的缺點是容易有資料稀疏的問題,有些使用者可能沒有對某些影片作出評分、有些旅客可能沒有做過評價,導致我們的矩陣中有缺失的資料,所以通常大家會採用 Model-based 的做法,把原本的矩陣拆解成兩個矩陣相乘
用 Latent Factor Model 這種方式,我們可以先忽略那些缺失的數值,只要想辦法找到兩個矩陣,使得他們相乘的結果越接近原本矩陣越好。這麼一來,我們就好像是把矩陣根據某些 Factor 拆開,這些因子可能是電影類別 (喜劇、懸疑、動作…) 或是用戶性格 (活潑、內向、…) 等等。以下是上課的投影片截圖
而這種找到兩個相乘,找出誤差最小的計算過程,剛好就是透過梯度下降 (Gradient Descent) 尋找最小誤差,也是深度學習的基本精神,因此我們可以把推薦系統問題拿到深度學習的領域來解決,好像又是另一個天地了呢 XDD
透過深度學習來製作推薦系統
為了讓大家了解深度學習是如何應用在推薦系統上,不免要從頭複習一下機器學習、深度學習的基本概念、並透過 TensorFlow 實作 DNN (Deep Neural Network)
詳細的內容我就不介紹了,關於機器學習與深度學習的教學資料,網路上有非常的多,想要深入了解的朋友,可以參考以下這些連結:
- 深度學習 Deep Learning:中文學習資源整理
- Deep Learning Courses | Coursera
- Google Machine Learning Crash Course
- Kaggle Deep Learning Tutorial
這邊比較值得提的是該如何運用現有資源來建置應用服務
比如你可以運用 Google 的免費資源,像是使用基於 Jupyter 的協作平台 Google Colab、或是透過 Cloud DataLab 搭建自己的訓練環境。當你練好模型後,可以透過 Cloud ML Engine 代管服務部署至雲端成為後端服務,或是利用最近剛出的 TensorFlow.js 直接跑在瀏覽器上,用戶只要打開瀏覽器就能使用你訓練出來的模型,是不是很潮很酷呢 XDDD
課程上的範例直接跑在 Cloud Datalab,如果你也想跑跑看,可以點這裡進入建置教學頁面,Google 有提供 300 元鎂金的額度讓你玩耍
整堂課聽下來,我是覺得介紹的挺清楚的,但是從其他學員的提問之中,我也可以感受到初學者的一些困惑。比如我是個電商老闆,學會這套理論之後,該如何用,該如何幫我賺到更多錢?又比如我只是想聽聽技術,那麼我學完之後,又該怎麼應用在自家的系統之中?
我想在這個網路爭霸的時代,大家都想成為大平台,都想要用戶、想要流量,也使得資料、平台、用戶三者之間的關係錯綜複雜,許多平台靠資料賺錢,用戶貢獻資料來換取免費的服務,也就變成所謂的:羊毛出在狗身上,豬來買單
人們為什麼願意呢?就人心而言,你總是喜歡看見自己喜歡的東西,喜歡活在同溫的世界中吧?
你該佩服的不是免費服務,而是勾起你黏在平台上的內容、與精準的推薦,所以,別找藉口了,還不趕快來學學怎麼建置推薦系統 (誤XD)