TechPulse 2019 – Timeline Post Recommender System 議程回顧

以通訊軟體為核心,LINE 持續發展圍繞用戶生活的各種服務,同時也抱持著開放的態度,積極與不同的平台或開發工具串聯。因此,我們鼓勵、更贊助 LINE 的工程師參與各式各樣的外部研討會,激發更多創意或合作的可能性,並於會後撰寫見聞,分享給 LINE Engineering Blog 的讀者們。

《LINE 強力徵才中!》與我們一起 Close the Distance 串聯智慧新世界 >> 詳細職缺訊息

LINE TAIWAN TECHPULSE 2019「Timeline Post Recommender System」議程講者 – JiHong Lee

大家好,我是 LINE 台灣資料工程團隊成員 – Johnson Wu,負責將機器學習應用於各開發專案的研究及支援。很幸運能參與在去年舉辦的 LINE TAIWAN TECHPULSE 2019、分享關於台灣資料工程團隊的機器學習應用專案,並有機會參與 LINE 貼文串推薦系統議程的講者 – JiHong Lee 的媒體訪談,從機器學習跟數據科學的觀點,介紹 LINE 貼文串的推薦系統。同樣身為機器學習工程師,很榮幸可以從眾多資料難題出發,到逐一突破挑戰、獲得極佳成效的推薦系統課題,這樣的開發過程也很值得套用在每個需要機器學習應用的專案當中!

貼圖串推薦系統 (Timeline Post Recommender System)

投影片

LINE 的眾多服務都是環繞著使用者的生活所設計,LINE 貼文串就是其中之一,這個服務可以提供用戶紀錄或分享以任何媒介 (包含文字、貼圖、影片等) 為內容的貼文;是一個類似於開放性社群網站的服務。但單純為使用者提供一個社群平台顯然是不夠的,能選擇性地將貼文曝光給有關聯或有興趣的用戶,才是更吸引人的地方,這樣的功能也就是我們熟知的個人化推薦,而在 LINE DevDay 2019 和 LINE TAIWAN TECHPULSE 2019 中,LINE Corporation Timeline 團隊透過「Timeline Post Recommender System」議程,分享如何應用機器學習的理論來實現 LINE 貼文串的推薦功能。而我則透過本文整理其中的精華,希望能幫助更多讀者了解 LINE 貼文串背後的強大機制。

本議程的講者是 JiHong Lee,目前擔任 LINE Plus Data Science Dev Machine Learning Engineer,在議程中提出了 LINE 貼文串推薦功能,在處理大數據時所面臨的數個挑戰.首先,從傳統的推薦方法來分析,是重視用戶間行為興趣的相似程度來推薦的 collaborative filtering 適合,還是考量貼文內容本身與用戶相似程度的 content-based filtering 比較適合? 而從 timeline 的角度來看,用戶對於一篇貼文的行為相似程度,只能反映在是否點擊或 “點讚“ 了該篇文章 (一個點擊 (1) 或不點擊 (0) 的表示),跟我們平常針對 collaborative filtering 擁有級距式的評分 (以 1~5 分表示喜好程度) 是相對粗糙的。

同時,因為一個人看過的貼文數量,往往遠少於整個貼文群母體,所以表示成一個使用者對所有貼文是否點擊的特徵向量,會變得非常稀疏 (sparsity > 99%),也就是會有很多貼文 (Content) 是使用者不曾點擊過的 (只有 0)。針對這個難題,Timeline 團隊並不偏向任何一個方法,而是針對資料的分佈提出使用 user embedding 的方式來解決,因為 embedding 可將稀疏的矩陣表示成固定維度的特徵,也可以把 binary (1/0) 的結果轉變成在多維空間上有距離意義的數值表達,這樣一來,使用者間的相似度便可透過計算 user embedding 的相似度來達成。另一方面,embedding 也能將使用者跟貼文間的關聯性皆納入考量。

然而,這裡其實又衍生出一個難題:既然原本的資料已經是稀疏的了,再轉化成 user embedding 也會再度受到影響 (因為資料太稀疏,產生的向量有時很難正確表達該使用者行為),所以團隊轉而朝向用 content embedding 來組合出 user embedding的表達,也就是訓練豐富的貼文串語料,來產生針對貼文本身的 post embedding (這部分是先計算貼文串點擊的 co-occurance matrix,也就是貼文 p1 被一位使用者點擊時,貼文 p2 也被同一個使用者點擊的次數,再進行 PCA 降維得到),如此一來,對於一個使用者的 user embedding,就可以透過線性組合該使用者點擊過的 post embedding 來表示。而一個簡單的推薦情境便可透過計算 user embedding 跟 post embedding 的相似程度來判斷是否該將這篇文章推薦給使用者了!

在完成貼文串訓練的機制後,如何讓模型可持續訓練並優化是同樣重要的課題。Timeline 團隊一樣面臨了推薦系統持續優化時會碰到的問題,第一個問題是優化使用的新訓練材料不能包含將模型推薦給用戶後、用戶點擊的結果,這樣會讓模型狹隘的認定使用者只有這種點擊偏好,而缺少了推薦更多元內容的目的 (biased),團隊針對這項挑戰,則是嘗試從新的點擊結果中,取出並非因推薦而點擊的紀錄當作新的訓練材料。如此一來,每次訓練的點擊貼文,都會是 user 實際上未經推薦的情況下自然點擊的。

第二個難題則是個人化的評測 (evaluation),Timeline 團隊嘗試將評測對象從整體推薦結果,改成先針對個人化推薦結果評測再平均的概念,也就是從以往計算所有使用者是否有點擊所有推薦文章的 AUC 值,改成先計算一個使用者是否點擊推薦文章的 AUC 值,再平均所有使用者數量,這樣對於解釋個人化推薦結果是比較合理的。

而隨著訓練資料如上所述不斷增加,針對如何減少模型在 inference pipeline (Model Architecture) 上的計算複雜度,團隊也提出以 candidate generation 及 ranking 的機制達成。具體作法是,預先訓練好近 30 天內所有貼文串的語料之後,將所有使用者的 user embedding 建立成庫,可以在 inference 當下去尋找 nearest-neighbor,比起不斷計算每篇 post 和每位使用者之間的相似度,透過排序最相鄰使用者的方式是更有效率的。這樣我們可以透過相似使用者的排序,間接得出與之最像的使用者,也非常有可能點擊這篇 post。

當然,為了追求更好的預測效果,團隊嘗試增加 candidate pool size,也就是將更多可推薦的貼文群加入訓練。因為目前訓練用的貼文群僅涵蓋過去 30 天內所出現的貼文,如果能將 31 天前的貼文也一併納入,便可增加可推薦的貼文群。但在資料越來越多的情況下,如何在不增加訓練負擔的前提下完成這項任務呢? 團隊利用已經訓練好的 post embedding,透過正交矩陣在向量空間上的平移/翻轉特性,將不同時間訓練的 post embedding 轉移到當下訓練好的 post embedding 空間,如此一來,超過 30 天前的貼文,便可以被列入推薦的考量中,以進行前面提到的 inference pipeline。

總結

Jihong 帶來的分享,從解決一個處理巨量資料時所面臨實務問題出發,接著分享如何依據資料特性找到適合的處理方式,進而針對應用採用最佳模型與評測方法,Jihong 的分享涵蓋了完整的流程,從各種不同的面向為我們帶來啟發。

最後,很榮幸能在 LINE DevDay 2019 和 LINE TAIWAN TECHPULSE 2019 中參與 Jihong 的議程分享並當面進行對談,在 LINE Timeline 的服務中還有許多人工智能可以發揮特色的功能,讓我們拭目以待!