深度解密今日頭條的個性化資訊推薦技術
資訊產品近幾年持續火爆,賺足了人們的眼球。以今日頭條披露的資料為例:日活躍使用者超過一億,單使用者日均使用時長超過 76分鐘,資訊類產品的火爆程度可見一斑。資訊類產品的火爆讓BAT巨頭坐臥不安,紛紛站出來反擊。手機百度除了搜尋框之外,大部分已經被一條條新聞佔據。阿里則是依託UC瀏覽器上線了自己的頭條。騰訊在騰訊新聞之外,從頭搞起了天天快報。
頭條為何能取得成功?很多人會說是頭條的個性化推薦技術做得好,個人認為其實不盡然。本文羅列了相關的個性化推薦技術,特別是資訊推薦常用的演算法,帶大家從“內行”的角度來解密下個性化資訊推薦技術。希望讀者讀後能發自內心地覺得:頭條其實也就那麼回事。
本文主體分以下三個大的部分。除此以外也會在最後用一小節展望下個性化資訊推薦的未來。
個性化資訊產品:先介紹資訊推薦產品是什麼,著重分析其業務特點。
個性化推薦方案:接著介紹資訊推薦所需的技術,著重分析其技術難點。
個性化推薦演算法:最後介紹業界常用的個性化推薦演算法。
個性化資訊產品
資訊推薦產品要解決使用者需求很簡單,一句就可以概括:為使用者找到有趣的資訊。而做到這個需求就要做好兩個關鍵點:
新聞聚合。使用者希望在一個產品裡獲取任何他想要或者可能想要的東西,這就要求產品要聚合其他app、網站、甚至線下媒體裡的各種資訊,這也是最基本的一個產品特性。
個性化。要去最大程度地理解、猜測使用者的興趣,結合興趣為其推薦相關資訊,這是資訊產品後期衍生出來的一個產品特性。
更進一步,如果將上述兩個關鍵點展開,一個好的個性化資訊產品就要具備以下亮點:
1. 時效性
這是所有資訊類產品共同的特性,而不僅僅是資訊推薦類產品。人們總是希望通過你的產品看到最近發生了什麼,而不是很久之前的老新聞。
2. 精準性
每天發生的事情有很多,對應的新聞稿子也非常多,如果每個都看,資訊過載的問題會讓人吃不消。你能否猜出我的興趣,並精準地推薦感興趣的新聞才是使用者關心的,也是使用者能直接感受到的體驗。
3. 豐富性
這點恰是很多使用者最容易忽略的一個點。其實很多使用者才不管這個資訊類產品是怎麼推出來的,對於單個使用者而言,其第一訴求必然是通過這個產品來了解世界,知道每天都在發生什麼,所以新聞的豐富性是最最基本的。
4. 排他性
每天描述同一事件稿子很多,在自媒體時代這個問題更加突出,但使用者只會用有限時間去了解這件事,而不是去研究所有關於這件事的報道,更不想甄別不同報道的差異。所以,使用者往往需要的是一個事情的一兩個報道,保證給我差異化的內容是必須的。
5. 熱門性
誰都不想在周圍朋友們討論熱點事件時,自己是個懵逼,什麼都不知道。這點很關鍵,跟精準性和個性化看起來有點背道而馳,但人性天生就有求同的天性。沒有同樣的話題,生活將會失去太多色彩,不知道該和人交流什麼。
6. 高質量
媒體質量層次不齊,有的文章寫得很好很炫,讀的時候很過癮,但一旦你發現它是一個假新聞或者歪曲報道,你還是對這類文章嗤之以鼻。新聞可以高於事實,但不能背離事實。
7. 合法性
人總是對非法的事情感興趣,如黃賭毒之類。而對於被壓抑的需求,則更是感興趣,如色情之類。但一個偉大的產品,首先必須是一個合法的產品。所以,一切盡在不言中了。
個性化推薦方案
要做到上一節提到的產品特性,有兩條路可以走:人工運營和演算法推薦。在類頭條產品出現之前,請新聞方面專業人才來運營是最穩妥的方式。但人工運營成本越來越高,侷限性越來越明顯。走演算法推薦的路,在張揚個性的年代,是一條必由之路。下表簡要對比下兩者的差別。
推薦演算法應用在資訊類產品時有一些挑戰,這也是資訊推薦能否做好的關鍵所在。
● 可擴充套件性
推薦本質是建立user和item的關聯,一般問題要麼是user側量級大,要麼是item側量級大,而資訊推薦是典型的“雙大”場景。又由於是高度依賴個性化的場景,還不能簡單地將某一側大幅降維,所以可擴充套件性顯得尤為重要。
● 稀疏性
資訊的高度個性化自然而然的帶來一個很棘手的問題就是稀疏性。舉個最簡單的例子,如果將user和item的 點選行為用矩陣形式表示出來,會發現比一般問題更多的0項存在。而稀疏問題是一直困擾機器學習高效建模的一大難題。
● 冷啟動
每天都有大量的新聞產生,如何將如此多的新聞快速、合理地冷啟動,儘快將高質量的新聞推給合適的使用者是個大問題。
● 時效性
不同於商品、書籍、電影、視訊等的推薦,新聞一大特點是生命週期非常短,有的甚至只有幾個小時。如何在最短的時間裡把新聞推給感興趣的人,在新聞進入“暮年”之前發揮它的最大價值是個非常重要的問題。
● 質量保證
新聞本身量大,且時效性強,如何在短時間裡快速評估每篇稿子的質量和合法性,做到最高效、最精準的內容稽核是個大課題。
● 動態性
這裡的動態性主要體現為使用者興趣隨時間改變、當前熱點隨時間改變。使用者在一天裡的不同時刻、不同地點、不同上下文裡的閱讀興趣都有所差別,動態在變化。
個性化推薦演算法
圍繞上面這幾個挑戰,業界各大資訊類產品在做推薦時想出了各種招兒來解決,接下來,我們就梳理下業界經典的做法。這裡以產品為主線,以具體要解決的問題為輔線來進行梳理,會集中介紹下Google News、Yahoo Today、今日頭條等產品的推薦演算法,並著重介紹下深度學習在這個領域的最新進展。
● Google News
Google News是一款經典的資訊推薦產品,也是後來者競相模仿的物件。2007年,Google News在www上首次發表論文《Google News Personalization: Scalable Online Collaborative Filtering》公開資訊推薦技術。該論文的做法非常自然、簡潔,從論文題目就能看出是CF的落地上線。Google是這樣想的:鑑於大家都覺得CF是推薦領域公認的有效演算法,那將其直接用在產品上效果自然也不會太差。
但經典的CF有個巨大的問題,無論是user-based還是item-based,當你要算任意兩個user或者兩個item之間相似度的時候,計算量會非常巨大。因為CF的計算量直接取決於特徵維數和user、item pairs的數目,而資訊類產品這兩個數目都非常巨大:
每個user、item的特徵因為大多是曝光、點選等行為類特徵,而資訊類產品這些行為發生的cost很小几乎可以忽略不計,導致維度往往比較高;
資訊類產品的user數目和item數目都很大,這和一般領域往往只有一方比較大是不同的。
Google這篇論文的核心就是將CF改造為支援大規模計算的方法。
其原理也很簡單:將使用者事先分成群,再做user-based CF時實際變成了(user) cluster-based CF。這樣在工程實現上就簡化了很多,線上只需要記錄每群使用者喜歡什麼(實際做法是用到了基於的記憶體key-value系統,key為資訊ID,而value則是資訊在使用者群上的各種統計值)。一個使用者來了之後,先找到其對應的群,再推薦這個群喜歡的資訊就好。而線下則藉助Map-Reduce實現了MinHash、PLSI兩種聚類分群演算法,定時把最新分群結果推到線上。
為什麼Google News會先選擇協同過濾演算法呢?除了CF演算法在其他場景有成功的應用之外,還有一個重要的特點:CF是一個依賴使用者行為資料就可以work的演算法,它不像其他基於內容推薦的演算法對NLP能力要求很高。選擇CF,則繞過了NLP這個攔路虎(有經驗的人都知道,NLP是一個長期積累的過程,很難一開始就做到比較出色的程度)。透過這篇文章,我們也不難發現工業界解決實際問題時的一個基本套路:重頭做一個模型時,會選擇最經典的一個實現,然後快速上線解決一大半問題。
結合前面總結的資訊推薦的挑戰,可以看到該演算法主要解決了可擴充套件性問題。我們也不難發現這個user cluster-based的演算法也有一些明顯的缺點:1)它不能解決新使用者、新資訊的冷啟動,因為沒有行為資料來支撐CF運轉;2)推薦精度不夠高,沒有做到真正的個性化。這是cluster-based CF演算法本身的特點決定的;3)實時性不夠。使用者聚類不能做到快速更新,這導致了對使用者最新興趣把握有不及時的風險。這些問題在Google News的另一篇論文中得到了解決。
Google News在www 2010上放出了《Personalized News Recommendation Based on Click Behavior》。這篇文章重點解決推薦精準性和新資訊的冷啟動問題,文章想法也很樸素自然,主要是基於貝葉斯理論進行建模。他們假設使用者興趣有兩個方面:個人不斷變化的興趣以及當前新聞熱點。在具體建模之前,作者先基於歷史資料進行了統計分析,驗證了他們的假設,得到如下基本結論:使用者的興趣是隨時間變化的,新聞熱點也是隨時間變化的。還有一個比較比較有趣的結論是不同地區同一時間的新聞熱點是不一樣的。下圖是不同地區不同時刻體育類新聞的閱讀佔比。
這幅圖縱軸是體育新聞閱讀量在該地區總新聞閱讀量的佔比,越高表示該地區的使用者越喜歡看體育新聞。橫軸則是時間點,用黑線標示出的三個時間點從右到左則分別對應奧運會、歐洲盃以及美國職業棒球大聯盟進行時。而圖中的三條不同(顏色)標示的線則代表西班牙、美國、英國三個地區。不難發現,這副圖不僅揭示了同一地區使用者對體育新聞的感興趣程度是隨時間變化的,更揭示出西班牙、英國等國家更愛看體育新聞。
方法主要建模使用者對當前某類新聞的感興趣的程度,這取決於兩個方面:使用者對這類新聞的興趣度以及當前某類新聞的熱度。通過貝葉斯理論,這兩個方面可以直接用如下公式聯絡在一起:
其中分子左半部分
表示使用者當前對某類新聞感興趣的概率,它是通過最近不同時間段使用者對某類新聞感興趣的程度來彙總計算,而使用者某個時間段內對一類新聞感興趣的程度則通過下式計算。
這個公式粗看起來比較複雜,實際含義其實很簡單,可以理解為簡單統計下某類新聞閱讀量佔用戶該時間段內所有新聞閱讀量的比例即可。而分子右半部分
表示當前本地區某類新聞的熱度(這類新聞被該地區點選的概率),實際也是統計一下短時間內對這類新聞的使用者點選佔比得到的。
總體來看,該演算法是非常簡潔自然的,它針對CF遺留的問題進行了很好的解決:1)引入新聞類別解決了新新聞的冷啟動;2)引入使用者興趣解決了個性化和推薦精確度的問題。但新使用者冷啟動還有優化的空間,因為按照這個方法,同一地區不同新使用者推薦的都是該地區最熱門的內容。
● Yahoo Today
Yahoo Today團隊2009年在WWW上發表 《Personalized Recommendation on Dynamic Content Using Predictive Bilinear Models》,重點解決資訊推薦裡的冷啟動問題。不同於上一篇google news的做法,這篇文章試圖同時解決新使用者和新資訊的冷啟動。本文的基本假設:使用者畫像能刻畫使用者的閱讀興趣,新聞的畫像也可以表示新聞的點選率,而使用者喜歡一條新聞的程度則取決於靜態預測和動態預測兩個方面,都是用feature-based learning方法來建模使用者對資訊感興趣的程度。具體來講,使用者xi對資訊zj的興趣得分如下計算。
所謂的 bilinear model 的含義當你隱去一個自變數時,另一個自變數和因變數成線性關係。比如下式不考慮z時,s和x成線性關係;不考慮x時,s和z也成線性關係。進一步如果將使用者和資訊的特徵分為靜態和動態兩大類,則上式可寫為:
最後一個等式後面的第一項是靜態預測得分,第二項則是動態預測的得分。
所以當一個新的使用者到來時,第二項的特徵是沒有,相當於僅用使用者的畫像等靜態特徵來解決新使用者的預測問題。當一個新資訊時,也是同樣的道理。靜態特徵如蒐集到的使用者的年齡、性別、地域等基礎屬性,以及從其他途徑獲取的如在相似產品上的行為、其他場景上的歷史資訊等,還有資訊的類目、主題等。而動態特徵如使用者在Yahoo Today上的各種閱讀、點選、評分以及加工出來的某條資訊、某類資訊分時間段的各種統計值等。有了預測分s,和真實的label (比如使用者是否點選一個資訊r(i,j))做個比較就能得到機器學習訓練時的反饋資訊。本文優化目標是基於貝葉斯理論推匯出來的最大化後驗概率(maximum-a-posteriori, MAP),而優化方法則採用熟知的梯度下降法(gradient-descent, GD)。
2010年,Yahoo又發表了一篇更加有效解決冷啟動的文章《A Contextual-Bandit Approach to Personalized News Article Recommendation》。這篇文章基於傳統的Explore-Exploit(EE)套路,大家可能比較熟悉的是為新item隨機一部分流量讓其曝光,得到一些反饋,然後模型才能對其有較好的建模能力,這是最naïve的EE策略。
稍微高大上一點的做法則是upper confidence bound(UCB)策略: 假設有K個新item沒有任何先驗,每個item的回報也完全不知道。每個item的回報均值都有個置信區間,而隨著試驗次數增加,置信區間會變窄,對應的是最大置信邊界向均值靠攏。如果每次投放時,我們選擇置信區間上限最大的那個,則就是UCB策略。這個策略的原理也很好理解,說白了就是實現了兩種期望的效果:
均值差不多時,每次優先給統計不那麼充分的資訊多些曝光;
均值有差異時,優先出效果好的。
而yahoo這篇文章,則是對UCB進行了優化,因為UCB對item沒有任何先驗知識,而linUCB可以引入一些先驗知識。比如你在推薦新聞時,可能發現娛樂類新聞天然比體育類新聞點選率高。如果能把這個資訊作為先驗知識考慮進EE策略中,就可以加速EE的效率。LinUCB假設每次曝光的回報是和Feature(user, item) 成linear關係的,然後使用model預估期望點選和置信區間來加速收斂。
深度學習篇
日益紅火的深度學習也在不斷影響著資訊推薦,在這一節就簡要review下最近爆出來的幾篇相關文章,大致可以分為兩類:
1)embedding技術。此時深度學習主要用來學習user/item的embedding也就是通常意義上的user/item的表示形式,每個user/item可以表示為一個向量,向量之間的相似度可以用來改善推薦。這裡深度學習的重點是用來學習合理的表示;
2)使用深度學習直接對預測目標建模。此時深度學習的重點放在最終要解決的問題上。初看起來似乎第一種形式不如後者來得直接,但第一種形式在實際應用中通常能起到簡化架構、快速解決問題的功效,還能作為一個基礎特徵來改進線上其他環節的效果。下面我們分別選擇一兩篇有代表性的文章來進行科普。
Yahoo Japan的新聞推薦團隊利用denoising autoencode的技術來學習新聞的vector表示。Autoencode大家可能比較熟悉,它通過最小化變換前後訊號的誤差來求解,而denoising則是對輸入隨機加入一些噪聲,再對其進行變換輸出,最終是通過最小化加噪聲後的輸出和原始(不加噪聲)輸入之間的差異來求解。應用中不少結果表明,這種方法比傳統的autoencode學習到的vector效果更好。具體示意圖如下。
但這種方法是經典的無監督學習套路,直觀來看和應用場景中要求相似新聞的vector也要儘量相似沒有直接的關聯(這裡單單從優化目標來看,實際上由於語料的天然性質或者人們用語習慣,這個相似性的要求已經間接隱含在優化目標裡了)。而新聞有很多人們編輯好或者其他模型產生好的類別資訊,假如A、B新聞都是體育類,C是教育類的,通常意義上來講A和B相似度是比A和C要高的。這是在訓練深度學習時已知的先驗知識,如果能把它加入到優化目標中,學習到的vector就能更好的表達相似度資訊,於是有了下面的方法。
如圖所示,通過在原始autoencode的優化目標中加入“同類新聞相似度大於不同類新聞相似度”這一項,我們就可以把先驗知識作為約束加到模型中。Yahoo Japan的人實驗證明了如此得到的vector確實能更好的表示(相似度資訊)。
微軟研究院也提出過一種很有趣的得到item表示的方法。作者利用使用者的搜尋日誌,同一個query下,搜尋引擎往往返回n篇doc,使用者一般會點選相關的doc,不太相關的一般不會點,利用這個反饋資訊也可以訓練神經網路。具體示意圖如下,這裡的優化目標就是要求點選的一個doc_i的預測得分p(D_i|Q)要高於不點選的,論文基於這個資訊構造除了損失函式,也就得到了最終機器學習可以優化的一個目標。
目前只介紹瞭如何得到item的vector,實際推薦中要用到的一般是user對一個item的興趣程度,只有在得到user vector後才能通過算user和item的相似度來度量這個興趣程度。那麼如何得到user的vector呢?瞭解的同學可能能想到,既然我們已經得到了新聞的item的表示,想辦法把他們傳到user側不就行了麼?
確實如此,一種簡單的做法是把使用者近期點過的所有新聞的vector取個平均或者加權平均就可以得到user的vector了。但這種模式還有優化的空間:1)使用者點選是一個序列,每次點選不是獨立的,如果把序列考慮進去就有可能得到更好的表示;2)點選行為和曝光是有聯絡的,點選率更能體現使用者對某個或某類新聞的感興趣程度。鑑於這兩點,我們很容易想到通過深度學習裡經典的解決序列學習的RNN方法,Yahoo japan的人使用的就是一個經典的RNN特例:LSTM。訓練時將使用者的曝光和點選行為作為一個序列,每次有點或不點這樣的反饋,就很容易套用LSTM訓練得到user的vector,具體做法如下圖所示。
微軟還發表了《A Multi-View Deep Learning Approach for Cross Domain User Modeling in Recommendation Systems》,文章提出了一種有趣的得到user vector的方法,這是一個典型的multi-view learning的方法。現在很多公司都不僅僅只有一個產品,而是有多個產品線。比如微軟可能就有搜尋、新聞、appstore、xbox等產品,如果將使用者在這些產品上的行為(反饋)統一在一起訓練一個深度學習網路,就能很好的解決單個產品上(使用者)冷啟動、稀疏等問題。具體網路結構如下,總體的優化目標是保證在所有檢視上user和正向反饋的item的相似度大於隨機選取的無反饋或者負向反饋的相似度,並且越大越好。用數學公式形式化出來是:
對應的神經網路結構如下圖所示。
今日頭條
作為國內當紅的個性化推薦產品,今日頭條技術經歷了三個階段:
1)早期以非個性化推薦為主,重點解決熱文推薦和新文推薦,這個階段對於使用者和新聞的刻畫粒度也比較粗,並沒有大規模運用推薦演算法。
2)中期以個性化推薦演算法為主,主要基於協同過濾和內容推薦兩種方式。協同過濾技術和前面介紹的大同小異,不再贅述。基於內容推薦的方式,則藉助傳統的NLP、word2vec和LDA對新聞有了更多的刻畫,然後利用使用者的正反饋(如點選,閱讀時長、分享、收藏、評論等)和負反饋(如不感興趣等)建立使用者和新聞標籤之間的聯絡,從而來進行統計建模。
3)當前以大規模實時機器學習演算法為主,用到的特徵達千億級別,能做到分鐘級更新模型。 架構分為兩層(圖來自頭條架構師的分享):
檢索層,有多個檢索分支,拉出使用者感興趣的新聞候選;
打分層,基於使用者特徵、新聞特徵、環境特徵三大類特徵使用實時學習進行建模打分。值得一提的是,實際排序時候並不完全按照模型打分排序,會有一些特定的業務邏輯綜合在一起進行最終排序並吐給使用者。
任何一種演算法都有其侷限性,業務要結合自己產品的特點,選擇合適的演算法解決特定的小問題,融合各種演算法解決一個大問題。另外要設計合理的實驗和放量機制,以在有限的影響內,最大程度地利用真實的使用者行為來修正演算法判定的結果。比如,可以先放5%的流量來試探使用者對新聞的興趣,並用模型進行建模;再用15%的流量來修正模型的效果,進行優勝劣汰;最後將真正置信的推薦結果推送到全量使用者。
個性化資訊推薦的未來
個資訊消費是人的基本需求,個性化資訊推薦讓我們能更好地消費資訊,享受生活的快樂。個性化資訊推薦還有很長的路要走,目前面世的產品僅僅邁出了第一步,看起來有模有樣,實際上問題多多。例如被吐槽最多的一個問題:使用者一天看了很多,但睡前閉目一想,記住的很少,對自己有用的更是鳳毛麟角。這只是一個表象,背後其實暴露了很多現有推薦的問題。
要做好一個資訊推薦產品,不單單精準推薦技術需要演進,呈現形式、互動方式、產品形態、內容生態等等都需要去探索,最最重要的要想清楚以下幾個本質問題:
人為什麼需要閱讀?
人為什麼會消費資訊?
使用者為什麼需要到你這閱讀資訊?
好的閱讀體驗到底是什麼,如何量化?
產品推薦的基因是什麼?
加油吧,個性化資訊推薦!
參考文獻:
1. 桑賡陶,《 把握市場、產品和技術的動態匹配——韓國三星電子公司產品開發戰略演變的基本原則及其對中國企業的啟示》
2. Personalized Recommendation on Dynamic Content Using Predictive Bilinear Models[www, 2009]
3. Google News Personalization: Scalable Online Collaborative Filtering [www,2007]
4. http://www.slideshare.net/techblogyahoo/deep-learning-for-news-recommendation [slideshare, 2016]
5. A Survey on Challenges and Methods in News Recommendation[WEBIST, 2014]
6. Personalized News Recommendation Based on Click Behavior[www, 2010]
7. A Contextual-Bandit Approach to Personalized News Article Recommendation[www, 2010]
8. Learning Deep Structured Semantic Models for Web Search using Clickthrough Data
9. A Multi-View Deep Learning Approach for Cross Domain User Modeling in Recommendation Systems [MS Research]
10. http://www.ruanyifeng.com/blog/2012/03/ranking_algorithm_wilson_score_interval.html
11. https://zhuanlan.zhihu.com/p/21404922
12. http://www.36dsj.com/archives/36571
另:如何看待頭條的成功?
網上很多人都從各種角度有過分析,但大都是通過現象來解釋現象,抓住本質的不多。個人比較喜歡用“市場、產品和技術”動態匹配理論來看這個問題[1]:對於一個特定的企業來說,它在特定時點上所找到的、要去滿足的市場是特定的;特定的市場要求企業用特定的產品去滿足,而特定產品則是特定技術的某種物化。企業只有掌握相應的特定技術或者有能力在一定的時間內把這種特定技術開發出來並把它物化成特定產品,企業選擇的特定市場才有可能得到滿足。
用動態匹配理論來看頭條,可以看到它的成功是如此之合理。隨著資訊市場的成熟和發展,人們需要一個在碎片時間消費有趣資訊的產品,來解決使用者的需求。這裡的有趣因人而異,就需要用個性化的推薦技術去滿足。如此看來,頭條在合適的時機,用合適的技術做了合適的產品,造就了自己的成功。