活動主辦單位:Taiwan Data Science Meetup 台灣資料科學社群
大綱
講者:Brad Li| 機器學習軟體工程師 Software Engineer — Machine Learning @ Facebook
講者背景
Brad Li,目前在 Facebook 擔任機器學習工程師;主要負責 Facebook 中影片 (Facebook Watch) 推薦系統的模型演算法。先前在 Linkedin 負責用戶搜尋排序演算法;更之前在 Medallia 負責自然語言處理(NLP) 模型訓練。
Search engine(如下)
Feed engine(如下)
Step 1(如下):假設訓練好了一個效果很好,但比較複雜的模型,我們先不用它,先用一個相對簡單(light-weight)的模型,找出我們覺得與這個使用者較相關的物件。這個相對簡單(light-weight)的模型可能是以規則為基礎的(rule based),例如優先選取這個使用者朋友的朋友的塗鴉牆。那麼可能就從 10 億個變成幾萬個;訓練好的複雜的模型只需要給這幾萬個模型評分,以減低延遲(latency)。
Step 2(如下):如果物件數量還是太大,假設 10 萬個;可以把複雜的模型放在第二層(second stage),第一層先用比第二層簡單一點的模型排序。較複雜的模型只針對第一層前 1000 個物件再排序。就這樣,整個流程像漏斗,每一層物件的數量愈來愈少,每一層所用的模型愈來愈複雜。
Step 3(如下):最後一層放一些其他的規則過濾,因為模型畢竟不是萬能。例如:
這些較例外、繁雜的規則都是模型不容易學到的,通常會另外處理。
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步)
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
👉 歡迎加入台灣資料科學社群,有豐富的新知分享以及最新活動資訊喔!