機器之心專欄
作者:湯斌
本文是美圖高級算法專家湯斌的一篇文章,重點介紹了社交網絡背景下推薦算法面臨的挑戰,以及應對的方法。
在美圖公司社交戰略部署下,推薦算法存在多方面的挑戰,為了解決這些挑戰,我們團隊從工具和算法兩個方面分別開展了工作。
在工具上,我們開發了 MML 機器學習平臺,提供從數據分析到模型在線服務的全流程開發及部署支持。基于 Tensorflow,我們內部自研了 Bamboo 建??蚣?,提供了豐富的 SOTA 模型,常用 Layers 以及其它建模所需的組件,模型離線評估等,讓算法工程師專注網絡結構的設計。
在算法上,我們將推薦排序的演進劃分成四個階段,從線性模型+大規模人工組合特征,到非線性模型+少量人工特征,再到深度學習模型+用戶行為序列特征,最后是從單目標優化到多目標優化。推薦排序四個階段的演進,又可以歸納為三個方面的工作,分別是模型優化、特征工程,以及多目標優化。
在過去的一年,我們在美拍,累計提升人均關注 65.06%,人均時長 56.07%。美圖秀秀,累計提升人均關注 14.93%,人均時長 10.33%。在這一年的實踐中,我們進行了很多的嘗試,在這里也和大家分享我們過去的一些嘗試和踩過的一些坑,希望能讓大家有所收獲。
推薦算法的技術挑戰
目前,美圖公司旗下擁有多款社交產品,比如美圖秀秀社區、美拍短視頻社區等。針對這幾款社交產品,不管在內容上還是產品背景上都有著自己的特點。比如美圖秀秀從工具向社區轉型,如何讓用戶進行內容消費并且產生持續消費成了我們需要重點考慮的問題。而對于美拍,用戶本身有很強的內容消費屬性,在留存的基礎上如何吸引更多的用戶是當前主要的考慮點。
針對多個不同形態的社交產品,推薦算法存在以下三個方面的挑戰:
- 場景多,人力少:多款社交化產品合計十余個推薦場景,在當前的人力下,工作量是比較艱巨的;
- 場景、用戶差異大:不同場景下,用戶的消費習慣和使用意圖,以及內容的屬性存在比較大的差異,比如,美圖秀秀社區以圖文為主,美拍以短視頻為主,導致不同場景下的模型不能簡單復用;
- 產品、目標迭代快:用戶的生活習慣不是一成不變的,我們的社交產品也時刻處在不同的發展階段,需要根據用戶的訴求,以及我們產品的發展需求及時調整推薦算法的優化目標。
為了解決上述挑戰,我們分別從工具和算法兩個方面入手。在工具上,去年我們開發了 MML 機器學習平臺,提供從日志處理到模型在線服務的一站式解決方案。在算法上,我們在美圖推薦場景上進行了良好的實踐,針對目前存在的問題以及產品的需要,進行了很多有益的嘗試,也獲取到了一些經驗。下面我將從工具和算法這兩方面和大家分享下。
工具篇:MML 機器學習平臺
MML,全稱 Meitu machine Learning Platform,是一站式機器學習服務平臺,為用戶提供從數據預處理,特征與樣本生產,模型構建、訓練與評估以及模型在線服務的全流程開發及部署支持。其平臺架構圖見圖一。
圖一 平臺架構圖
MML 機器學習平臺包括三個主要模塊:
- Spark Feature:負責數據分析、特征工程,以及樣本拼接。Spark Feature 基于 Spark SQL 進行開發,用戶通過編寫 SQL 以及配置樣本拼接 JSON,即可實現特征以及樣本生產的工作;
- Bamboo:基于 tensorflow 開發,負責模型訓練、離線效果評估。Bamboo 實現了推薦領域大量的 State of the Art 的模型,并且提供了豐富的 Layers,以簡化算法同學的建模工作。在訓練方面支持多種并行訓練方式,同時通過對代碼的優化實現了較高的訓練效率;
- MML Serving:負責模型的在線服務。底層通過 C++ 實現,在內存和并發上做了大量的優化,支持同時請求多個模型,以及在線熱更。靈活的架構讓我們能夠很方便地接入各種機器學習框架訓練的模型。
Bamboo
如果說 Spark Feature 和 MML Serving 是 MML 機器學習平臺的手和腳,那么 Bamboo 就是 MML 機器學習平臺的大腦。Bamboo 負責機器學習模型的訓練和效果評估。我們底層采用 tensorflow 開發,對外提供封裝好的組件??偟膩碚f,Bamboo 具有以下優點:
- 便捷:內置了近幾年推薦領域的 SOTA 模型,以及建模常用的 Layers,并且內置了部分公共數據集的訪問接口,能夠支持從本地磁盤,以及 HDFS 讀取訓練數據。數據、訓練、模型評估、模型導出通過配置化實現,算法同學可以專注于模型的設計;
- 高效:采用 tensorflow 底層 API 和 Estimator 來實現,并遵循 tensorflow 官方性能優化指南,最大限度提升模型訓練效率,相比 Keras 以及內部未優化版本,單卡訓練效率有數倍提升。同時,能夠支持同步、異步等多種并行訓練方案;
- 可擴展:Bamboo 的最初的設計目標是作為 tensorflow 的補充,因此在整個設計過程充分考慮了擴展性,能夠支持采用 Bamboo 提供的 API 或者使用 tensorflow 原生 API。良好的分層設計,方便使用方進行模塊的復用和重構。
MML Serving
MML Serving 決定了模型能否上線提供服務以及在線服務的效率。去年下半年,我們上線了采用 C++ 開發的新版 MML Serving,通過內存和并發的優化,讓我們整體預估耗時減少了 50%,服務初始化耗時減少了 50%,內存使用量降低了 77%。通過壓測發現,服務在高并發下,整體表現穩定。另外良好的架構設計,可以很方便接入各種第三方機器學習庫,目前已經內置了對 tensorflow 和 xgboost 模型的支持。
平臺收益
MML 機器學習平臺上線后,生產力得到了極大的釋放??梢院唵螝w納為四個方面的收益:
- 開發效率的顯著提升:平臺上線前,算法同學需要同時開發樣本拼接、模型訓練、在線服務等多個模塊的代碼,平臺上線后,算法同學可以專注于模型網絡結構的設計;
- 模型迭代周期顯著降低,模型調研的范疇大幅擴大:平臺上線前,算法同學需要花費較多的精力在工程模塊的開發上面,而且只能在幾個固定的算法框架下進行一些有限的嘗試。新框架不僅減少了算法同學的工程負擔,同時因為框架的靈活性,使得算法的調研不再局限于幾個固定的模式,模型迭代效率得到了極大的提升;
- 機器成本:新平臺效率上的提升,也同樣體現在機器資源的節約上面,在美拍熱門排序上,接入新平臺后,機器節約了一半;
- 經驗沉淀:此前各個業務維護自己的模型代碼,經驗很難進行交流和復用。新平臺很好地解決了這部分問題。
算法篇:美圖推薦排序實踐
工具的價值落地到業務中,需要通過算法來實現。美圖推薦排序算法大致可以分成四個階段:第一個階段是以 LR 為主的線性模型,組合大規模人工特征。第二個階段發展成了以深度學習為主的非線性模型,以及少量的人工特征。再然后,為了減少人工特征工程的工作,我們開始調研以用戶行為序列為主的原始特征,此時線上的主力模型是深度學習模型以及用戶行為序列特征。最后一個階段我們從單目標模型演進到了現在的多目標模型。排序模型四個階段的演進可以歸納為模型、特征、優化目標三個方面的工作,下面我將和大家一一進行介紹。
美圖推薦排序實踐——模型演進
2018 年,我們上線了第一個基于何向南在 SIGIR 2017 發表的《Neural Factorization Machines for Sparse Predictive Analytics》改進的模型——NFM-v4。相比原論文,我們的主要改進點是通過一個線性變換,將變長稀疏的原始高維特征壓縮到一個定長稠密的低維實數空間,從而屏蔽了模型在輸入特征處理上的差異,可以將精力更多放在特征的挖掘上。
但是,將幾十萬維的高維空間直接壓縮到幾百維,存在一定的信息損失,因此,在 NFM-v4 的基礎上,我們通過將部分高維 id 特征單獨建模,比較好的解決了這個問題,在業務指標上,也有不錯的效果提升,美拍的人均播放時長增加了 4.75%,人均有效行為數增加了 3.45%。
不過,NFM 存在的一個問題是,bi-interaction pooling 認為特征二階交叉的權重是相等的,這種假設在多數場景下并不符合數據的真實分布。因此,在 NFM 的基礎上,我們提出了 Neural Field weighted Factorization Machines(NFwFM)模型,通過引入一個權重向量,來建模二階交叉特征的權重。通過二階向量不等權相加,業務指標整體提升較為明顯。其中美拍人均播放時長增加 3.78%,播放用戶數增加 1.74%,美圖秀秀點擊率提升了 5.689%,人均使用時長增加 2.53%,新用戶點擊率增加 2.701%。
美圖推薦排序實踐——特征工程
從 LR 升級到 NFwFM,我們雖然減少了大量的特征組合上的工作,但是,如何從數據中挖掘對當前業務有效的特征?如何進行特征選擇?依舊占據了我們的主要精力。去年,工業界和學術界,都發表了大量關于 User Behaviors Sequence 建模的新工作,隨后,我們也開始跟進這一方面的工作,并在我們的業務中進行了嘗試,通過端到端的建模,減少我們在特征工程上的工作。
目前,我們主要嘗試了三種用戶行為序列建模的方法,包括 Sum/Mean Pooling 、 RNN 、 Attention 等。在我們的業務場景下,RNN 的離線效果并不理想,原因推測是用戶點擊 feed 的先后順序并不存在某種固定的模式,而主要取決于用戶對所推薦 feed 的偏好,此外,RNN 的訓練耗時也增加比較明顯。
Sum/Mean Pooling 的方式雖然簡單,但是在長行為序列建模上,效果相比其它兩種方式表現得更加優異,因此是我們目前線上建模用戶長序列特征的主要手段。
我們也對比了基于 Attention 的方法,離線效果相比 Sum/Mean Pooling 有略微提升,但是考慮到計算復雜度,Attention 只適合于序列長度較短的場景。
在美拍,美圖秀秀社區,以及 push 業務都嘗試了用戶行為序列特征建模,各項業務指標均有較大幅度的提升,美拍人均時長提升了 12%,秀秀的點擊率提升了 5%,push 的到達點擊率提升了 10%。
隨著模型和特征的復雜度顯著增加,在線 inference 的耗時已經無法滿足業務的要求。為了解決模型推理效率的問題,一方面我們通過 C++ 重寫了模型在線推理服務——MML Serving,并在內存和并發上做了大量優化,使得 QPS 和穩定性有了大幅度提升。另一方面,我們實現了多塔網絡的模型框架,通過離線預計算 user 和 feed 子網絡的輸出,并存到 DB 中,在線通過檢索 DB 的方式,避免了實時計算 user 和 feed 子網絡的龐大計算量。收益也是很明顯,其中排序預估耗時從 100+ms 下降到了 7ms,秀秀社區 push 服務預估耗時從單尾號 5 小時降低到了 3 分鐘,到達點擊率平均提升 23.9%。
美圖推薦排序實踐——多目標優化
隨著產品優化的深入,單一的模型優化目標已經無法準確刻畫產品的迭代方向,為了滿足多樣化的產品需求,我們開始探索多目標優化。整個多目標優化的路線,大概經歷了四個階段:樣本 reweight,多目標模型,多模型,多個多目標模型。下面我將對這四個階段的工作分別進行介紹。
多目標優化之樣本 reweight
樣本 reweight 是一種簡單輕量的可用于解決多目標問題的做法,它借鑒了 imbalanced data 的典型做法,在保持模型優化的主目標不變的情況下,通過提高次要目標的正樣本占比,來模擬多目標的聯合概率分布。
我們在美拍和美圖秀秀社區上,對增加關注目標進行了嘗試。美拍在播放時長略微上漲的情況下,實現了人均關注 10.06% 的提升。美圖秀秀社區關注轉化率提升了 12.03%,不過點擊率也有略微的下降。
多目標優化之多目標模型
樣本 reweight 的方式改變了樣本的原始分布,導致主目標存在比較大的預估偏差。同時,因為次要目標是通過主目標的網絡結構來實現,無法對各個目標的模型分別進行調優,模型結構優化存在比較大的局限性。因此,我們開始嘗試多目標模型建模。
多目標模型通過共享底層的網絡輸入,實現信息共享,再根據每個目標的數據特點,分別構建各個目標的輸出網絡,得到每個目標的輸出。
在美圖的多個社交場景中,我們進行了嘗試,并取得了比較大的在線提升。其中,在美拍雙列 feed 流場景下,人均關注提升 11.43%,人均播放時長提升 12.45%。美圖秀秀首頁 feed 流,點擊率提升 1.93%,關注率提升 2.9%。美圖秀秀下滑 feed 流,關注率提升 9.3%,人均時長提升 10.33%。
多目標優化之多模型
雖然多目標模型在業務上取得了比較大的提升,但是仍然存在一些問題。典型的問題包括:
- 當不同任務的目標相關性較弱,或者損失函數的輸出值范圍差異較大時,多目標模型的調優存在比較大的困難;
- 使用多目標模型,會導致不同目標的優化存在比較大的耦合,延遲整體優化進度,在產品要求快速迭代的場景下,這種技術手段不一定能夠很好的滿足業務需求。
為了解決多目標模型存在的一些問題,我們通過拆分多目標模型的各個目標,得到多個單目標模型,并對每個單目標模型分別進行優化。在美拍雙列 feed 流場景下,我們進行了相應的嘗試,在人均時長不變的情況下,人均關注提升了 2.98%。通過進一步調整模型的優化目標,人均時長再次提升了 19.37%,人均關注提升了 14.1%。
多目標優化之多個多目標模型
當推薦場景的優化目標增加,多模型的方案會存在維護成本高,線上資源開銷大,各個任務的模型無法利用其它任務的數據等問題。
綜合多模型和多目標模型的優點,采用多個多目標模型是解決多目標任務的有效手段。在美拍場景下,通過同時優化關注、時長、播放等目標,人均關注提升 12.18%,活躍留存提升 25.67%。
未來規劃
未來,我們將繼續完善 MML 機器學習平臺的建設,并計劃對 Bamboo 項目進行開源。在算法上,我們開始了強化學習在推薦領域的調研,同時,對多目標建模、行為序列特征建模、以及 Embedding 技術等也將持續進行跟進和優化。期待后續能和大家有更多地探討和交流。
作者簡介
湯斌,美圖高級算法專家,曾在騰訊任高級研究員,碩士畢業于哈爾濱工業大學。主要從事推薦算法,點擊率預估以及自然語言處理方面的相關研究。在工業界的大規模推薦與排序算法實踐上積累了豐富的經驗。