您的位置:首頁>正文

百靈鳥SEO演算法原理大揭密

今天, 演算法分發已經是資訊平臺、搜尋引擎、流覽器、社交軟體等幾乎所有軟體的標配, 但同時, 演算法也開始面臨質疑、挑戰和誤解。 今日頭條的推薦演算法, 從2012年9月第一版開發運行至今, 已經經過四次大的調整和修改。

今日頭條委託資深演算法架構師曹歡歡博士, 公開今日頭條的演算法原理, 以期推動整個行業問診演算法、建言演算法;通過讓演算法透明, 來消除各界對演算法的誤解, 並逐步推動整個行業讓演算法更好的造福社會。

以下為《今日頭條演算法原理》全文。

今日頭條資深演算法架構師曹歡歡:

本次分享將主要介紹今日頭條推薦系統概覽以及內容分析、使用者標籤、評估分析, 內容安全等原理。

一、系統概覽

推薦系統, 如果用形式化的方式去描述實際上是擬合一個使用者對內容滿意度的函數, 這個函數需要輸入三個維度的變數。 第一個維度是內容。 頭條現在已經是一個綜合內容平臺, 圖文、視頻、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,實體,來源等,排序考慮熱度、新鮮度、動作等。線上召回可以迅速從倒排中根據使用者興趣標籤對內容做截斷,高效的從很大的內容庫中篩選比較靠譜的一小部分內容。

二、內容分析

內容分析包括文本分析,圖片分析和視頻分析。頭條一開始主要做資訊,今天我們主要講一下文本分析。文本分析在推薦系統中一個很重要的作用是用戶興趣建模。沒有內容及文本標籤,無法得到使用者興趣標籤。舉個例子,只有知道文章標籤是互聯網,用戶看了互聯網標籤的文章,才能知道用戶有互聯網標籤,其他關鍵字也一樣。

另一方面,文本內容的標籤可以直接説明推薦特徵,比如魅族的內容可以推薦給關注魅族的用戶,這是用戶標籤的匹配。如果某段時間推薦主頻道效果不理想,出現推薦窄化,用戶會發現到具體的頻道推薦(如科技、體育、娛樂、軍事等)中閱讀後,再回主feed,推薦效果會更好。因為整個模型是打通的,子頻道探索空間較小,更容易滿足用戶需求。只通過單一通道回饋提高推薦準確率難度會比較大,子頻道做的好很重要。而這也需要好的內容分析。

上圖是今日頭條的一個實際文本case。可以看到,這篇文章有分類、關鍵字、topic、實體詞等文本特徵。當然不是沒有文本特徵,推薦系統就不能工作,推薦系統最早期應用在Amazon,甚至沃爾瑪時代就有,包括Netfilx做視頻推薦也沒有文本特徵直接協同過濾推薦。但對資訊類產品而言,大部分是消費當天內容,沒有文本特徵新內容冷開機非常困難,協同類特徵無法解決文章冷開機問題。

今日頭條推薦系統主要抽取的文本特徵包括以下幾類。首先是語義標籤類特徵,顯式為文章打上語義標籤。這部分標籤是由人定義的特徵,每個標籤有明確的意義,標籤體系是預定義的。此外還有隱式語義特徵,主要是topic特徵和關鍵字特徵,其中topic特徵是對於詞概率分佈的描述,無明確意義;而關鍵字特徵會基於一些統一特徵描述,無明確集合。

另外文本相似度特徵也非常重要。在頭條,曾經用戶回饋最大的問題之一就是為什麼總推薦重複的內容。這個問題的難點在於,每個人對重複的定義不一樣。舉個例子,有人覺得這篇講皇馬和巴薩的文章,昨天已經看過類似內容,今天還說這兩個隊那就是重複。但對於一個重度球迷而言,尤其是巴薩的球迷,恨不得所有報導都看一遍。解決這一問題需要根據判斷相似文章的主題、行文、主體等內容,根據這些特徵做線上策略。

同樣,還有時空特徵,分析內容的發生地點以及時效性。比如武漢限行的事情推給北京用戶可能就沒有意義。最後還要考慮品質相關特徵,判斷內容是否低俗,色情,是否是軟文,雞湯?

上圖是頭條語義標籤的特徵和使用場景。他們之間層級不同,要求不同。

分類的目標是覆蓋全面,希望每篇內容每段視頻都有分類;而實體體系要求精准,相同名字或內容要能明確區分究竟指代哪一個人或物,但不用覆蓋很全。概念體系則負責解決比較精確又屬於抽象概念的語義。這是我們最初的分類,實踐中發現分類和概念在技術上能互用,後來統一用了一套技術架構。

目前,隱式語義特徵已經可以很好的説明推薦,而語義標籤需要持續標注,新名詞新概念不斷出現,標注也要不斷反覆運算。其做好的難度和資源投入要遠大於隱式語義特徵,那為什麼還需要語義標籤?有一些產品上的需要,比如頻道需要有明確定義的分類內容和容易理解的文本標籤體系。語義標籤的效果是檢查一個公司NLP技術水準的試金石。

今日頭條推薦系統的線上分類採用典型的層次化文本分類演算法。最上面Root,下面第一層的分類是像科技、體育、財經、娛樂,體育這樣的大類,再下面細分足球、籃球、乒乓球、網球、田徑、游泳...,足球再細分國際足球、中國足球,中國足球又細分中甲、中超、國家隊...,相比單獨的分類器,利用層次化文本分類演算法能更好地解決資料傾斜的問題。有一些例外是,如果要提高召回,可以看到我們連接了一些飛線。這套架構通用,但根據不同的問題難度,每個元分類器可以異構,像有些分類SVM效果很好,有些要結合CNN,有些要結合RNN再處理一下。

上圖是一個實體詞識別演算法的case。基於分詞結果和詞性標注選取候選,期間可能需要根據知識庫做一些拼接,有些實體是幾個詞的組合,要確定哪幾個詞結合在一起能映射實體的描述。如果結果映射多個實體還要通過詞向量、topic分佈甚至詞頻本身等去歧,最後計算一個相關性模型。

三、使用者標籤

內容分析和使用者標籤是推薦系統的兩大基石。內容分析涉及到機器學習的內容多一些,相比而言,使用者標籤工程挑戰更大。

今日頭條常用的用戶標籤包括使用者感興趣的類別和主題、關鍵字、來源、基於興趣的用戶聚類以及各種垂直興趣特徵(車型,體育球隊,股票等)。還有性別、年齡、地點等資訊。性別資訊通過使用者協力廠商社交帳號登錄得到。年齡資訊通常由模型預測,通過機型、閱讀時間分佈等預估。常駐地點來自使用者授權訪問位置資訊,在位置資訊的基礎上通過傳統聚類的方法拿到常駐點。常駐點結合其他資訊,可以推測使用者的工作地點、出差地點、旅遊地點。這些用戶標籤非常有助於推薦。

當然最簡單的用戶標籤是流覽過的內容標籤。但這裡涉及到一些資料處理策略。主要包括:一、過濾雜訊。通過停留時間短的點擊,過濾標題黨。二、熱點懲罰。對用戶在一些熱門文章(如前段時間PG One的新聞)上的動作做降權處理。理論上,傳播範圍較大的內容,置信度會下降。三、時間衰減。用戶興趣會發生偏移,因此策略更偏向新的用戶行為。因此,隨著使用者動作的增加,老的特徵權重會隨時間衰減,新動作貢獻的特徵權重會更大。四、懲罰展現。如果一篇推薦給用戶的文章沒有被點擊,相關特徵(類別,關鍵字,來源)權重會被懲罰。當然同時,也要考慮全域背景,是不是相關內容推送比較多,以及相關的關閉和dislike信號等。

用戶標籤挖掘總體比較簡單,主要還是剛剛提到的工程挑戰。頭條用戶標籤第一版是批量計算框架,流程比較簡單,每天抽取昨天的日活用戶過去兩個月的動作資料,在Hadoop集群上批量計算結果。

但問題在於,隨著使用者高速增長,興趣模型種類和其他批量處理任務都在增加,涉及到的計算量太大。2014年,批量處理任務幾百萬用戶標籤更新的Hadoop任務,當天完成已經開始勉強。集群計算資源緊張很容易影響其它工作,集中寫入分散式存儲系統的壓力也開始增大,並且用戶興趣標籤更新延遲越來越高。

面對這些挑戰。2014年底今日頭條上線了用戶標籤Storm集群流式計算系統。改成流式之後,只要有用戶動作更新就更新標籤,CPU代價比較小,可以節省80%的CPU時間,大大降低了計算資源開銷。同時,只需幾十台機器就可以支撐每天數千萬使用者的興趣模型更新,並且特徵更新速度非常快,基本可以做到准即時。這套系統從上線一直使用至今。

當然,我們也發現並非所有使用者標籤都需要流式系統。像使用者的性別、年齡、常駐地點這些資訊,不需要即時重複計算,就仍然保留daily更新。

四、評估分析

上面介紹了推薦系統的整體架構,那麼如何評估推薦效果好不好?

有一句百靈鳥SEO認為非常有智慧的話,“一個事情沒法評估就沒法優化”。對推薦系統也是一樣。

事實上,很多因素都會影響推薦效果。比如侯選集合變化,召回模組的改進或增加,推薦特徵的增加,模型架構的改進在,演算法參數的優化等等,不一一舉例。評估的意義就在於,很多優化最終可能是負向效果,並不是優化上線後效果就會改進。

全面的評估推薦系統,需要完備的評估體系、強大的實驗平臺以及易用的經驗分析工具。所謂完備的體系就是並非單一指標衡量,不能只看點擊率或者停留時長等,需要綜合評估。過去幾年我們一直在嘗試,能不能綜合盡可能多的指標合成唯一的評估指標,但仍在探索中。目前,我們上線還是要由各業務比較資深的同學組成評審委員會深入討論後決定。

很多公司演算法做的不好,並非是工程師能力不夠,而是需要一個強大的實驗平臺,還有便捷的實驗分析工具,可以智慧分析資料指標的置信度。

一個良好的評估體系建立需要遵循幾個原則,首先是兼顧短期指標與長期指標。我在之前公司負責電商方向的時候觀察到,很多策略調整短期內用戶覺得新鮮,但是長期看其實沒有任何助益。

其次,要兼顧用戶指標和生態指標。今日頭條作為內容分創作平臺,既要為內容創作者提供價值,讓他更有尊嚴的創作,也有義務滿足用戶,這兩者要平衡。還有廣告主利益也要考慮,這是多方博弈和平衡的過程。

另外,要注意協同效應的影響。實驗中嚴格的流量隔離很難做到,要注意外部效應。

強大的實驗平臺非常直接的優點是,當同時線上的實驗比較多時,可以由平臺自動分配流量,無需人工溝通,並且實驗結束流量立即回收,提高管理效率。這能説明公司降低分析成本,加快演算法反覆運算效應,使整個系統的演算法優化工作能夠快速往前推進。

這是頭條A/B Test實驗系統的基本原理。首先我們會做在離線狀態下做好使用者分桶,然後線上分配實驗流量,將桶裡用戶打上標籤,分給實驗組。舉個例子,開一個10%流量的實驗,兩個實驗組各5%,一個5%是基線,策略和線上大盤一樣,另外一個是新的策略。

實驗過程中用戶動作會被搜集,基本上是准即時,每小時都可以看到。但因為小時資料有波動,通常是以天為時間節點來看。動作搜集後會有日誌處理、分散式統計、寫入資料庫,非常便捷。

在這個系統下工程師只需要設置流量需求、實驗時間、定義特殊過濾條件,自訂實驗組ID。系統可以自動生成:實驗資料對比、實驗資料置信度、實驗結論總結以及實驗優化建議。

當然,只有實驗平臺是遠遠不夠的。線上實驗平臺只能通過資料指標變化推測使用者體驗的變化,但資料指標和使用者體驗存在差異,很多指標不能完全量化。很多改進仍然要通過人工分析,重大改進需要人工評估二次確認。

五、內容安全

最後要介紹今日頭條在內容安全上的一些舉措。頭條現在已經是國內最大的內容創作與分發憑條,必須越來越重視社會責任和行業領導者的責任。如果1%的推薦內容出現問題,就會產生較大的影響。

因此頭條從創立伊始就把內容安全放在公司最高優先順序佇列。成立之初,已經專門設有審核團隊負責內容安全。當時研發所有用戶端、後端、演算法的同學一共才不到40人,頭條非常重視內容審核。

現在,今日頭條的內容主要來源於兩部分,一是具有成熟內容生產能力的PGC平臺

一是UGC使用者內容,如問答、使用者評論、微頭條。這兩部分內容需要通過統一的審核機制。如果是數量相對少的PGC內容,會直接進行風險審核,沒有問題會大範圍推薦。UGC內容需要經過一個風險模型的過濾,有問題的會進入二次風險審核。審核通過後,內容會被真正進行推薦。這時如果收到一定量以上的評論或者舉報負向回饋,還會再回到複審環節,有問題直接下架。整個機制相對而言比較健全,作為行業領先者,在內容安全上,今日頭條一直用最高的標準要求自己。

分享內容識別技術主要鑒黃模型,謾駡模型以及低俗模型。今日頭條的低俗模型通過深度學習演算法訓練,樣本庫非常大,圖片、文本同時分析。這部分模型更注重召回率,準確率甚至可以犧牲一些。謾駡模型的樣本庫同樣超過百萬,召回率高達95%+,準確率80%+。如果用戶經常出言不諱或者不當的評論,我們有一些懲罰機制。

泛低質識別涉及的情況非常多,像假新聞、黑稿、題文不符、標題黨、內容品質低等等,這部分內容由機器理解是非常難的,需要大量回饋資訊,包括其他樣本資訊比對。目前低質模型的準確率和召回率都不是特別高,還需要結合人工複審,將閾值提高。目前最終的召回已達到95%,這部分其實還有非常多的工作可以做。頭條人工智慧實驗室李航老師目前也在和密西根大學共建科研項目,設立謠言識別平臺。

前面提到的公式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,實體,來源等,排序考慮熱度、新鮮度、動作等。線上召回可以迅速從倒排中根據使用者興趣標籤對內容做截斷,高效的從很大的內容庫中篩選比較靠譜的一小部分內容。

二、內容分析

內容分析包括文本分析,圖片分析和視頻分析。頭條一開始主要做資訊,今天我們主要講一下文本分析。文本分析在推薦系統中一個很重要的作用是用戶興趣建模。沒有內容及文本標籤,無法得到使用者興趣標籤。舉個例子,只有知道文章標籤是互聯網,用戶看了互聯網標籤的文章,才能知道用戶有互聯網標籤,其他關鍵字也一樣。

另一方面,文本內容的標籤可以直接説明推薦特徵,比如魅族的內容可以推薦給關注魅族的用戶,這是用戶標籤的匹配。如果某段時間推薦主頻道效果不理想,出現推薦窄化,用戶會發現到具體的頻道推薦(如科技、體育、娛樂、軍事等)中閱讀後,再回主feed,推薦效果會更好。因為整個模型是打通的,子頻道探索空間較小,更容易滿足用戶需求。只通過單一通道回饋提高推薦準確率難度會比較大,子頻道做的好很重要。而這也需要好的內容分析。

上圖是今日頭條的一個實際文本case。可以看到,這篇文章有分類、關鍵字、topic、實體詞等文本特徵。當然不是沒有文本特徵,推薦系統就不能工作,推薦系統最早期應用在Amazon,甚至沃爾瑪時代就有,包括Netfilx做視頻推薦也沒有文本特徵直接協同過濾推薦。但對資訊類產品而言,大部分是消費當天內容,沒有文本特徵新內容冷開機非常困難,協同類特徵無法解決文章冷開機問題。

今日頭條推薦系統主要抽取的文本特徵包括以下幾類。首先是語義標籤類特徵,顯式為文章打上語義標籤。這部分標籤是由人定義的特徵,每個標籤有明確的意義,標籤體系是預定義的。此外還有隱式語義特徵,主要是topic特徵和關鍵字特徵,其中topic特徵是對於詞概率分佈的描述,無明確意義;而關鍵字特徵會基於一些統一特徵描述,無明確集合。

另外文本相似度特徵也非常重要。在頭條,曾經用戶回饋最大的問題之一就是為什麼總推薦重複的內容。這個問題的難點在於,每個人對重複的定義不一樣。舉個例子,有人覺得這篇講皇馬和巴薩的文章,昨天已經看過類似內容,今天還說這兩個隊那就是重複。但對於一個重度球迷而言,尤其是巴薩的球迷,恨不得所有報導都看一遍。解決這一問題需要根據判斷相似文章的主題、行文、主體等內容,根據這些特徵做線上策略。

同樣,還有時空特徵,分析內容的發生地點以及時效性。比如武漢限行的事情推給北京用戶可能就沒有意義。最後還要考慮品質相關特徵,判斷內容是否低俗,色情,是否是軟文,雞湯?

上圖是頭條語義標籤的特徵和使用場景。他們之間層級不同,要求不同。

分類的目標是覆蓋全面,希望每篇內容每段視頻都有分類;而實體體系要求精准,相同名字或內容要能明確區分究竟指代哪一個人或物,但不用覆蓋很全。概念體系則負責解決比較精確又屬於抽象概念的語義。這是我們最初的分類,實踐中發現分類和概念在技術上能互用,後來統一用了一套技術架構。

目前,隱式語義特徵已經可以很好的説明推薦,而語義標籤需要持續標注,新名詞新概念不斷出現,標注也要不斷反覆運算。其做好的難度和資源投入要遠大於隱式語義特徵,那為什麼還需要語義標籤?有一些產品上的需要,比如頻道需要有明確定義的分類內容和容易理解的文本標籤體系。語義標籤的效果是檢查一個公司NLP技術水準的試金石。

今日頭條推薦系統的線上分類採用典型的層次化文本分類演算法。最上面Root,下面第一層的分類是像科技、體育、財經、娛樂,體育這樣的大類,再下面細分足球、籃球、乒乓球、網球、田徑、游泳...,足球再細分國際足球、中國足球,中國足球又細分中甲、中超、國家隊...,相比單獨的分類器,利用層次化文本分類演算法能更好地解決資料傾斜的問題。有一些例外是,如果要提高召回,可以看到我們連接了一些飛線。這套架構通用,但根據不同的問題難度,每個元分類器可以異構,像有些分類SVM效果很好,有些要結合CNN,有些要結合RNN再處理一下。

上圖是一個實體詞識別演算法的case。基於分詞結果和詞性標注選取候選,期間可能需要根據知識庫做一些拼接,有些實體是幾個詞的組合,要確定哪幾個詞結合在一起能映射實體的描述。如果結果映射多個實體還要通過詞向量、topic分佈甚至詞頻本身等去歧,最後計算一個相關性模型。

三、使用者標籤

內容分析和使用者標籤是推薦系統的兩大基石。內容分析涉及到機器學習的內容多一些,相比而言,使用者標籤工程挑戰更大。

今日頭條常用的用戶標籤包括使用者感興趣的類別和主題、關鍵字、來源、基於興趣的用戶聚類以及各種垂直興趣特徵(車型,體育球隊,股票等)。還有性別、年齡、地點等資訊。性別資訊通過使用者協力廠商社交帳號登錄得到。年齡資訊通常由模型預測,通過機型、閱讀時間分佈等預估。常駐地點來自使用者授權訪問位置資訊,在位置資訊的基礎上通過傳統聚類的方法拿到常駐點。常駐點結合其他資訊,可以推測使用者的工作地點、出差地點、旅遊地點。這些用戶標籤非常有助於推薦。

當然最簡單的用戶標籤是流覽過的內容標籤。但這裡涉及到一些資料處理策略。主要包括:一、過濾雜訊。通過停留時間短的點擊,過濾標題黨。二、熱點懲罰。對用戶在一些熱門文章(如前段時間PG One的新聞)上的動作做降權處理。理論上,傳播範圍較大的內容,置信度會下降。三、時間衰減。用戶興趣會發生偏移,因此策略更偏向新的用戶行為。因此,隨著使用者動作的增加,老的特徵權重會隨時間衰減,新動作貢獻的特徵權重會更大。四、懲罰展現。如果一篇推薦給用戶的文章沒有被點擊,相關特徵(類別,關鍵字,來源)權重會被懲罰。當然同時,也要考慮全域背景,是不是相關內容推送比較多,以及相關的關閉和dislike信號等。

用戶標籤挖掘總體比較簡單,主要還是剛剛提到的工程挑戰。頭條用戶標籤第一版是批量計算框架,流程比較簡單,每天抽取昨天的日活用戶過去兩個月的動作資料,在Hadoop集群上批量計算結果。

但問題在於,隨著使用者高速增長,興趣模型種類和其他批量處理任務都在增加,涉及到的計算量太大。2014年,批量處理任務幾百萬用戶標籤更新的Hadoop任務,當天完成已經開始勉強。集群計算資源緊張很容易影響其它工作,集中寫入分散式存儲系統的壓力也開始增大,並且用戶興趣標籤更新延遲越來越高。

面對這些挑戰。2014年底今日頭條上線了用戶標籤Storm集群流式計算系統。改成流式之後,只要有用戶動作更新就更新標籤,CPU代價比較小,可以節省80%的CPU時間,大大降低了計算資源開銷。同時,只需幾十台機器就可以支撐每天數千萬使用者的興趣模型更新,並且特徵更新速度非常快,基本可以做到准即時。這套系統從上線一直使用至今。

當然,我們也發現並非所有使用者標籤都需要流式系統。像使用者的性別、年齡、常駐地點這些資訊,不需要即時重複計算,就仍然保留daily更新。

四、評估分析

上面介紹了推薦系統的整體架構,那麼如何評估推薦效果好不好?

有一句百靈鳥SEO認為非常有智慧的話,“一個事情沒法評估就沒法優化”。對推薦系統也是一樣。

事實上,很多因素都會影響推薦效果。比如侯選集合變化,召回模組的改進或增加,推薦特徵的增加,模型架構的改進在,演算法參數的優化等等,不一一舉例。評估的意義就在於,很多優化最終可能是負向效果,並不是優化上線後效果就會改進。

全面的評估推薦系統,需要完備的評估體系、強大的實驗平臺以及易用的經驗分析工具。所謂完備的體系就是並非單一指標衡量,不能只看點擊率或者停留時長等,需要綜合評估。過去幾年我們一直在嘗試,能不能綜合盡可能多的指標合成唯一的評估指標,但仍在探索中。目前,我們上線還是要由各業務比較資深的同學組成評審委員會深入討論後決定。

很多公司演算法做的不好,並非是工程師能力不夠,而是需要一個強大的實驗平臺,還有便捷的實驗分析工具,可以智慧分析資料指標的置信度。

一個良好的評估體系建立需要遵循幾個原則,首先是兼顧短期指標與長期指標。我在之前公司負責電商方向的時候觀察到,很多策略調整短期內用戶覺得新鮮,但是長期看其實沒有任何助益。

其次,要兼顧用戶指標和生態指標。今日頭條作為內容分創作平臺,既要為內容創作者提供價值,讓他更有尊嚴的創作,也有義務滿足用戶,這兩者要平衡。還有廣告主利益也要考慮,這是多方博弈和平衡的過程。

另外,要注意協同效應的影響。實驗中嚴格的流量隔離很難做到,要注意外部效應。

強大的實驗平臺非常直接的優點是,當同時線上的實驗比較多時,可以由平臺自動分配流量,無需人工溝通,並且實驗結束流量立即回收,提高管理效率。這能説明公司降低分析成本,加快演算法反覆運算效應,使整個系統的演算法優化工作能夠快速往前推進。

這是頭條A/B Test實驗系統的基本原理。首先我們會做在離線狀態下做好使用者分桶,然後線上分配實驗流量,將桶裡用戶打上標籤,分給實驗組。舉個例子,開一個10%流量的實驗,兩個實驗組各5%,一個5%是基線,策略和線上大盤一樣,另外一個是新的策略。

實驗過程中用戶動作會被搜集,基本上是准即時,每小時都可以看到。但因為小時資料有波動,通常是以天為時間節點來看。動作搜集後會有日誌處理、分散式統計、寫入資料庫,非常便捷。

在這個系統下工程師只需要設置流量需求、實驗時間、定義特殊過濾條件,自訂實驗組ID。系統可以自動生成:實驗資料對比、實驗資料置信度、實驗結論總結以及實驗優化建議。

當然,只有實驗平臺是遠遠不夠的。線上實驗平臺只能通過資料指標變化推測使用者體驗的變化,但資料指標和使用者體驗存在差異,很多指標不能完全量化。很多改進仍然要通過人工分析,重大改進需要人工評估二次確認。

五、內容安全

最後要介紹今日頭條在內容安全上的一些舉措。頭條現在已經是國內最大的內容創作與分發憑條,必須越來越重視社會責任和行業領導者的責任。如果1%的推薦內容出現問題,就會產生較大的影響。

因此頭條從創立伊始就把內容安全放在公司最高優先順序佇列。成立之初,已經專門設有審核團隊負責內容安全。當時研發所有用戶端、後端、演算法的同學一共才不到40人,頭條非常重視內容審核。

現在,今日頭條的內容主要來源於兩部分,一是具有成熟內容生產能力的PGC平臺

一是UGC使用者內容,如問答、使用者評論、微頭條。這兩部分內容需要通過統一的審核機制。如果是數量相對少的PGC內容,會直接進行風險審核,沒有問題會大範圍推薦。UGC內容需要經過一個風險模型的過濾,有問題的會進入二次風險審核。審核通過後,內容會被真正進行推薦。這時如果收到一定量以上的評論或者舉報負向回饋,還會再回到複審環節,有問題直接下架。整個機制相對而言比較健全,作為行業領先者,在內容安全上,今日頭條一直用最高的標準要求自己。

分享內容識別技術主要鑒黃模型,謾駡模型以及低俗模型。今日頭條的低俗模型通過深度學習演算法訓練,樣本庫非常大,圖片、文本同時分析。這部分模型更注重召回率,準確率甚至可以犧牲一些。謾駡模型的樣本庫同樣超過百萬,召回率高達95%+,準確率80%+。如果用戶經常出言不諱或者不當的評論,我們有一些懲罰機制。

泛低質識別涉及的情況非常多,像假新聞、黑稿、題文不符、標題黨、內容品質低等等,這部分內容由機器理解是非常難的,需要大量回饋資訊,包括其他樣本資訊比對。目前低質模型的準確率和召回率都不是特別高,還需要結合人工複審,將閾值提高。目前最終的召回已達到95%,這部分其實還有非常多的工作可以做。頭條人工智慧實驗室李航老師目前也在和密西根大學共建科研項目,設立謠言識別平臺。

同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示