2024 領航計畫已開放報名,請點擊後查看報名資訊
前往 Medium 閱讀好讀版

Source: macrovector

機器學習在推薦系統上之應用

活動主辦單位:Taiwan Data Science Meetup 台灣資料科學社群

大綱

  • 排序及推薦系統介紹
  • 機器學習工程師例行工作舉例
  • 如何準備成為一名機器學習工程師
  • Q & A 精選

講者:Brad Li| 機器學習軟體工程師 Software Engineer — Machine Learning @ Facebook

講者背景

Brad Li,目前在 Facebook 擔任機器學習工程師;主要負責 Facebook 中影片 (Facebook Watch) 推薦系統的模型演算法。先前在 Linkedin 負責用戶搜尋排序演算法;更之前在 Medallia 負責自然語言處理(NLP) 模型訓練。

排序及推薦系統介紹

  • 推薦系統分兩類
    1. Search engine:用戶搜尋結果排序 (例如Google、Linkedin)。演算法需要把三個元素(使用者、使用者的查找關鍵字、搜尋結果 — 物件)連結起來。
    2. Feed engine:例如臉書的塗鴉牆。我們想要達到的結果是與使用者愈相關的物件排愈上面。臉書塗鴉牆和搜尋引擎不同處在於沒有查找關鍵字(query),僅基於對使用者的了解來決定推薦物件。

Search engine(如下)

Feed engine(如下)

  • 在 Feed engine 中,要怎麼樣讓與使用者愈相關的物件排愈上面呢?在機器學習中,常用的是使用者行為回饋(User Implicit Feedback):隨著呈現給使用者許多物件,從使用者的反應,讓系統學習預測使用者的行為。
    1. 使用者正面回應:送出交友邀請、送訊息、分享文章。
    2. 使用者負面回應:沒有任何行為、舉報。
  • 如何訓練模型排序
    1. 將資料(搜尋出來的物件)以及使用者相對應的行為標上標籤(Labeling)。以 Linkedin 的例子來說,搜尋出來的物件就是個人檔案,使用者行為包括送出邀請、訊息等等。
    2. 有了這樣的資料,訓練模型優化使用者黏著度(User engagement);並以使用者黏著度的衡量指標(例如 DAU、MAU、點擊數、分享數等等)來衡量。
    3. 有時不易直接訓練模型去優化使用者黏著度,就找個代理指標(proxy,介於中間的 matrix),這代理指標和我們最終想要的結果高度相關。
    4. 模型訓練作法分三種(如下):
    a. Pointwise:把搜尋出來的每一個物件視為獨立資料,類似傳統的監督式學習(supervised learning)。
    b. Pairwise:把搜尋出來的物件,依照使用者回應分成正面、負面兩類。訓練模型給正面的樣本高分,負面的樣本低分。
    c. Listwise:更直接,因為我們在乎的就是排序。讓模型預測,把正面/愈相關的樣本排愈上面愈好。

  • 使用者、物件各有什麼特徵可用來訓練模型:
    1. 使用者:
    a. 人口統計學類別:年齡、性別、國籍、語言、使用者分層、使用者目的。
    b. 使用環境類別:使用者裝置(手機、筆電)、週間或週末、一天中什麼時段、節慶假日、使用者是用戶或訪客。
    c. 使用者過去行為類別:點閱率、搜尋或瀏覽歷史。
    2. 物件:
    a. 物件的品質:點擊率、廣告/垃圾郵件分數。
    b. 分類:主題、作者。
    c. 時事:最近發生的時事、話題,文章是否剛出爐(recency)。
    d. 嵌入向量(embedding):文字、圖像
    3. 使用者-物件:
    a. 使用者-主題 相似度
    b. 嵌入向量相似度
  • 模型:
    1. 協同過濾:有一個非常大的使用者-物件評分矩陣,得出使用者-物件嵌入向量。
    2. 以內容為基礎的過濾:基於使用者及物件的特徵來建模型。包含以規則為主的系統(rule based)、梯度提升樹算法(Gradient Boosting Decision Tree,GBDT)、神經網路(Neural Network,NN)。
  • 系統架構:
    假設有 10 億個臉書塗鴉牆,依照算法給這 10 億個塗鴉牆分數及排序;但算完需要 5 秒,那麼使用者可能在結果出來之前就離開了,使用者覺得這 app 實在太爛了。應該要怎麼做才好呢?

Step 1(如下):假設訓練好了一個效果很好,但比較複雜的模型,我們先不用它,先用一個相對簡單(light-weight)的模型,找出我們覺得與這個使用者較相關的物件。這個相對簡單(light-weight)的模型可能是以規則為基礎的(rule based),例如優先選取這個使用者朋友的朋友的塗鴉牆。那麼可能就從 10 億個變成幾萬個;訓練好的複雜的模型只需要給這幾萬個模型評分,以減低延遲(latency)。

Step 2(如下):如果物件數量還是太大,假設 10 萬個;可以把複雜的模型放在第二層(second stage),第一層先用比第二層簡單一點的模型排序。較複雜的模型只針對第一層前 1000 個物件再排序。就這樣,整個流程像漏斗,每一層物件的數量愈來愈少,每一層所用的模型愈來愈複雜。

Step 3(如下):最後一層放一些其他的規則過濾,因為模型畢竟不是萬能。例如:

  • impression discount:上次給使用者看過的東西,這次不會再出現。
  • Diversity:通常愈相關的排愈前面,那麼塗鴉牆前十個物件都是很相關,但內容幾乎一樣的東西,使用者看了很煩,也無法接觸到新內容。
  • 另外一個例子是挑出垃圾訊息,例如內容農場的文章,裡面有關鍵字,但是內容很差。

這些較例外、繁雜的規則都是模型不容易學到的,通常會另外處理。

機器學習工程師例行工作舉例

1. 和產品經理、資料科學家討論,設定目標

2. 根據目標,制定行動計畫

a. 根據所需的付出及預期的影響,排定優先順序

b. 訂出20項,最後可能做3項

c. (選擇性)舉行會議,和合作夥伴達成共識

3. 了解資料

a. 訓練模型所需要的資料在哪裡?如何取得?

b. 資料中每一欄位所代表的意義為何?所要的資料是怎麼得出來的?得出來的方法是不是我們所要的?

4. 建立資料管線(training data pipeline),這些資料供訓練模型使用

5. 建立(機器學習)模型

a. 檢視論文、部落格、公司內其他成功案例,同時考量複雜度

6. 訓練模型。等待結果的時候做:

a. 和其他合作夥伴或者團隊成員開會

b. 面試

c. 其他

7. 檢查模型結果 (視結果而定,可能需要回到第3.4.5或6步)

8. 模型上線,做A/B 測試 (在使用者實際使用狀況下,模型的結果有沒有比較好。可能需要回到第3.4.5或6步)

9. 發佈模型 (如果還有其他項目要做,可能需要回到第3步)

如何準備成為一名機器學習工程師

  • 第一步仔細看工作職稱。現在機器學習、資料科學很熱門,職稱很多,但做的事情很可能不一樣,大多分兩種。
    1. Hybrid:機器學習工程師要訓練模型、要上線模型;不只要做線下(off-line)的工作,線上(on-line)的 A/B test 也要做。
    資料科學家在這種公司就是分析資料、提供解讀。
    例如Facebook、Linkedin。
    2. Decouple:線下的訓練模型、上線之後的工作,是不同人做。
    Applied (Data) Scientist:建模型。
    機器學習工程師:處理模型上線之後的事情。
    例如亞馬遜。
  • 面試通常分四個環節:
    1. 寫程式:論壇上通常都有很多分享。
    2. 機器學習系統設計(時間限制:45分鐘):比較少人講,我今天分享多一點。
    3. 行為問題:人際技巧。有些有鮮明公司文化的公司會問。
    4. 過去的工作經驗:有些公司會問。
  • 機器學習系統設計大原則:
    1. 先廣度;先把模型每一個項目(component)都列出來。有些面試者可能先講特徵,講一講20分鐘過去了,這樣是比較不理想的面試表現。應該先完整的涵蓋模型的每一面向。
    2. 要提出一個以上的選項,討論每個選項的優缺點。
    3. 引導討論。
  • 機器學習系統設計主要元素:
    1. 北極星指標(衡量模型成功與否的指標)
    2. 標籤
    3. 特徵(用什麼樣的特徵模擬機器學習模型的排序;前面提過,這裡不提)
    4. 資料/數據
    5. 模型
    6. 線下評估
    7. 線上應用
  • 北極星指標(True north metric):
    到底要怎麼衡量這個模型上線之後成不成功;如果不容易直接衡量,要找代理指標(proxy indicator)。例如我們要設計一個推薦用戶他/她可能認識的朋友的系統,代理指標可以是送出的邀請數量、邀請被接受的數量。
  • 標籤(Label):
    要找出可以模擬北極星指標(True north metric)或者代理指標的標籤。例如北極星指標(True north metric)是被接受的邀請數量。
    以二分法來貼標籤:
    1. 正面標籤:被接受的邀請。
    2. 負面標籤:沒有被接受的邀請。
  • 模型:
    1. 常見的有協同過濾或是以內容為基礎的推薦。
    2. 訓練模型排序的方法:單點、成對、排序。
    3. 要用哪個模型?
  • 線下的衡量指標(要用什麼樣的衡量指標來衡量這個模型成不成功?)
    1. AUC:指在 ROC 曲線(Receiver Operator Characteristic Curve,接收者操作特性曲線)之下的面積(Area Under Curve)。面積大於 0.5 表示模型效果優於隨機猜測,面積愈大代表模型愈有效。
    2. AUC(PR):在 PR 曲線(Precision-Recall Curve,精確召回曲線)之下的面積。精確召回曲線以召回率(Recall)為X軸,精確率(Precision)為Y軸。一般來說,精確率與召回率越高,代表模型的效益越高,也就是PR曲線,越往右上方靠近越好。
    3. 排序依據:
    a. NDCG(Normalized Discounted Cumulative Gain):給予不同相關程度的物件不同分數。
    b. MRR(Mean Reciprocal Rank):第一個正確答案排序平均。把第一個正確答案出現的排序,取倒數;即評量第一個正確答案多早出現,越早越高分。
    c. Recall@P90:精確率為 90% 的情況下,召回率(模型能夠判斷出相關物件的比率)
  • 模型上線之後:
    1. 如果延遲太久?解決方法包括
    a. Model compression
    b. Feature selection
    2. 如果不像在線下一樣好?解決方法包括
    a. 看看線上和線下所使用的 feature logging/computation 是否一致。
    b. Data distribution shift:線下訓練模型用的數據,跟上線之後遇到的數據,分佈是不一樣的,所以模型結果不同。例如因為時間不同,所以遇到不同分佈的數據。
    3. A/B test 相關問題
    a. Size
    b. A/A test
    4. Metric discrepancy

Q & A 精選

Q 1:Data distribution shift 如何解決?例如上線時是復活節假期,那麼要怎麼解決?

A 1:找出 distribution 到底差多少,看 label distribution、feature distribution 到底差多少。如果真的差很多,解法一:在別的時間再跑一次;例如訓練模型用的資料是在假期期間,但假期期間不夠有代表性,那麼就在非假期期間再訓練一次。解法二:模型上線之後定期會重新訓練,重新訓練也有技巧。例如 incremental learning,每週重新訓練(fine-tune),但用的是之前訓練的模型來做初始化(initialization)。

Q 2:想請教 Brad 在結合用戶行為時間序列(Click -> Add To Cart -> Click -> Search …)及物件語言(商品, 文章, profile, etc.)兩種 embedding 作為 input 訓練推薦模型,過去有沒有相關實作案例、效果和優化方向能分享,感謝!

A 2:來看剛剛 feature 的介紹(如下),前三樣很直覺,第四樣是 embedding。現實中,一個模型的 input 常常是別的模型的 output,是別的模型的 embedding。這個 embedding 怎麼訓練?可能有千萬種方法。

以剛剛的例子來說,把每個用戶的 journey 建構成時間序列,預測這個用戶下一步會做什麼。另外商品、文字也可以當作 embedding,也可以訓練一個模型,擷取文章中的關鍵字,用這些關鍵字訓練模型,這是蠻常見的。

Q 3-1: 我也是做影片推薦系統,一般最關注的是點擊率(click through rate,CTR),或每人平均觀看時間;上線之後做 A/B testing,CTR 往上,但是每人平均觀看時間往下,該怎麼評估?

A 3-1:這個問題 Data Scientist (DS) 會比較了解。理想的狀況是只有一個 Topline metrix,只追蹤它就好。但如果我們有一個以上的 Topline metrix,而且它們還互相衝突;這通常要和 PM 討論,要看策略上,長期哪個比較重要。DS 相關的朋友會比較了解 。

Q 3-2:剛剛提到在做 candidate generation時,因為後面還有兩層的排序,所以我理解它的精確性沒這麼高;想請問若是新開發出來一個 candidate generation 的方法,有沒有 metric 來判斷它的優化程度?

A 3-2:線下只要不要太差,最後我們在意的還是上線之後的結果。不過一般來說大公司的基礎建設比較成熟,上線的成本不高;但中小型公司要上線前必須說明這個模型的成效。

線下跟線上 metric 不一致是很常見的問題,只能做一些分析。例如,4 個線下的 metric 中,某 2 個跟線上的北極星 metric 比較像,而這模型在這 2 個 metric 的表現很好等等;這樣可能比較有說服力。

Q 4:在求職方面,MLE 跟 DS 有 Hybrid 跟 Decouple 的狀況。有些公司的工作職缺說明也寫得不太清楚,請問遇到這種狀況怎麼處理?

A 4:這樣的狀況是常有的,各式各樣的職缺可能都會提到資料科學。看完職缺說明應該要有個概念,是跟建模、分析、資料整理等等哪類比較相關。如果真的不清楚,和招聘經理聊一下,互相了解。總結,仔細讀職缺說明,或是和招聘經理聊聊。

Q 5:想請問 video based 的推薦,會比較著重在將 video 抽取重要特徵當作 item feature,並後續給其他 Deep Factorization Machine 相關的模型與使用者特徵進行建模,還是會比較著重在類似 image(video) retrieval 相關的技術?

A 5:Video retrieval 應該也會用到 visual signal。我猜這題要問的是,是 engagement feature(例如使用者看了多久)重要,還是 visual / text feature(例如標題有哪些關鍵字,影像有哪些內容)重要。

簡短的回答是,兩個都重要。例如標題就寫 Stephen Curry 三分球,不用看就知道這影片是有關什麼。但有時標題沒寫這麼清楚,就需要看內容;或是這個 video 被很多人舉報,就算內容很相關,也不適合推薦給大家,這是一個重要的 engagement feature。各個 feature 都很重要。

Q 6-1:如何處理資料變化很快的問題,比如 feed,若突然有事件發生就會大量出現的狀況,是會用 online update 的做法去處理嗎?

A 6-1:feed 這種隨時突然有事件發生就會大量出現的狀況,會有recurring training。

Q 6-2:如果是 deep learning 的模型,這部分又會怎麼處理?

A 6-2:Deep learning model 就可以繼續調整(fine tune)。

Q 6-3:另外還有 item 增加速度很快,會怎麼處理冷啟動的問題。

A 6-3:冷啟動的話,一般有以下處理方式(如下)

content based feature 是處理 cold-start item。若是一個新物件(假設是 feed post)剛上架,點擊率是 0,但我們可以看看這篇 post 包含哪些文字圖片(content-based feature),預測哪些使用者可能會感興趣,來推薦給那些使用者。

cohort based feature 是處理 cold-start user。有新的使用者剛加入,因為沒有他/她的行為紀錄,不好做個人化 (personalization);但是我們仍然有一些使用者特性,例如年齡、性別、職業、居住地等等(cohort-based feature),就可以找出類似這個使用者的群體的喜好(例如同樣都是居住在台灣的 20–30 歲人群喜歡的東西),來推薦給這個使用者他/她可能感興趣的東西。

其他機器學習的方法如 Multi-armed bandit:用 exploration and exploitation 的方式推薦。

Q 7:做 watch recommendation 是用 live prediction 還是 batch prediction呢?為什麼選其中一種而不是另外一種?經歷過什麼取捨?

A 7:都有。有些比較複雜的會在線下先算好。另外有些比較複雜的model(像BERT),就算想要在線上算,也算不了;只能線下先算好,存起來,上線之後想要評估影響,再去拿。

筆手:Danielle Wu
校稿:Brad Li
👉 歡迎加入台灣資料科學社群,有豐富的新知分享以及最新活動資訊喔!

資料科學協會

資料科學協會

社群分享筆記 更新紀錄

Copyright 2020-2024 資料科學協會 All Rights Reserved.

本網站由 資料科學協會 維護