今日頭條的內容分發演演算法一直頗神秘低調。自12年開發運營起進四次改版,從未透露核心內容。
2018年1月,今日頭條資深演演算法架構師曹歡歡博士,終於首次公開今日頭條的演演算法原理,以期推動整個行業問診演演算法、建言演演算法,希望消除各界對演演算法的誤解。
據悉,今日頭條的資訊推薦演演算法目前服務全球億萬使用者。
以下為曹歡歡關於《今日頭條演演算法原理》的分享內容(已獲今日頭條授權):
▲3分鐘瞭解今日頭條推薦演演算法原理
本次分享將主要介紹今日頭條推薦系統概覽以及內容分析、使用者標簽、評估分析,內容安全等原理。
01 系統概覽
推薦系統,如果用形式化的方式去描述實際上是擬合一個使用者對內容滿意度的函式,這個函式需要輸入三個維度的變數。第一個維度是內容。頭條現在已經是一個綜合內容平臺,圖文、影片、UGC小影片、問答、微頭條,每種內容有很多自己的特徵,需要考慮怎樣提取不同內容型別的特徵做好推薦。第二個維度是使用者特徵。包括各種興趣標簽,職業、年齡、性別等,還有很多模型刻劃出的隱式使用者興趣等。第三個維度是環境特徵。這是移動網際網路時代推薦的特點,使用者隨時隨地移動,在工作場合、通勤、旅遊等不同的場景,資訊偏好有所偏移。結合三方面的維度,模型會給出一個預估,即推測推薦內容在這一場景下對這一使用者是否合適。
這裡還有一個問題,如何引入無法直接衡量的標的?
推薦模型中,點選率、閱讀時間、點贊、評論、轉發包括點贊都是可以量化的標的,能夠用模型直接擬合做預估,看線上提升情況可以知道做的好不好。但一個大體量的推薦系統,服務使用者眾多,不能完全由指標評估,引入資料指標以外的要素也很重要。
比如廣告和特型內容頻控。像問答卡片就是比較特殊的內容形式,其推薦的標的不完全是讓使用者瀏覽,還要考慮吸取使用者回答為社群貢獻內容。這些內容和普通內容如何混排,怎樣控制頻控都需要考慮。
此外,平臺出於內容生態和社會責任的考量,像低俗內容的打壓,標題黨、低質內容的打壓,重要新聞的置頂、加權、強插,低階別賬號內容降權都是演演算法本身無法完成,需要進一步對內容進行幹預。
下麵我將簡單介紹在上述演演算法標的的基礎上如何對其實現。
前面提到的公式y = F(Xi ,Xu ,Xc),是一個很經典的監督學習問題。可實現的方法有很多,比如傳統的協同過濾模型,監督學習演演算法Logistic Regression模型,基於深度學習的模型,Factorization Machine和GBDT等。
一個優秀的工業級推薦系統需要非常靈活的演演算法實驗平臺,可以支援多種演演算法組合,包括模型結構調整。因為很難有一套通用的模型架構適用於所有的推薦場景。現在很流行將LR和DNN結合,前幾年Facebook也將LR和GBDT演演算法做結合。今日頭條旗下幾款產品都在沿用同一套強大的演演算法推薦系統,但根據業務場景不同,模型架構會有所調整。
模型之後再看一下典型的推薦特徵,主要有四類特徵會對推薦起到比較重要的作用。
第一類是相關性特徵,就是評估內容的屬性和與使用者是否匹配。顯性的匹配包括關鍵詞匹配、分類匹配、來源匹配、主題匹配等。像FM模型中也有一些隱性匹配,從使用者向量與內容向量的距離可以得出。
第二類是環境特徵,包括地理位置、時間。這些既是bias特徵,也能以此構建一些匹配特徵。
第三類是熱度特徵。包括全域性熱度、分類熱度,主題熱度,以及關鍵詞熱度等。內容熱度資訊在大的推薦系統特別在使用者冷啟動的時候非常有效。
第四類是協同特徵,它可以在部分程度上幫助解決所謂演演算法越推越窄的問題。協同特徵並非考慮使用者已有歷史。而是透過使用者行為分析不同使用者間相似性,比如點選相似、興趣分類相似、主題相似、興趣詞相似,甚至向量相似,從而擴充套件模型的探索能力。
模型的訓練上,頭條系大部分推薦產品採用實時訓練。實時訓練省資源並且反饋快,這對資訊流產品非常重要。使用者需要行為資訊可以被模型快速捕捉並反饋至下一刷的推薦效果。我們線上目前基於storm叢集實時處理樣本資料,包括點選、展現、收藏、分享等動作型別。模型引數伺服器是內部開發的一套高效能的系統,因為頭條資料規模增長太快,類似的開源系統穩定性和效能無法滿足,而我們自研的系統底層做了很多針對性的最佳化,提供了完善運維工具,更適配現有的業務場景。
目前,頭條的推薦演演算法模型在世界範圍內也是比較大的,包含幾百億原始特徵和數十億向量特徵。整體的訓練過程是線上伺服器記錄實時特徵,匯入到Kafka檔案佇列中,然後進一步匯入Storm叢集消費Kafka資料,客戶端回傳推薦的label構造訓練樣本,隨後根據最新樣本進行線上訓練更新模型引數,最終線上模型得到更新。這個過程中主要的延遲在使用者的動作反饋延時,因為文章推薦後使用者不一定馬上看,不考慮這部分時間,整個系統是幾乎實時的。
但因為頭條目前的內容量非常大,加上小影片內容有千萬級別,推薦系統不可能所有內容全部由模型預估。所以需要設計一些召回策略,每次推薦時從海量內容中篩選出千級別的內容庫。召回策略最重要的要求是效能要極致,一般超時不能超過50毫秒。
召回策略種類有很多,我們主要用的是倒排的思路。離線維護一個倒排,這個倒排的key可以是分類,topic,物體,來源等,排序考慮熱度、新鮮度、動作等。線上召回可以迅速從倒排中根據使用者興趣標簽對內容做截斷,高效的從很大的內容庫中篩選比較靠譜的一小部分內容。
02 內容分析
內容分析包括文字分析,圖片分析和影片分析。頭條一開始主要做資訊,今天我們主要講一下文字分析。文字分析在推薦系統中一個很重要的作用是使用者興趣建模。沒有內容及文字標簽,無法得到使用者興趣標簽。舉個例子,只有知道文章標簽是網際網路,使用者看了網際網路標簽的文章,才能知道使用者有網際網路標簽,其他關鍵詞也一樣。
另一方面,文字內容的標簽可以直接幫助推薦特徵,比如魅族的內容可以推薦給關註魅族的使用者,這是使用者標簽的匹配。如果某段時間推薦主頻道效果不理想,出現推薦窄化,使用者會發現到具體的頻道推薦(如科技、體育、娛樂、軍事等)中閱讀後,再回主feed,推薦效果會更好。因為整個模型是打通的,子頻道探索空間較小,更容易滿足使用者需求。只通過單一通道反饋提高推薦準確率難度會比較大,子頻道做的好很重要。而這也需要好的內容分析。
上圖是今日頭條的一個實際文字case。可以看到,這篇文章有分類、關鍵詞、topic、物體詞等文字特徵。當然不是沒有文字特徵,推薦系統就不能工作,推薦系統最早期應用在Amazon,甚至沃爾瑪時代就有,包括Netfilx做影片推薦也沒有文字特徵直接協同過濾推薦。但對資訊類產品而言,大部分是消費當天內容,沒有文字特徵新內容冷啟動非常困難,協同類特徵無法解決文章冷啟動問題。
今日頭條推薦系統主要抽取的文字特徵包括以下幾類。首先是語意標簽類特徵,顯式為文章打上語意標簽。這部分標簽是由人定義的特徵,每個標簽有明確的意義,標簽體系是預定義的。此外還有隱式語意特徵,主要是topic特徵和關鍵詞特徵,其中topic特徵是對於詞機率分佈的描述,無明確意義;而關鍵詞特徵會基於一些統一特徵描述,無明確集合。
另外文字相似度特徵也非常重要。在頭條,曾經使用者反饋最大的問題之一就是為什麼總推薦重覆的內容。這個問題的難點在於,每個人對重覆的定義不一樣。舉個例子,有人覺得這篇講皇馬和巴薩的文章,昨天已經看過類似內容,今天還說這兩個隊那就是重覆。但對於一個重度球迷而言,尤其是巴薩的球迷,恨不得所有報道都看一遍。解決這一問題需要根據判斷相似文章的主題、行文、主體等內容,根據這些特徵做線上策略。
同樣,還有時空特徵,分析內容的發生地點以及時效性。比如武漢限行的事情推給北京使用者可能就沒有意義。最後還要考慮質量相關特徵,判斷內容是否低俗,色情,是否是軟文,雞湯?
上圖是頭條語意標簽的特徵和使用場景。他們之間層級不同,要求不同。
分類的標的是改寫全面,希望每篇內容每段影片都有分類;而物體體系要求精準,相同名字或內容要能明確區分究竟指代哪一個人或物,但不用改寫很全。概念體系則負責解決比較精確又屬於抽象概念的語意。這是我們最初的分類,實踐中發現分類和概念在技術上能互用,後來統一用了一套技術架構。
目前,隱式語意特徵已經可以很好的幫助推薦,而語意標簽需要持續標註,新名詞新概念不斷出現,標註也要不斷迭代。其做好的難度和資源投入要遠大於隱式語意特徵,那為什麼還需要語意標簽?有一些產品上的需要,比如頻道需要有明確定義的分類內容和容易理解的文字標簽體系。語意標簽的效果是檢查一個公司NLP技術水平的試金石。
今日頭條推薦系統的線上分類採用典型的層次化文字分類演演算法。最上面Root,下麵第一層的分類是像科技、體育、財經、娛樂,體育這樣的大類,再下麵細分足球、籃球、乒乓球、網球、田徑、游泳等,足球再細分國際足球、中國足球,中國足球又細分中甲、中超、國家隊等,相比單獨的分類器,利用層次化文字分類演演算法能更好地解決資料傾斜的問題。有一些例外是,如果要提高召回,可以看到我們連線了一些飛線。這套架構通用,但根據不同的問題難度,每個元分類器可以異構,像有些分類SVM效果很好,有些要結合CNN,有些要結合RNN再處理一下。
上圖是一個物體詞識別演演算法的case。基於分詞結果和詞性標註選取候選,期間可能需要根據知識庫做一些拼接,有些物體是幾個詞的組合,要確定哪幾個詞結合在一起能對映物體的描述。如果結果對映多個物體還要透過詞向量、topic分佈甚至詞頻本身等去歧,最後計算一個相關性模型。
03 使用者標簽
內容分析和使用者標簽是推薦系統的兩大基石。內容分析涉及到機器學習的內容多一些,相比而言,使用者標簽工程挑戰更大。
今日頭條常用的使用者標簽包括使用者感興趣的類別和主題、關鍵詞、來源、基於興趣的使用者聚類以及各種垂直興趣特徵(車型,體育球隊,股票等)。還有性別、年齡、地點等資訊。性別資訊透過使用者第三方社交賬號登入得到。年齡資訊通常由模型預測,透過機型、閱讀時間分佈等預估。常駐地點來自使用者授權訪問位置資訊,在位置資訊的基礎上透過傳統聚類的方法拿到常駐點。常駐點結合其他資訊,可以推測使用者的工作地點、出差地點、旅遊地點。這些使用者標簽非常有助於推薦。
當然最簡單的使用者標簽是瀏覽過的內容標簽。但這裡涉及到一些資料處理策略。主要包括:一、過濾噪聲。透過停留時間短的點選,過濾標題黨。二、熱點懲罰。對使用者在一些熱門文章(如前段時間PG One的新聞)上的動作做降權處理。理論上,傳播範圍較大的內容,置信度會下降。三、時間衰減。使用者興趣會發生偏移,因此策略更偏向新的使用者行為。因此,隨著使用者動作的增加,老的特徵權重會隨時間衰減,新動作貢獻的特徵權重會更大。四、懲罰展現。如果一篇推薦給使用者的文章沒有被點選,相關特徵(類別,關鍵詞,來源)權重會被懲罰。當然同時,也要考慮全域性背景,是不是相關內容推送比較多,以及相關的關閉和dislike訊號等。
使用者標簽挖掘總體比較簡單,主要還是剛剛提到的工程挑戰。頭條使用者標簽第一版是批次計算框架,流程比較簡單,每天抽取昨天的日活使用者過去兩個月的動作資料,在Hadoop叢集上批次計算結果。
但問題在於,隨著使用者高速增長,興趣模型種類和其他批次處理任務都在增加,涉及到的計算量太大。2014年,批次處理任務幾百萬使用者標簽更新的Hadoop任務,當天完成已經開始勉強。叢集計算資源緊張很容易影響其它工作,集中寫入分散式儲存系統的壓力也開始增大,並且使用者興趣標簽更新延遲越來越高。
面對這些挑戰。2014年底今日頭條上線了使用者標簽Storm叢集流式計算系統。改成流式之後,只要有使用者動作更新就更新標簽,CPU代價比較小,可以節省80%的CPU時間,大大降低了計算資源開銷。同時,只需幾十臺機器就可以支撐每天數千萬使用者的興趣模型更新,並且特徵更新速度非常快,基本可以做到準實時。這套系統從上線一直使用至今。
當然,我們也發現並非所有使用者標簽都需要流式系統。像使用者的性別、年齡、常駐地點這些資訊,不需要實時重覆計算,就仍然保留daily更新。
04 評估分析
上面介紹了推薦系統的整體架構,那麼如何評估推薦效果好不好?
有一句我認為非常有智慧的話,“一個事情沒法評估就沒法最佳化”。對推薦系統也是一樣。
事實上,很多因素都會影響推薦效果。比如侯選集合變化,召回模組的改進或增加,推薦特徵的增加,模型架構的改進在,演演算法引數的最佳化等等,不一一舉例。評估的意義就在於,很多最佳化最終可能是負向效果,並不是最佳化上線後效果就會改進。
全面的評估推薦系統,需要完備的評估體系、強大的實驗平臺以及易用的經驗分析工具。所謂完備的體系就是並非單一指標衡量,不能只看點選率或者停留時長等,需要綜合評估。過去幾年我們一直在嘗試,能不能綜合盡可能多的指標合成唯一的評估指標,但仍在探索中。目前,我們上線還是要由各業務比較資深的同學組成評審委員會深入討論後決定。
很多公司演演算法做的不好,並非是工程師能力不夠,而是需要一個強大的實驗平臺,還有便捷的實驗分析工具,可以智慧分析資料指標的置信度。
一個良好的評估體系建立需要遵循幾個原則,首先是兼顧短期指標與長期指標。我在之前公司負責電商方向的時候觀察到,很多策略調整短期內使用者覺得新鮮,但是長期看其實沒有任何助益。
其次,要兼顧使用者指標和生態指標。今日頭條作為內容分創作平臺,既要為內容創作者提供價值,讓他更有尊嚴的創作,也有義務滿足使用者,這兩者要平衡。還有廣告主利益也要考慮,這是多方博弈和平衡的過程。
另外,要註意協同效應的影響。實驗中嚴格的流量隔離很難做到,要註意外部效應。
強大的實驗平臺非常直接的優點是,當同時線上的實驗比較多時,可以由平臺自動分配流量,無需人工溝通,並且實驗結束流量立即回收,提高管理效率。這能幫助公司降低分析成本,加快演演算法迭代效應,使整個系統的演演算法最佳化工作能夠快速往前推進。
這是頭條A/B Test實驗系統的基本原理。首先我們會做在離線狀態下做好使用者分桶,然後線上分配實驗流量,將桶裡使用者打上標簽,分給實驗組。舉個例子,開一個10%流量的實驗,兩個實驗組各5%,一個5%是基線,策略和線上大盤一樣,另外一個是新的策略。
實驗過程中使用者動作會被蒐集,基本上是準實時,每小時都可以看到。但因為小時資料有波動,通常是以天為時間節點來看。動作蒐集後會有日誌處理、分散式統計、寫入資料庫,非常便捷。
在這個系統下工程師只需要設定流量需求、實驗時間、定義特殊過濾條件,自定義實驗組ID。系統可以自動生成:實驗資料對比、實驗資料置信度、實驗結論總結以及實驗最佳化建議。
當然,只有實驗平臺是遠遠不夠的。線上實驗平臺只能透過資料指標變化推測使用者體驗的變化,但資料指標和使用者體驗存在差異,很多指標不能完全量化。很多改進仍然要透過人工分析,重大改進需要人工評估二次確認。
05 內容安全
最後要介紹今日頭條在內容安全上的一些舉措。頭條現在已經是國內最大的內容創作與分發憑條,必須越來越重視社會責任和行業領導者的責任。如果1%的推薦內容出現問題,就會產生較大的影響。
因此頭條從創立伊始就把內容安全放在公司最高優先順序佇列。成立之初,已經專門設有審核團隊負責內容安全。當時研發所有客戶端、後端、演演算法的同學一共才不到40人,頭條非常重視內容審核。
現在,今日頭條的內容主要來源於兩部分,一是具有成熟內容生產能力的PGC平臺,一是UGC使用者內容,如問答、使用者評論、微頭條。這兩部分內容需要透過統一的審核機制。如果是數量相對少的PGC內容,會直接進行風險審核,沒有問題會大範圍推薦。UGC內容需要經過一個風險模型的過濾,有問題的會進入二次風險審核。審核透過後,內容會被真正進行推薦。這時如果收到一定量以上的評論或者舉報負向反饋,還會再回到覆審環節,有問題直接下架。整個機制相對而言比較健全,作為行業領先者,在內容安全上,今日頭條一直用最高的標準要求自己。
分享內容識別技術主要鑒黃模型,謾罵模型以及低俗模型。今日頭條的低俗模型透過深度學習演演算法訓練,樣本庫非常大,圖片、文字同時分析。這部分模型更註重召回率,準確率甚至可以犧牲一些。謾罵模型的樣本庫同樣超過百萬,召回率高達95%+,準確率80%+。如果使用者經常出言不諱或者不當的評論,我們有一些懲罰機制。
泛低質識別涉及的情況非常多,像假新聞、黑稿、題文不符、標題黨、內容質量低等等,這部分內容由機器理解是非常難的,需要大量反饋資訊,包括其他樣本資訊比對。目前低質模型的準確率和召回率都不是特別高,還需要結合人工覆審,將閾值提高。目前最終的召回已達到95%,這部分其實還有非常多的工作可以做。頭條人工智慧實驗室李航老師目前也在和密歇根大學共建科研專案,設立謠言識別平臺。
以上便是頭條推薦系統的原理全部分享了,此文授權轉載自公眾號今日頭條(ID:headline_today)。
精彩活動
推薦閱讀
2017年資料視覺化的七大趨勢!
全球100款大資料工具彙總(前50款)
Q: 你在今日頭條的演演算法中看到了什麼?
歡迎留言與大家分享
請把這篇文章分享給你的朋友
轉載 / 投稿請聯絡:hzzy@hzbook.com
更多精彩文章,請在公眾號後臺點選“歷史文章”檢視