寫在前面:html
翻譯這篇文章,是看到後想起以前也試圖給SF 優化時間線(已經上線了有好幾個月了),相比如今的twitter 確實很簡陋。並且也沒有把時間線放在醒目位置。事實上,SF 的時間線在我加入以前已經存在好久了,包括上次的優化都在討論要不要直接提出來做爲首頁。工具化 or 社交化? 思考了不少以後,仍是隻做爲了實驗項目(選擇做爲首頁or not)保留。
而這篇twiiter關於時間線的排序算法優化則「高級」了不少(想來不止twitter,大多數的社交產品都在時間線上花了不止一次的迭代優化算法嘗試,老是衆口難調,卻也老是在爲數據優化不斷嘗試),引入了機器學習算法,讓早期的算法經過訓練變得更加精準--結尾給出了很是樂觀的總結。
於我而言,文章最有用的地方大概是前文關於時間線改版的迭代總結了,我的以爲機器學習那塊可能仍是翻譯的不夠準確--也跟本身對機器學習這塊瞭解不夠的緣故吧。但也如文末的總結同樣,機器學習的潛力和做用長遠來看必定是不可估量的。那麼,就用最近在讀的《機器之心》做者預言的話做爲這段囉嗦的結尾吧:算法
可是到了21世紀,機器將會在這個排他性十足的環境中與人類同行,長久相伴segmentfault
原文地址 : Using Deep Learning at Scale in Twitter’s Timelines 網絡
By: Nicolas Koumchatzky and Anton Andryeyev多線程
譯文部分:架構
一年多的時間裏咱們都不斷在優化呈現給用戶的時間線,爲了給用戶提供更相關和精準的時間線內容咱們不斷的提升這裏面的算法機制。框架
今天咱們將闡述一下如何經過深度神經網絡來優化咱們的排序算法,這也得益於 Cortex (Twitter 內部 AI 技術團隊之一) 的AI平臺和建模能力。簡言之:這意味着時間線內容與用戶的關聯度更緊密了,而在將來,這也敲開了咱們利用深度學習社區的創新和新技術來更好優化產品的大門,尤爲是在天然語言處理(NLP),對話理解和傳媒領域。運維
在咱們的排序算法以前,用戶的時間線內容展現方式其實很簡單: 全部的推文都是你關注的用戶產生的內容,咱們會把你上次訪問後這些關注用戶產生的新內容聚合並以最新到最舊的時間順序展現出來。儘管概念簡單,但由於推特的成千上萬的用戶體量每秒產生的內容也是巨大的,這對咱們的技術架構和運維都是不小的挑戰。機器學習
而在引入了排序算法以後,咱們新增長了一個特徵。在聚合了全部推文以後,咱們會創建一個相關模型。這個相關模型會給每條推文一個關聯分值,用於預測每一個用戶對於這條推文的感興趣和關注程度。關聯分值高的一些推文就會出如今你的時間線頂部,其它的推文內容則在這些相關推文的下方。考慮到咱們給你推薦興趣推文數量以及你兩次訪問網站的總時間間隔,咱們可能也會向你推送「避免你錯過」模型。這個模型僅僅包含一小部分在相關模型中關聯分值最高(並也按由高到低)的推文,區別於相關模型中的推薦推文來看,後者都是按時間順序排序的(對比的,避免錯過模型應該不是)。這樣作的目的是但願你能第一眼看到你最感興趣的最佳推文—畢竟時間線內容是很長很長的。模塊化
爲了能預測到某個你最感興趣的推文,咱們在算法模型中考慮瞭如下的特徵值:
推文自己: 發佈時間,是否有媒體附件(圖片或視頻),全部交互(即 轉推量和點贊數)
推文做者:你過去和推文做者的互動,你和他們之間的聯繫以及你關係鏈的構成
你: 你過去感興趣的推文,你使用twitter的頻次和留存時長
咱們考慮的特徵值以及他們之間的關聯度都不斷的在增加,也提醒了咱們須要考慮到更細微差異的行爲模式。
每一次你打開應用或者刷新的你的時間線,咱們都會經過你上次訪問的時間來對你關注的用戶發佈的推文設置關聯分值來決定什麼推文會展現在你的時間線頂部。這樣的打分步驟須要一個更強的計算能力,由於咱們每秒鐘要給幾千條推文計算分值來知足全部的時間線請求。儘管更豐富的模型已經能知足更匹配的推文質量,但做爲一家互聯網公司,速度和質量同等重要。這個獨特挑戰就是須要迅速計算分值並能及時反饋給正在瀏覽他們時間線的用戶。至今咱們已擁有了足夠優秀的模型來最大可能的知足內容質量以及將來可能須要的改善。
正如你所能看到的,選擇正確的方式來構建和運行預測模型對每一個使用twitter的用戶體驗是有很是深遠的影響的。
就像上文總結提到的,預測模型必需要有如下約束來知足衆多推文請求能及時展現給用戶的條件:
預測內容的質量和速度
資源利用
可維護性
咱們通常用兩天來衡量一個預測模型的質量。首先咱們會在訓練模型時用一個強定義精準性的公式來評估模型。它會告訴咱們模型的表現怎樣,尤爲是在給感興趣的推文打高分的情景下。儘管通常最後的模型都會做爲一個早期預測指向標,但要預測用戶看到這些推送的內容後做何反應僅僅靠這一個模型是遠遠不夠的。
因此咱們一般會實施一次或者屢次 A/B 測試來監測用戶使用不一樣推送算法的 Twitter 後的行爲。並對測試結果進行分析。這裏咱們一般使用的公式通常直接和使用Twitter 的頻次以及感興趣程度相關的。例如,咱們可能會跟蹤每一個用戶參與次數,或者單次停留時長。每次A/B 測試以後,咱們不只能夠判斷是否新上線的預測模型讓用戶體驗更好,並且也能準確衡量此次改版的改善程度。在Twitter ,像時間線排序這樣的大系統項目,一個小的模型質量改善都會在用戶體驗上產生大的影響。
最後,儘管預期的實時速度能在一個模型中被實現,但發佈這個(實時發佈)模型也和其它新功能同樣須要分析結果。咱們會將這個模型的有效做用程度 和 任何可能存在的執行模型時增長的成本
二者之間進行衡量。額外增長的成本可能來自於硬件使用,或者更復雜的執行操做和支持。
除了預測模型自己,一系列請求也會被應用到機器學習框架中— 即,一系列容許用戶定義,訓練,分析和發佈一個預測模型的工具。咱們尤爲關注於:
在一個很是大的數據集內訓練速度和範圍能力
對於新技術的擴展能力
容易訓練,調試,評估和部署上線的工具
須要注意到的是,在用機器學習技術最開始,找到最佳模型(暫不考慮它是如何產生的)經常是第一考慮要素。畢竟,咱們想證實,將全部預測模型一塊兒使用是最有效的。
然而,隨着預測方法更加成熟, ML 框架的易用性,擴展性都變得更加劇要。若是一個複雜的模型只能由少數幾個瞭解的工程師維護和擴展的話並非一個長久之計,即使這個模型只是有一些細微的變化。隨着愈來愈多的工做投入到數據挖掘,特徵研究以及快速迭代實驗,一個系統的核心開發功能特色應該變得相當重要。一個穩定和靈活的框架更有可能帶來重複累積收益。隨着在 AI 社區逐漸發現的新的優秀的算法和模型框架,找到一個原生支持深度學習的和複雜圖表的平臺纔是這項工做(不斷優化模型)的關鍵。
基於早期的圖文識別技術的成熟,深度學習已經成爲了現在許多技術公司一個必備的技術點了。一些大的研究團隊已經創建,許多利用深度學習技術的前沿項目也在不一樣的環境中逐漸發佈出來。
因此,已經有許多新的模型框架被創造出來用於解決具體領域的具體問題。人類大腦的處理能力和執行算法之間的差距愈來愈小。一個關鍵的理由就在於深度學習本質上就是模塊化的。深度學習模型能夠以各類方式組合(堆疊,串聯等等)來建立一個計算圖表。這個圖表能夠被不斷學習訓練,典型的場景是在批梯度降低(mini-batches)訓練中用到的反向傳播算法(back-propagation)和隨機梯度降低算法(Stochastic gradient descent)。
低級別的模型在這裏是每次使用的片斷單位,是做爲一種將輸入和必要梯度 計算爲輸出內容的執行方式。事實上,在機器學習領域(torch-autograd, PyTorch,TensorFloe)最經常使用的一些庫類型已經提供了能夠處理大量數據的基本操做,典型的就是讓使用者根據偏好的tensor操做包來具像化算法,同時也要依賴生成的計算圖表。Torch-autograd 和 PyTorch 則要更近一步:計算圖表能夠動態生成且能從一個批梯度降低到另外一個。
這些計算圖表都有一個很是驚人的建模能力,學習這些的技術聽起來格外吸引人,而最值得一提的是這些訓練都是可擴展的。由於這些模型都是從批梯度降低訓練中的數據集訓練得來的,整個數據集的規格也能夠是無限大。
讓咱們回到手上的問題來。 Tweet 排序算法和大部分研究人員和深度學習算法研究的問題有些不同。最大的因素是由於 Tweet 的數據量級不大,同時也包括獲取能力和請求延遲等因素。當前的數據特徵並不能保證是模型正在記錄的每個數據的特徵值。
一般這些問題都會用其餘算法來解決,例如決策樹,邏輯迴歸和特徵crosing 和discretization等算法。這也是咱們的時間線排序最初用到的算法。
陳述完上述的緣由,咱們有理由相信深度學習會讓咱們作得更好。爲了將深度學習引入到產品中,咱們必需要肯定引入結果不能比以前差,同時模型和訓練過程也須要足夠快速。
因此Cortex 團隊就作出了以下的一些調整和改善來適應這些約束:
一個全新的模型架構和訓練內容: 在一段調研和探索期後,咱們打算使用如下的技術來優化以前的算法:
離散(Discretization): 稀缺特徵值和普通的數據記錄徹底不一樣。咱們發現一個方法來將這些輸入的稀缺特徵值離散,再將它們放入到主深度訓練網絡中
一個自定義的稀缺線性層: 和其餘稀缺層相比,線性層有兩個特殊的地方:一是防止梯度破壞的在線正常化計劃,另外一個是 用來區分普通特徵或零值特徵消失 的每特徵偏量
一個帶有校驗層的樣本計劃: 當訓練數據集包含一堆正反向例子的類似數據的時候,這是深度網絡會在尋找解決問題的空間上作得更好。然而,這時人工調試一個訓練數據集會致使一個非校訂的輸出預測。所以咱們增長了一個自定義校驗層來重校驗從而輸出正確的機率。
一個訓練計劃: 以上的補充準備就緒,整個模型訓練過程仍須要好幾步:離散器矯正,深度網絡訓練,預測等壓校驗以及測試。多虧平臺的可塑性,有效並有序的執行這些操做都很順利。
爲了保持甚至減小前一個算法的延遲而執行的優化模型。在某種程度上,這些優化模型就是融合在批量處理,多線程和硬件利用上來下降延遲。
平臺的設計優化
易訓練性和模型再利用:簡單的流程和模型利用會讓任務執行和模型收集等等過程更高效和容易
根據資源自動組合最有的交互操做:這些模型須要在推文集羣中被訓練,研究和測試。平臺提供了一個用戶透明的相對簡單方式來進行這些處理
測試和服務工具: 一旦模型訓練完成,就須要大量的實驗環節。這就須要在生產環境對模型大量的進行測試—— 而且也須要可以簡單部署。全部這些也須要知足可以單行命令就能執行。
全部這些爲了構建一個完整的深度學習平臺所作的辛苦工做都獲得了回報。在時間線排序算法的任務上,深度學習在離線模型的精準預估上取得了巨大的提升。這些增加在常規模型的生命週期上也一直持續着,包括對新功能的介紹環節以及將模型擴展到對新的用戶參與度衡量參數。這證實了深度學習方法確實是穩定的,同時它的擴展推廣也不錯。最重要的是,將它引入到線上的效果顯示,在用戶參與度和停留時長上都取得了巨大的增加。同時在咱們以前的分享中也提到了,更新的時間線在用戶增加和參與度上都取到了不可磨滅的做用。
就像已經提到的,另外一個值得說起的影響就是點對點框架實現。這個框架的終極設想就是一個非統一,可擴展的快速框架。這個框架能夠將許多合適的深度學習技術和以 ML 方法創建的模型融合起來。這樣的可塑性可以在之後的時間線排序優化上快速實現,同時也能不斷優化迭代使用的模型的質量效果。
隨着更多的公司團隊將深度學習歸入他們的模型任務,相信這個框架的效果將會不斷的優化和提升。
在咱們的時間線排序模型組件中使用機器學習方法已經帶來了顯著的提升。同時,Twitter 使用深度學習技術也是想展現咱們對將來新興技術的開放心態。這幾年在機器學習領域,深度學習和 人工智能相關的研究已經產生了空前的(也仍不斷在持續的)新創意和算法。咱們深信讓咱們的 ML-驅使 的產品融入這項技術會對之後的獲益起到關鍵做用。而這些能夠經過搭建一個原生支持機器學習的可擴展平臺來實現。
長遠來看,這也能幫助咱們更好理解twitter上的每一條推文和每一次互動,並且是實時的。