互聯網技術將咱們帶入了信息爆炸的時代,面對海量的信息,一方面用戶難以迅速發現本身感興趣的信息,另外一方面長尾信息得不到曝光。爲了解決這些問題,個性化推薦系統應運而生。美圖擁有海量用戶的同時積累了海量圖片與視頻,經過推薦系統有效創建了用戶與內容的鏈接,大幅度提高產品的用戶體驗。
美圖個性化推薦主要應用於美拍APP,應用場景以下:算法
場景一:美拍直播,實時的在線個性化排序業務;
場景二:美拍熱門(即美拍首頁),典型的Feed流產品,用戶可在熱門Feed流中不斷翻頁滾動,探索和消費本身可能感興趣的內容;
場景三:播放詳情頁下的「猜你喜歡」模塊,用於推薦類似視頻。網絡
個性化推薦的目標是鏈接用戶與內容、提高用戶體驗和優化內容生態。爲了實現以上目標,算法須要理解內容,瞭解平臺上可用於推薦的內容;同時也要理解用戶,瞭解用戶的興趣愛好,從而進行精準推薦。架構
理解內容,即內容的特徵提取。美拍APP的內容是短視頻,其特徵可分爲四部分:機器學習
對內容有必定理解以後,則要進一步理解用戶,從而鏈接用戶與內容。理解用戶就是咱們常說的用戶畫像建設,建設用戶畫像須要瞭解用戶的天然屬性,如用戶的性別、年齡、所在城市;社會屬性,如職業、婚姻情況等;以及最重要的興趣屬性,除了瞭解用戶在平臺上的興趣和偏好,也要儘量去探索用戶在平臺以外的興趣愛好(打遊戲、逛淘寶等)。函數
基於對內容和用戶的理解可進行精準推薦。美圖的推薦流程分爲以下三個階段:學習
召回階段
推薦的本質是給不一樣的用戶提供不一樣的內容排序。美拍APP上有數十億個短視頻,面對如此龐大的量級咱們沒法對用戶計算全部內容的排序。經過統計召回、簡單模型、圖計算等篩選方式將內容的數量級降到幾千至幾百以後能夠獲得初步的推薦結果;優化
預估階段
利用機器學習模型、結合超高維度和精細化的特徵,以「用戶-情境-物品」三個維度聯合建模,獲得預估模型,再對不一樣的目標進行預估;spa
排序階段
在對目標進行預估以後,要對內容進行排序,從而決定可觸達用戶的排序。排序階段會結合新穎性、多樣性、準確性三個方面進行綜合排序,最終將推薦結果呈現給用戶。架構設計
在召回階段,咱們已經實施了基於熱度、趨勢、協同過濾、用戶畫像、內容、情境和社交關係等一系列召回方式,同時也實踐了基於深度學習的召回方法。在預估階段,較成熟的有大規模離線特徵+LR、連續特徵+GBDT,也實踐了NFM、DCN等深度學習預估模型。設計
基於上述的推薦流程,推薦的總體架構以下圖所示:
OFFLINE
主要是離線處理流程,對數據進行收集,並從數據出發進行數據清洗、數據標註、特徵工程、模型訓練、模型評估,最後生成離線特徵、離線召回模型和離線排序模型;
NEARLINE
主要是對實時的數據流進行處理,經過獲取實時日誌,對數據流進行統計、效果監控、反做弊處理、特徵更新以及對模型的增量訓練,最終獲得實時的召回模型和排序模型;
ONLINE
即引擎部分,對流量分流後進行召回、融合、排序,最終將推薦結果返回給應用端。
推薦時效性
天下武功,惟快不破。美圖的用戶數量逐步增加,而每一個用戶的興趣點隨着場景、時間也在同步發生變化。平臺上新的內容源源不斷,一個好的內容型產品每每不會錯過任何熱點。隨着大環境的變化,推薦時效性顯得尤其重要,對此推薦效果的提高也有很大優化空間。
召回時效性
如圖7所示,首先創建一個實時更新的類似視頻(I2I)索引;當用戶播放視頻或對其產生有效行爲後,利用此索引,獲得對應視頻的類似視頻進行召回。同時經過收集並分析用戶的實時行爲,計算用戶對不一樣內容類型的實時偏好,並實時獲取用戶對應偏好類型的實時榜單內容, 從而得到實時召回的結果;
在引擎部分會融合實時及非實時的召回,並進行預估排序,最終將推薦結果綜合呈現給用戶。
預估時效性
假設預估模型多天內不更新,其離線評估效果的變化狀況以下圖所示。很明顯,預估模型從次日開始就有大幅度的效用降低,大概一週內會降低至66%左右。根據該圖表能夠看出,預估的時效性會隨着時間迅速降低,因此在預估的時效性上有很大的優化空間。
爲了優化預估時效性,咱們選擇了在線學習。以下圖所示,以訓練LR模型爲例,左上是LR模型的預估方程和損失函數,在複雜的線上環境中,樣本輸入是隨機的,即從此計算的方向以及步長也是隨機的,實如今線學習能夠簡單採用在線梯度降低方式,可是選擇這種簡單的優化方式會形成模型更新的不穩定性和模型效用的不穩定性;同時簡單的梯度更新方式會使得模型從舊樣本學習到的有效信息被遺忘。
FTRL則是一種生成解析解的更新方式,詳見左下的方程式,其中有四個項,第一個項保證參數隨着梯度方向進行更新;第二個項保證模型的穩定性,使得每次更新的結果不會遠離以前的結果;第3、四個項是常見的L1和L2正則約束;如圖9右側所示,爲更新過程的僞代碼。
以下圖所示,基於上述FTRL的在線學習方法,咱們設計了實時特徵與在線學習的流程與架構。 Arachnia收集到日誌以後,FeatureServer經過Kafka組件獲取到實時日誌,進行實時特徵計算更新特徵。TrainServer還會收集用戶不一樣行爲的日誌,分正負樣本,獲得原始樣本,再將原始樣本與FeatureServer進行交互,索引到對應的特徵列表,拼裝成模型訓練能夠直接應用樣本,供模型進行更新。
咱們設計基於Parameter Server架構的模型更新,模型更新階段從Parameter Server獲取模型參數,對樣本進行預估,計算參數的更新,並將更新結果迴流到Parameter Server中。因爲在複雜的線上環境中,不一樣行爲的日誌可能會產生不一樣程度的延遲,好比在短期內都是正樣本或負樣本,這種狀況下在線學習的穩定性會受到傷害。所以咱們設計了Balance Cache,控制不一樣行爲日誌的消費速度使得樣本的正負比例保持穩定。經過這樣的架構設計,模型更新及特徵更新都實現了秒級別更新。
冷啓動問題分爲用戶冷啓動和內容冷啓動。用戶冷啓動顧名思義就是指當新用戶來到平臺時無相關的歷史行爲,而傳統的推薦算法都是採用基於行爲的模型,所以沒法作出有效的推薦。同理,內容冷啓動是指當新內容產生時,它還未在平臺上進行有效的流量驗證,新內容的精準分發也是一個值得探討的問題。
用戶冷啓動
一個內容型平臺的用戶冷啓動目標是將新增用戶轉化爲消費用戶,進而轉化爲留存用戶。爲了將新增用戶轉化成消費用戶,須要匹配該用戶的興趣類型,進而推薦相關的內容,且推薦的內容要具備吸引眼球的能力,使用戶可以在該內容上進行消費。
而吸引用戶對內容進行消費的同時,要求推薦的內容具備必定的質量,可以使得用戶在內容上進行互動並承認消費過的內容,從而轉化爲留存用戶。
對於用戶冷啓動問題,也須要在召回和預估兩個階段進行優化。在召回階段,咱們設計了多級別特徵組合召回,用戶冷啓動從定義上來講缺失用戶的歷史行爲,但咱們也總能經過產品機制調整、外部合做得到用戶必定的基礎信息;同時結合用戶所處情境對這些特徵進行組合,匹配不一樣特徵組合的內容候選集獲得初步有效的召回結果。
在預估階段,使用服務端日誌、客戶端信息以及第三方數據作特徵工程,提取用戶特徵(好比性別、年齡、職業)、情境特徵(好比時間、位置、網絡)和視頻特徵(好比標籤、類型、音樂)。基於這些特徵以及對應生成樣本再進行模型訓練,咱們的模型訓練會預估三個目標,即點擊率、時長和留存率,並進行非線性的組合,對內容綜合排序,最終呈現給用戶。基於上述兩個階段的優化,新增用戶留存率有了大幅度的提高。
內容冷啓動
內容冷啓動也是一個經典的E&E問題(Exploration & Exploitation),即對新內容和舊內容如何選擇與權衡的問題。在作精準推薦時,是對舊內容進行有效挖掘的過程,但對於新內容而言,若是未能利用有效的方式將其曝光,那麼咱們的算法就沒法挖掘到新的優質內容,沒法造成一個健康的內容生態。
對於新內容而言,其轉化率、點擊率等效用函數的變化較不穩定,所以它的後驗方差會比較大;而對於舊內容,對它的評估是比較穩定的,其後驗方差比較低。換言之,對於新內容效用的預估誤差比較大,而對於舊內容的評估是比較穩定合理。針對這樣的新舊內容該如何去選擇?這就是經典的E&E問題、多臂老虎機問題(MAB)。
UCB
假設每一個老虎機的中獎機率服從二項分佈,在每次選擇老虎機時,對中獎機率進行假設檢驗並獲得置信區間,而後選擇置信區間上界最高的一臺老虎機;
Thompson採樣
假設每臺老虎機的中獎機率都服從β分佈,在選擇時對每臺老虎機的中獎機率進行去擬合β分佈,而後再從β分佈中隨機採樣一個點做爲此老虎機的預估分,最後選擇預估分最高的一臺老虎機。
爲了解決內容冷啓動問題,可將平臺流量分紅三部分:隨機Explore、個性化Explore和個性化Exploit。其中,最大的一部分是個性化Exploit,即經過各類推薦模型,對內容進行有效的精準推薦。隨機Explore和個性化Explore則是針對新內容的探索。此處須要關注兩點:首先要根據場景和業務設計合理的流量比例;其次要結合業務目標對業務上的流量效用進行量化,如點擊率、播放完整度、時長等。
當新內容產生時,通過MAB Score計算,再進行必定的過濾,當它進入到探索候選池裏,再進行隨機召回,召回成功以後會有對應的排序和展現。當一個新內容獲得曝光以後,須要收集它的用戶行爲反饋以更新MAB Score。過程當中,會過濾曝光次數達到必定上限的內容(咱們認爲它已是舊內容),也會過濾MAB Score較低的內容,從而造成整個隨機Explore的閉環。
個性化Explore相比於隨機Explore在新內容產生時,會先利用視覺算法對內容進行分類,視覺分類就是把新內容進行基礎的特徵提取,歸類到某個類目榜單裏。接着,結合視覺分類和MAB Score維護動態的類目榜單,最後再結合類目榜單和用戶實時偏好進行基於內容的召回。一樣的,在召回以後,將收集到的用戶的行爲反饋用於更新MAB Score和類目榜單。這就是基於內容召回的個性化Explore流程。
多樣性、準確性以及新穎性是衡量推薦系統效果很是重要的三個指標。同時最大化這三個指標從而給用戶帶來驚喜,使得用戶在平臺上留存,是推薦系統的一個終極目標。但在實際狀況下,這三個指標每每須要權衡取捨,例如在大多數狀況下,提高準確性的同時,推薦多樣性指標可能會下降。所以,咱們將問題簡化,對多目標問題進行從新建模,在保證必定的多樣性和新穎性約束的前提下最大化推薦準確性。
那麼,如何保證推薦多樣性呢?首先要定義什麼內容是同樣的,從而知道什麼內容是不同的。咱們能夠經過運營對視頻打標籤、經過視覺算法進行視覺分類,而上述幾種方法都依賴先驗的類目體系,每每沒法精確匹配用戶時刻變化的細粒度興趣點。一個UGC平臺,其重要特性之一就是內容形態快速更新,有各類各樣的創意會發展成小衆類別,再從小衆類別迅速發展成一個新類別,那麼這種基於經驗知的有監督方法是沒法及時響應變化的,所以考慮利用用戶行爲序列對內容聚類。
內容聚類
在基於用戶行爲序列的內容聚類中,假設用戶對於興趣點會產生其行爲序列,假設某個用戶喜歡小鮮肉和舞蹈,那麼基於這個興趣點,他便會觀看較多小鮮肉跳舞的視頻。這個問題能夠類比文本領域的Topic Model問題,看成者寫文章時,須要先肯定文章主題,再基於主題肯定文章中使用到的詞。
而對用戶興趣進行建模,咱們採用LDA的方法將用戶類比爲一篇文章,用戶行爲序列裏的內容類比爲文章裏的詞,那麼能夠對內容直接利用LDA模型進行聚類,從而匹配到用戶興趣。基於這樣的假設,能夠採用word2Vec對內容生成向量再進行聚類,也能夠基於LDA的深化版本DSSM模型來對內容生成向量。如圖19右側所示,是DSSM方法的網絡結構圖。
將來美圖但願可以挖掘更多的場景,爲用戶提供更多的個性化服務,從而全面提高用戶的產品體驗。咱們也但願可以經過個性化的迭代與內容生態變化進行推演,從而更全面地優化內容生態,同時經過建設更深層次的模型進行精準推薦,從有監督的學習模型訓練向強化學習的方法轉變,進而預估推薦算法的指望收益,大幅度提高用戶體驗。