今天反肋,算法分發(fā)已經是信息平臺、搜索引擎踏施、瀏覽器石蔗、社交軟件等幾乎所有軟件的標配,但同時畅形,算法也開始面臨質疑养距、挑戰(zhàn)和誤解。今日頭條的推薦算法日熬,從2012年9月第一版開發(fā)運行至今棍厌,已經經過四次大的調整和修改。
今日頭條委托資深算法架構師曹歡歡博士竖席,公開今日頭條的算法原理耘纱,以期推動整個行業(yè)問診算法、建言算法毕荐;通過讓算法透明束析,來消除各界對算法的誤解,并逐步推動整個行業(yè)讓算法更好的造福社會憎亚。
以下為《今日頭條算法原理》全文畸陡。
今日頭條資深算法架構師曹歡歡:
本次分享將主要介紹今日頭條推薦系統(tǒng)概覽以及內容分析、用戶標簽虽填、評估分析丁恭,內容安全等原理。
一斋日、系統(tǒng)概覽
推薦系統(tǒng)牲览,如果用形式化的方式去描述實際上是擬合一個用戶對內容滿意度的函數(shù),這個函數(shù)需要輸入三個維度的變量恶守。第一個維度是內容第献。頭條現(xiàn)在已經是一個綜合內容平臺,圖文兔港、視頻庸毫、UGC小視頻、問答衫樊、微頭條飒赃,每種內容有很多自己的特征利花,需要考慮怎樣提取不同內容類型的特征做好推薦。第二個維度是用戶特征载佳。包括各種興趣標簽炒事,職業(yè)、年齡蔫慧、性別等挠乳,還有很多模型刻劃出的隱式用戶興趣等。第三個維度是環(huán)境特征姑躲。這是移動互聯(lián)網時代推薦的特點睡扬,用戶隨時隨地移動,在工作場合黍析、通勤威蕉、旅游等不同的場景,信息偏好有所偏移橄仍。結合三方面的維度韧涨,模型會給出一個預估,即推測推薦內容在這一場景下對這一用戶是否合適侮繁。
這里還有一個問題虑粥,如何引入無法直接衡量的目標?
推薦模型中宪哩,點擊率娩贷、閱讀時間、點贊锁孟、評論彬祖、轉發(fā)包括點贊都是可以量化的目標,能夠用模型直接擬合做預估品抽,看線上提升情況可以知道做的好不好储笑。但一個大體量的推薦系統(tǒng),服務用戶眾多圆恤,不能完全由指標評估突倍,引入數(shù)據(jù)指標以外的要素也很重要。
比如廣告和特型內容頻控盆昙。像問答卡片就是比較特殊的內容形式羽历,其推薦的目標不完全是讓用戶瀏覽,還要考慮吸引用戶回答為社區(qū)貢獻內容淡喜。這些內容和普通內容如何混排秕磷,怎樣控制頻控都需要考慮。
此外炼团,平臺出于內容生態(tài)和社會責任的考量澎嚣,像低俗內容的打壓疏尿,標題黨、低質內容的打壓币叹,重要新聞的置頂润歉、加權模狭、強插颈抚,低級別賬號內容降權都是算法本身無法完成,需要進一步對內容進行干預嚼鹉。
下面我將簡單介紹在上述算法目標的基礎上如何對其實現(xiàn)贩汉。
前面提到的公式y(tǒng) = F(Xi ,Xu ,Xc),是一個很經典的監(jiān)督學習問題锚赤∑ノ瑁可實現(xiàn)的方法有很多,比如傳統(tǒng)的協(xié)同過濾模型线脚,監(jiān)督學習算法Logistic Regression模型赐稽,基于深度學習的模型,F(xiàn)actorization Machine和GBDT等浑侥。
一個優(yōu)秀的工業(yè)級推薦系統(tǒng)需要非常靈活的算法實驗平臺姊舵,可以支持多種算法組合,包括模型結構調整寓落。因為很難有一套通用的模型架構適用于所有的推薦場景±ǘ。現(xiàn)在很流行將LR和DNN結合,前幾年Facebook也將LR和GBDT算法做結合伶选。今日頭條旗下幾款產品都在沿用同一套強大的算法推薦系統(tǒng)史飞,但根據(jù)業(yè)務場景不同,模型架構會有所調整仰税。
模型之后再看一下典型的推薦特征构资,主要有四類特征會對推薦起到比較重要的作用。
第一類是相關性特征陨簇,就是評估內容的屬性和與用戶是否匹配蚯窥。顯性的匹配包括關鍵詞匹配、分類匹配塞帐、來源匹配拦赠、主題匹配等。像FM模型中也有一些隱性匹配葵姥,從用戶向量與內容向量的距離可以得出荷鼠。
第二類是環(huán)境特征,包括地理位置榔幸、時間允乐。這些既是bias特征矮嫉,也能以此構建一些匹配特征。
第三類是熱度特征牍疏。包括全局熱度蠢笋、分類熱度,主題熱度鳞陨,以及關鍵詞熱度等昨寞。內容熱度信息在大的推薦系統(tǒng)特別在用戶冷啟動的時候非常有效。
第四類是協(xié)同特征厦滤,它可以在部分程度上幫助解決所謂算法越推越窄的問題援岩。協(xié)同特征并非考慮用戶已有歷史。而是通過用戶行為分析不同用戶間相似性掏导,比如點擊相似享怀、興趣分類相似、主題相似趟咆、興趣詞相似添瓷,甚至向量相似,從而擴展模型的探索能力值纱。
模型的訓練上鳞贷,頭條系大部分推薦產品采用實時訓練。實時訓練省資源并且反饋快计雌,這對信息流產品非常重要悄晃。用戶需要行為信息可以被模型快速捕捉并反饋至下一刷的推薦效果。我們線上目前基于storm集群實時處理樣本數(shù)據(jù)凿滤,包括點擊妈橄、展現(xiàn)、收藏翁脆、分享等動作類型眷蚓。模型參數(shù)服務器是內部開發(fā)的一套高性能的系統(tǒng),因為頭條數(shù)據(jù)規(guī)模增長太快反番,類似的開源系統(tǒng)穩(wěn)定性和性能無法滿足沙热,而我們自研的系統(tǒng)底層做了很多針對性的優(yōu)化,提供了完善運維工具罢缸,更適配現(xiàn)有的業(yè)務場景篙贸。
目前,頭條的推薦算法模型在世界范圍內也是比較大的枫疆,包含幾百億原始特征和數(shù)十億向量特征爵川。整體的訓練過程是線上服務器記錄實時特征,導入到Kafka文件隊列中息楔,然后進一步導入Storm集群消費Kafka數(shù)據(jù)寝贡,客戶端回傳推薦的label構造訓練樣本扒披,隨后根據(jù)最新樣本進行在線訓練更新模型參數(shù),最終線上模型得到更新圃泡。這個過程中主要的延遲在用戶的動作反饋延時碟案,因為文章推薦后用戶不一定馬上看,不考慮這部分時間颇蜡,整個系統(tǒng)是幾乎實時的价说。
但因為頭條目前的內容量非常大,加上小視頻內容有千萬級別澡匪,推薦系統(tǒng)不可能所有內容全部由模型預估熔任。所以需要設計一些召回策略褒链,每次推薦時從海量內容中篩選出千級別的內容庫唁情。召回策略最重要的要求是性能要極致,一般超時不能超過50毫秒甫匹。
召回策略種類有很多甸鸟,我們主要用的是倒排的思路。離線維護一個倒排兵迅,這個倒排的key可以是分類抢韭,topic,實體恍箭,來源等刻恭,排序考慮熱度、新鮮度扯夭、動作等鳍贾。線上召回可以迅速從倒排中根據(jù)用戶興趣標簽對內容做截斷,高效的從很大的內容庫中篩選比較靠譜的一小部分內容交洗。
二骑科、內容分析
內容分析包括文本分析,圖片分析和視頻分析构拳。頭條一開始主要做資訊咆爽,今天我們主要講一下文本分析。文本分析在推薦系統(tǒng)中一個很重要的作用是用戶興趣建模置森。沒有內容及文本標簽斗埂,無法得到用戶興趣標簽。舉個例子凫海,只有知道文章標簽是互聯(lián)網呛凶,用戶看了互聯(lián)網標簽的文章,才能知道用戶有互聯(lián)網標簽盐碱,其他關鍵詞也一樣把兔。
另一方面沪伙,文本內容的標簽可以直接幫助推薦特征,比如魅族的內容可以推薦給關注魅族的用戶县好,這是用戶標簽的匹配围橡。如果某段時間推薦主頻道效果不理想,出現(xiàn)推薦窄化缕贡,用戶會發(fā)現(xiàn)到具體的頻道推薦(如科技翁授、體育、娛樂晾咪、軍事等)中閱讀后收擦,再回主feed,推薦效果會更好。因為整個模型是打通的谍倦,子頻道探索空間較小济欢,更容易滿足用戶需求。只通過單一信道反饋提高推薦準確率難度會比較大钮糖,子頻道做的好很重要陡舅。而這也需要好的內容分析。
上圖是今日頭條的一個實際文本case叼旋〕鸲撸可以看到,這篇文章有分類夫植、關鍵詞讹剔、topic、實體詞等文本特征详民。當然不是沒有文本特征延欠,推薦系統(tǒng)就不能工作,推薦系統(tǒng)最早期應用在Amazon,甚至沃爾瑪時代就有阐斜,包括Netfilx做視頻推薦也沒有文本特征直接協(xié)同過濾推薦衫冻。但對資訊類產品而言,大部分是消費當天內容谒出,沒有文本特征新內容冷啟動非常困難隅俘,協(xié)同類特征無法解決文章冷啟動問題。
今日頭條推薦系統(tǒng)主要抽取的文本特征包括以下幾類笤喳。首先是語義標簽類特征为居,顯式為文章打上語義標簽。這部分標簽是由人定義的特征杀狡,每個標簽有明確的意義蒙畴,標簽體系是預定義的。此外還有隱式語義特征,主要是topic特征和關鍵詞特征膳凝,其中topic特征是對于詞概率分布的描述碑隆,無明確意義;而關鍵詞特征會基于一些統(tǒng)一特征描述蹬音,無明確集合上煤。
另外文本相似度特征也非常重要。在頭條著淆,曾經用戶反饋最大的問題之一就是為什么總推薦重復的內容劫狠。這個問題的難點在于,每個人對重復的定義不一樣永部。舉個例子独泞,有人覺得這篇講皇馬和巴薩的文章,昨天已經看過類似內容苔埋,今天還說這兩個隊那就是重復懦砂。但對于一個重度球迷而言,尤其是巴薩的球迷讲坎,恨不得所有報道都看一遍孕惜。解決這一問題需要根據(jù)判斷相似文章的主題愧薛、行文晨炕、主體等內容,根據(jù)這些特征做線上策略毫炉。
同樣瓮栗,還有時空特征,分析內容的發(fā)生地點以及時效性瞄勾。比如武漢限行的事情推給北京用戶可能就沒有意義费奸。最后還要考慮質量相關特征,判斷內容是否低俗进陡,色情愿阐,是否是軟文,雞湯趾疚?
上圖是頭條語義標簽的特征和使用場景缨历。他們之間層級不同,要求不同糙麦。
分類的目標是覆蓋全面辛孵,希望每篇內容每段視頻都有分類;而實體體系要求精準赡磅,相同名字或內容要能明確區(qū)分究竟指代哪一個人或物魄缚,但不用覆蓋很全。概念體系則負責解決比較精確又屬于抽象概念的語義焚廊。這是我們最初的分類冶匹,實踐中發(fā)現(xiàn)分類和概念在技術上能互用习劫,后來統(tǒng)一用了一套技術架構。
目前嚼隘,隱式語義特征已經可以很好的幫助推薦榜聂,而語義標簽需要持續(xù)標注,新名詞新概念不斷出現(xiàn)嗓蘑,標注也要不斷迭代须肆。其做好的難度和資源投入要遠大于隱式語義特征,那為什么還需要語義標簽桩皿?有一些產品上的需要豌汇,比如頻道需要有明確定義的分類內容和容易理解的文本標簽體系。語義標簽的效果是檢查一個公司NLP技術水平的試金石泄隔。
今日頭條推薦系統(tǒng)的線上分類采用典型的層次化文本分類算法拒贱。最上面Root,下面第一層的分類是像科技佛嬉、體育逻澳、財經、娛樂暖呕,體育這樣的大類斜做,再下面細分足球、籃球湾揽、乒乓球瓤逼、網球、田徑库物、游泳等霸旗,足球再細分國際足球、中國足球戚揭,中國足球又細分中甲诱告、中超、國家隊等民晒,相比單獨的分類器精居,利用層次化文本分類算法能更好地解決數(shù)據(jù)傾斜的問題。有一些例外是镀虐,如果要提高召回箱蟆,可以看到我們連接了一些飛線。這套架構通用刮便,但根據(jù)不同的問題難度空猜,每個元分類器可以異構,像有些分類SVM效果很好,有些要結合CNN辈毯,有些要結合RNN再處理一下坝疼。
上圖是一個實體詞識別算法的case∽晃郑基于分詞結果和詞性標注選取候選钝凶,期間可能需要根據(jù)知識庫做一些拼接,有些實體是幾個詞的組合唁影,要確定哪幾個詞結合在一起能映射實體的描述耕陷。如果結果映射多個實體還要通過詞向量、topic分布甚至詞頻本身等去歧据沈,最后計算一個相關性模型哟沫。
三、用戶標簽
內容分析和用戶標簽是推薦系統(tǒng)的兩大基石锌介。內容分析涉及到機器學習的內容多一些嗜诀,相比而言,用戶標簽工程挑戰(zhàn)更大孔祸。
今日頭條常用的用戶標簽包括用戶感興趣的類別和主題隆敢、關鍵詞、來源崔慧、基于興趣的用戶聚類以及各種垂直興趣特征(車型拂蝎,體育球隊,股票等)尊浪。還有性別匣屡、年齡、地點等信息拇涤。性別信息通過用戶第三方社交賬號登錄得到。年齡信息通常由模型預測誉结,通過機型鹅士、閱讀時間分布等預估。常駐地點來自用戶授權訪問位置信息惩坑,在位置信息的基礎上通過傳統(tǒng)聚類的方法拿到常駐點掉盅。常駐點結合其他信息,可以推測用戶的工作地點以舒、出差地點趾痘、旅游地點。這些用戶標簽非常有助于推薦蔓钟。
當然最簡單的用戶標簽是瀏覽過的內容標簽永票。但這里涉及到一些數(shù)據(jù)處理策略。主要包括:一、過濾噪聲侣集。通過停留時間短的點擊键俱,過濾標題黨。二世分、熱點懲罰编振。對用戶在一些熱門文章(如前段時間PG One的新聞)上的動作做降權處理。理論上臭埋,傳播范圍較大的內容踪央,置信度會下降。三瓢阴、時間衰減杯瞻。用戶興趣會發(fā)生偏移,因此策略更偏向新的用戶行為炫掐。因此魁莉,隨著用戶動作的增加,老的特征權重會隨時間衰減募胃,新動作貢獻的特征權重會更大旗唁。四、懲罰展現(xiàn)痹束。如果一篇推薦給用戶的文章沒有被點擊检疫,相關特征(類別,關鍵詞祷嘶,來源)權重會被懲罰屎媳。當然同時,也要考慮全局背景论巍,是不是相關內容推送比較多烛谊,以及相關的關閉和dislike信號等。
用戶標簽挖掘總體比較簡單嘉汰,主要還是剛剛提到的工程挑戰(zhàn)丹禀。頭條用戶標簽第一版是批量計算框架,流程比較簡單鞋怀,每天抽取昨天的日活用戶過去兩個月的動作數(shù)據(jù)双泪,在Hadoop集群上批量計算結果。
但問題在于密似,隨著用戶高速增長焙矛,興趣模型種類和其他批量處理任務都在增加,涉及到的計算量太大残腌。2014年村斟,批量處理任務幾百萬用戶標簽更新的Hadoop任務贫导,當天完成已經開始勉強。集群計算資源緊張很容易影響其它工作邓梅,集中寫入分布式存儲系統(tǒng)的壓力也開始增大脱盲,并且用戶興趣標簽更新延遲越來越高。
面對這些挑戰(zhàn)日缨。2014年底今日頭條上線了用戶標簽Storm集群流式計算系統(tǒng)钱反。改成流式之后,只要有用戶動作更新就更新標簽匣距,CPU代價比較小面哥,可以節(jié)省80%的CPU時間,大大降低了計算資源開銷毅待。同時尚卫,只需幾十臺機器就可以支撐每天數(shù)千萬用戶的興趣模型更新,并且特征更新速度非呈欤快吱涉,基本可以做到準實時。這套系統(tǒng)從上線一直使用至今外里。
當然怎爵,我們也發(fā)現(xiàn)并非所有用戶標簽都需要流式系統(tǒng)。像用戶的性別盅蝗、年齡鳖链、常駐地點這些信息,不需要實時重復計算墩莫,就仍然保留daily更新芙委。
四、評估分析
上面介紹了推薦系統(tǒng)的整體架構狂秦,那么如何評估推薦效果好不好灌侣?
有一句我認為非常有智慧的話,“一個事情沒法評估就沒法優(yōu)化”故痊。對推薦系統(tǒng)也是一樣顶瞳。
事實上,很多因素都會影響推薦效果愕秫。比如侯選集合變化,召回模塊的改進或增加焰络,推薦特征的增加戴甩,模型架構的改進在,算法參數(shù)的優(yōu)化等等闪彼,不一一舉例甜孤。評估的意義就在于协饲,很多優(yōu)化最終可能是負向效果,并不是優(yōu)化上線后效果就會改進缴川。
全面的評估推薦系統(tǒng)茉稠,需要完備的評估體系、強大的實驗平臺以及易用的經驗分析工具把夸。所謂完備的體系就是并非單一指標衡量而线,不能只看點擊率或者停留時長等,需要綜合評估恋日。過去幾年我們一直在嘗試膀篮,能不能綜合盡可能多的指標合成唯一的評估指標,但仍在探索中岂膳。目前誓竿,我們上線還是要由各業(yè)務比較資深的同學組成評審委員會深入討論后決定。
很多公司算法做的不好谈截,并非是工程師能力不夠筷屡,而是需要一個強大的實驗平臺,還有便捷的實驗分析工具簸喂,可以智能分析數(shù)據(jù)指標的置信度毙死。
一個良好的評估體系建立需要遵循幾個原則,首先是兼顧短期指標與長期指標娘赴。我在之前公司負責電商方向的時候觀察到规哲,很多策略調整短期內用戶覺得新鮮,但是長期看其實沒有任何助益诽表。
其次唉锌,要兼顧用戶指標和生態(tài)指標。今日頭條作為內容分創(chuàng)作平臺竿奏,既要為內容創(chuàng)作者提供價值袄简,讓他更有尊嚴的創(chuàng)作,也有義務滿足用戶泛啸,這兩者要平衡绿语。還有廣告主利益也要考慮,這是多方博弈和平衡的過程候址。
另外吕粹,要注意協(xié)同效應的影響。實驗中嚴格的流量隔離很難做到岗仑,要注意外部效應匹耕。
強大的實驗平臺非常直接的優(yōu)點是,當同時在線的實驗比較多時荠雕,可以由平臺自動分配流量稳其,無需人工溝通驶赏,并且實驗結束流量立即回收,提高管理效率既鞠。這能幫助公司降低分析成本煤傍,加快算法迭代效應,使整個系統(tǒng)的算法優(yōu)化工作能夠快速往前推進嘱蛋。
這是頭條A/B Test實驗系統(tǒng)的基本原理蚯姆。首先我們會做在離線狀態(tài)下做好用戶分桶,然后線上分配實驗流量浑槽,將桶里用戶打上標簽蒋失,分給實驗組。舉個例子桐玻,開一個10%流量的實驗篙挽,兩個實驗組各5%,一個5%是基線镊靴,策略和線上大盤一樣铣卡,另外一個是新的策略。
實驗過程中用戶動作會被搜集偏竟,基本上是準實時煮落,每小時都可以看到。但因為小時數(shù)據(jù)有波動踊谋,通常是以天為時間節(jié)點來看蝉仇。動作搜集后會有日志處理、分布式統(tǒng)計殖蚕、寫入數(shù)據(jù)庫轿衔,非常便捷。
在這個系統(tǒng)下工程師只需要設置流量需求睦疫、實驗時間害驹、定義特殊過濾條件,自定義實驗組ID蛤育。系統(tǒng)可以自動生成:實驗數(shù)據(jù)對比宛官、實驗數(shù)據(jù)置信度、實驗結論總結以及實驗優(yōu)化建議瓦糕。
當然底洗,只有實驗平臺是遠遠不夠的。線上實驗平臺只能通過數(shù)據(jù)指標變化推測用戶體驗的變化咕娄,但數(shù)據(jù)指標和用戶體驗存在差異枷恕,很多指標不能完全量化。很多改進仍然要通過人工分析谭胚,重大改進需要人工評估二次確認徐块。
五、內容安全
最后要介紹今日頭條在內容安全上的一些舉措灾而。頭條現(xiàn)在已經是國內最大的內容創(chuàng)作與分發(fā)憑條胡控,必須越來越重視社會責任和行業(yè)領導者的責任。如果1%的推薦內容出現(xiàn)問題旁趟,就會產生較大的影響昼激。
因此頭條從創(chuàng)立伊始就把內容安全放在公司最高優(yōu)先級隊列。成立之初锡搜,已經專門設有審核團隊負責內容安全橙困。當時研發(fā)所有客戶端、后端耕餐、算法的同學一共才不到40人凡傅,頭條非常重視內容審核。
現(xiàn)在肠缔,今日頭條的內容主要來源于兩部分夏跷,一是具有成熟內容生產能力的PGC平臺,一是UGC用戶內容明未,如問答槽华、用戶評論、微頭條趟妥。這兩部分內容需要通過統(tǒng)一的審核機制猫态。如果是數(shù)量相對少的PGC內容,會直接進行風險審核披摄,沒有問題會大范圍推薦亲雪。UGC內容需要經過一個風險模型的過濾,有問題的會進入二次風險審核行疏。審核通過后匆光,內容會被真正進行推薦。這時如果收到一定量以上的評論或者舉報負向反饋酿联,還會再回到復審環(huán)節(jié)终息,有問題直接下架。整個機制相對而言比較健全贞让,作為行業(yè)領先者周崭,在內容安全上,今日頭條一直用最高的標準要求自己喳张。
分享內容識別技術主要鑒黃模型续镇,謾罵模型以及低俗模型。今日頭條的低俗模型通過深度學習算法訓練销部,樣本庫非常大摸航,圖片制跟、文本同時分析。這部分模型更注重召回率酱虎,準確率甚至可以犧牲一些雨膨。謾罵模型的樣本庫同樣超過百萬,召回率高達95%+读串,準確率80%+聊记。如果用戶經常出言不諱或者不當?shù)脑u論,我們有一些懲罰機制恢暖。
泛低質識別涉及的情況非常多排监,像假新聞、黑稿杰捂、題文不符舆床、標題黨、內容質量低等等琼娘,這部分內容由機器理解是非常難的峭弟,需要大量反饋信息,包括其他樣本信息比對脱拼。目前低質模型的準確率和召回率都不是特別高瞒瘸,還需要結合人工復審,將閾值提高熄浓。目前最終的召回已達到95%情臭,這部分其實還有非常多的工作可以做。頭條人工智能實驗室李航老師目前也在和密歇根大學共建科研項目赌蔑,設立謠言識別平臺俯在。
以上是頭條推薦系統(tǒng)的原理分享,希望未來得到更多的建議娃惯,幫助我們更好改進工作跷乐。