這篇文章由來自Twitter的Nicolas Koumchatzky和Anton Andryeyev共同撰寫,最初發表在Twitter的博客上。以下內容已經獲得Twitter的翻譯授權,并已通過Twitter的審校,查看英文原文Using Deep Learning at Scale in Twitter's Timelines。
從我們開始對信息流進行改進到現在已經有一年多時間了,我們進一步改進了底層的算法,從而為用戶呈現具有更高相關度的內容。
我們將會在這篇文章里介紹我們基于深度神經網絡的信息流排序算法,以及由Twitter內部AI團隊Cortex構建的AI平臺和它提供的建模功能。簡而言之,現在和未來的Twitter信息流將具有更高的相關度。這為我們打開了一扇大門,我們可以使用由深度學習社區提供的各種新穎的技術,特別是在NLP(自然語言處理)、對話理解和媒體領域。
我們如何對信息流進行排序?
在引入排序算法之前,信息流的組成非常簡單:收集所有由你的關注對象在你最后一次登錄Twitter之后發送的推文,再將它們按照時間倒序顯示出來。這個看起來很簡單,但要為數以億計的Twitter用戶提供這種穩定的體驗對我們來說是一個巨大的挑戰,它對我們的基礎設施和運維能力提出了很高的要求。
在引入排序算法之后,信息流的組成變得更加豐富。在收集推文之后,我們使用相關度模型對它們打分。這個分數是針對每個用戶對推文感興趣程度的預測。具有較高分數的推文被展示在信息流的最上面,其他推文緊隨其后顯示。根據你的信息流中已有的推文數量以及從你最后一次登錄Twitter至今的時間長短,我們還可能專門為你提供一個“你可能錯過的推文”模塊。這個模塊只包含少量具有最高相關度的推文。這樣做的目的是希望你能夠先看到重要的推文,然后再進一步查看按照時間排序的部分。
為了預測推文的相關度,我們的模型考慮到了以下幾個特征。
推文本身:鮮活度(recency)、是否包含媒體卡(圖像或視頻)、互動情況(如轉發或點贊次數)。推文的作者:你過去與作者的互動情況、你與作者之間關系的緊密程度、你與作者之間的關系是如何建立的。你自己:你參與過互動的推文、你使用Twitter的頻率和使用程度。我們使用的特征和各種特征之間的關系在不斷增長,我們的模型因此能夠識別出更為精確的行為模式。
每次在你打開手機或刷新信息流的時候,我們都會對推文進行打分,以便確定哪些推文可以被展示在信息流的最上面。打分這一舉動對我們的信息流服務基礎設施提出了很高的計算要求,因為我們現在每秒鐘要對數千條推文進行打分。雖然更豐富的模型可以提高推文排序的質量,但對于像Twitter這樣的實時社交公司來說,速度與質量同樣重要。Twitter獨特的挑戰在于如何為查看信息流的用戶進行快速實時的打分,并且擁有足夠強大的模型來保證排序質量以及后續的改進。
選擇正確的方式來構建和運行預測模型深切影響著每一個用戶使用Twitter的體驗。
信息流排序對機器學習平臺的要求
在上一個小節中,我們已經得出這樣的結論:要在Twitter的生產環境運行這些模型,它們必須滿足很多要求。
預測的質量和速度資源的利用率可維護性我們通過兩種方式來衡量模型的質量。首先,在進行模型訓練過程中,我們使用定義明確的準確率度量指標。這些指標可以告訴我們任務的執行情況,并為相關度高的推文打較高的分數。最終模型的準確率雖然可以作為早期指標,但并不能可靠的預測Twitter用戶會如何與推文互動。
我們通過運行AB測試和比較實驗結果來衡量Twitter用戶的受影響程度。我們所使用的一系列度量指標與Twitter的使用情況和受歡迎程度有關。例如,我們跟蹤每個用戶的參與次數,或者他們在Twitter上所花費的時間。在結束一次AB測試后,我們不僅能判斷新模型是否能夠為用戶帶來更愉悅的體驗,還能衡量出模型改進的程度。在像Twitter這么大規模的信息流排序系統里,模型的一個很小改進就可以對用戶體驗帶來重大的影響。
最后,即使我們能夠達到模型質量和速度方面的要求,要啟用一個新模型還會受到一些其他的限制,這個與發布其他功能特性是一樣的。我們需要知道模型將會帶來什么樣的影響,并將它與這個模型可能增加的成本進行對比,在兩者之間做出權衡。增加的成本可能來自硬件或者更復雜的運維和支持。
除了預測模型之外,信息流對機器學習框架也提出了類似的要求。我們可以基于這些框架定義、訓練、計算和運行預測模型。我們著重關注以下幾個問題。
大數據集的訓練速度和伸縮性對新技術的可擴展性易用的訓練、調試、計算和部署的工具在使用機器學習的開始階段,選擇好的模型(不管它是如何生成的)是最重要的。畢竟,我們是想要驗證預測模型的可行性。
不過,隨著預測流水線的日漸成熟,機器學習框架的易用性、伸縮性和可擴展性變得越來越重要。一個脆弱復雜且只能被少數幾個工程師理解或擴展的框架是不會長久的,就算它有性能方面的優勢。隨著數據挖掘、特性工程和快速實驗等方面工作的不斷深入,系統的核心工程特征變得越來越重要。一個穩定靈活的框架可以帶來可重復的性能收益。AI社區提供了大量的新算法和模型,一個支持深度學習和復雜圖的平臺正是我們利用這些新算法和模型的關鍵。
在信息流排序算法中引入深度學習
因為早期在圖像和語言理解方面的成果,深度學習成為很多科技公司必備的技術。大型的研究團隊被組建起來,很多野心勃勃的項目基于各種原因開始使用深度學習。
直接的結果就是,很多新的模型被發明出來,用于解決領域問題。人類的大腦與算法之間的能力差距在縮小。這種繁榮和多樣化主要歸因于深度學習固有的模塊化特性。深度學習模塊可以以任意的方式進行組合(堆疊、連接,等等),然后形成計算圖。圖的參數可以通過學習獲得,一般使用反向傳播(back-propagation)或mini batch的隨機梯度下降(SGD)。
“低階”模塊可以是任何東西,只要它們能夠根據輸入數據計算出輸出數據和必要的梯度。實際上,這個領域最近的一些框架(torch-autograd、PyTorch、TensorFlow)針對基本的算符,甚至提供了全自動的輸出和梯度計算,并讓框架自己生成計算圖。Torch-autograd和PyTorch則更進一步,它們支持動態的計算圖,允許計算圖在不同的mini batch之間變化。
這些計算圖的吸引力,不僅源于它們非常強大的建模能力,還因為它們的訓練具有可伸縮性。這些模型是基于數據的mini batch展開學習的,因此總的數據集可以非常大。
回到推文排序的問題。推文排序與大多數研究人員和深度學習算法專注的領域是不一樣的,因為Twitter的數據特征是稀疏的。因為各種原因,比如可用性和延遲方面的要求,并不能保證每一個特征都能被可靠的保留或記錄下來。
一般情況下,可以使用其他一些算法來解決這些問題,比如決策樹、邏輯回歸、特征交叉和離散化。實際上,在一開始我們在信息流排序上也應用了這些技術。
基于上述的各種原因,我們認為深度學習是更好的方案。不過,為了能夠將深度學習應用到生產環境,我們至少要確保它能夠為我們帶來與傳統機器學習方法一樣或更好的結果,并且具備更快的建模和訓練速度。
負責Twitter深度學習平臺的團隊Cortex做出了以下的調整和改進來滿足我們的要求。
新的模型架構和訓練方法:經過一段時間的研究和探索,通過如下技術超越了之前的算法: 離散化:數據記錄間的稀疏特征值會有很大的不同。我們找到了一種方式,對輸入的稀疏特征進行離散化,然后再讓它們進入到深度學習網絡。一個自定義的稀疏線性層:相比其他稀疏層,這個自定義的稀疏層具有兩個額外的特點:它提供了在線的歸一化(online normalization)方法,可以防止梯度暴增,以及特征偏差(bias),用于區分特征的丟失和零值特征。與校準(calibration)層相關的取樣方法:當用于訓練的數據集包含了相近數量的正值樣本和負值樣本,深度學習網絡可以獲得更好的結果。不過,如果是通過手動來調整樣本數量,會導致非標定的預測結果。所以,我們增加了一個自定義的等分校準層進行二次校準,讓輸出的結果更加準確。訓練計劃:除了上述幾點之外,我們現在的模型訓練過程包含了幾個步驟:離散器校準、深度網絡訓練、預測的等分校準(isotonic calibration)和測試。得益于我們平臺的靈活性,我們可以很輕松地定義上述這些步驟,然后按順序執行它們。更好地實現和優化模塊,以更小的延遲超越之前的算法。這些模塊很好地結合了批次、多線程和硬件資源來達到更低的延遲。更好的平臺設計: 模塊的訓練和重用變得更加容易:簡單易用的訓練流程設計過程簡化了任務的串行化和模型的建立。自動捆綁集群資源,支持更優的交互:這些模型需要在Twitter的集群上重新進行訓練、探索和測試。平臺為用戶提供了一種簡單的方式來完整這些工作。通用的測試和服務工具:訓練過的模型需要進行大規模的實驗,需要在生產環境里進行大量的測試,同時要求部署過程盡量簡單?;旧?,這些工作都可以通過一行命令來完成。影響
我們在搭建一個完整的深度學習平臺上所做的努力已經初顯成效。在信息流排序方面,深度學習模型在準確度方面獲得了顯著的成果。這些成果在模型的整個生命周期內保持穩定,從新特性的引入到擴展模型用于預測新類型的參與度。這說明深度學習是穩定的,可以推廣使用。更重要的是,從度量指標(如推文的參與度和花費在Twitter上的時間)上看,在線體驗也得到了顯著改進。我們在之前分享的業績報告中已經提到過,最新的信息流促進了用戶增長和Twitter參與度的提升。
端到端的框架體驗是影響深度學習的另一個重要方面。我們的終極目標是構建一個統一、靈活、快速的框架,簡化深度學習技術和模塊的組裝以及機器學習技術的采用。這種靈活性為信息流排序任務的快速實驗和獲得更高質量的模型提供了良好的支持。
我們的愿景在進一步顯化,越來越多的Twitter團隊在他們的模型棧中使用了深度學習。
未來
將深度學習作為信息流排序最主要的建模組件已經在生產環境為我們帶來了非常好的成效。不過,更重要的是,Twitter希望借此打開一扇通向未來的大門。在機器學習領域,深度學習和AI相關的工作在這些年得到了空前的發展,出現了大量新的技術和算法。我們相信,讓基于機器學習的產品從這些技術中獲益是至關重要的。我們可以在原生支持深度學習的平臺上達成我們的目的。
從長期來看,我們因此能夠更好地理解每一條推文和Twitter上的交互模式,從而實時地為用戶推薦具有更高相關度的推文。