現有新聞推薦產品是如何向用戶進行個性化推薦?

在千萬級的用戶量,如何快速實時向用戶推薦用戶感興趣的新聞?


大致有幾種推薦的策略

第一種是基於新聞之間的相似度,可以理解為看了A新聞的同學和看B新聞同學的重合度,重合度越高,說明兩則新聞的用戶越重合,那麼當一個用戶看了A新聞的時候就可以對他推薦B新聞。並且對於一個新用戶,只要看了一條新聞,立刻可以對他進行推薦。但是有個毛病,新聞的相似度的計算需要時間,也就是說不能對一條全新的新聞進行推薦。

第二種和第一種類似,差別在於基於用戶相似度進行推薦。通過後台計算兩個用戶之間的相似度,比如有兩個用戶張三和李四,他們看的新聞重合度越高,說明他們的口味越相似,那麼就可以把李四看過的張三沒看過的推薦給張三。因為用戶的相似度需要在後台計算,一般來說是每天計算一次,所以對一個新的用戶來說會沒有相似的用戶,無法通過用戶相似度進行推薦。

第三種是隱含因子推薦(矩陣分解系),大概的思路是,對新聞有個分類,體育,政治等等,對每個用戶計算他對每個分類的偏好,比如0.5喜歡體育,0.3喜歡政治,然後按照這個權重給用戶推薦。那麼體育,政治這些緯度怎麼定義呢?因為維度可以有很多,還可能有熱門的,冷門的,最新的之類的,於是隱含因子就是專門做這件事的,他把用戶和物品共同映射到k維,k根據算力自己定義,通過學習最小化誤差,得出每個用戶在k維下的喜好度以及每個物品在k維下的隸屬度,然後就可以給用戶進行推薦啦,這種方法現在被認為是精度最高的模型之一。

第四種是語義分析,通過新文的內容之間的聯繫得出一個相似度,把內容相似的新聞推薦給用戶。語義分析和上面三種有點不一樣,上面的結果會因為看新聞的人越來越多而越來越准,語義分析不會,所以,需要結合一些時間,熱度等因素綜合考慮。

第五種。。。

每種方法有各自不同的適用人群,所以可以寫一個演算法融合器 ( learning to rank ) 把各種演算法融合成一個大演算法,根據每個用戶的適應程度來決定每個演算法的權重。

如何做到快速實時?

online learing

個性化推薦也只是各種渠道中的一種,所以並不能取代訂閱,推送,關注,熱榜,小編等,反而是要從中汲取數據,互相補充


resys,我知道的有以下思路:

  1. 基於人和物的協同過濾(人的相似度和物的相似度,這裡的物就是新聞),也就是通常意義下的看過新聞A的人還看新聞B,這樣的人多了的時候,用戶看過A,就給他推薦B;還有一種就是人的相似度, @賴曉航 的前兩種大致也是在說這個
  2. 基於稀疏矩陣的某種推薦模型,黑盒子,你甚至不知道為什麼要推薦成這樣,就是在計算能力大幅提升的前提下,把所有已知的數據全當作輸入,只關心輸出,而不關心推薦原因,本質上是在計算一個P(click|condition)的問題,(可以把推薦準確退化成click,而condition就是各種條件屬性,是一個推測的前置條件)。例如要判斷給一個用戶是否出現李克強出訪的新聞,那麼可以把用戶之前所有的profile(例如男女、年齡、地域、學歷等等)、閱讀歷史、還有其他所有能想到的亂七八糟的都當作這個condition作為輸入,讓模型根據之前的數據表現來推測P(click|condition),當這個概率P超過某一個預設閾值,就推薦。這樣的話,我們必須要知道一些前置條件才可以推薦,所以,冷啟動很麻煩

  3. 簡單的相關推薦,就是從語義上判斷的相關度,事實上,這個效果在實踐中還可以,但是,這個可能和真正意義上的個性化推薦還不一樣
  4. 基於興趣模型的推薦。和第二種相似,也是根據用戶之前的數據來構建他的興趣模型,這個興趣模型可以根據需要來建立,然後形成興趣(標籤)-權重對,興趣的來源可以是訂閱歷史、閱讀歷史、閱讀時長歷史、點贊歷史、互動歷史、分享歷史等等,同時還要考慮時間維度上的衰減(類似hacknews的重力衰減),然後根據權重來推薦,要麼權重大於某一個閾值,要麼在這個人的興趣體系下做排序。推薦精度從統計意義上,和演算法調精以及歷史預料的豐富程度有關
  5. tagging 匹配,其實是另外一種興趣模型的退化,只是不強調權重而已

最後,雖然有匿名用戶否定了個性化新聞閱讀,這裡無意從倫理上討論個性化是否政治正確(例如被洗腦,只關心自己有興趣的,世界這麼大等等),但是就單純從基於用戶興趣口味推薦這件事兒上來說,個性化推薦並非一個偽命題,音樂這方面已經證明,而閱讀和音樂同樣有口味的區別,雖然新聞是相對泛、快的閱讀,但是依然有口味問題:)


用戶最近瀏覽 擴散 或者 搜索 確定候選集 + offline or batch learning 確定預估模型

=&>offline+online 混合重排序~~

至於模型的feature,保密呦


補充一下 @賴曉航 的答案

目前基本上只用到了3,而且3也用的不是很徹底

4也用到了一些,目前有兩個角度

一是文章末尾的相關文章,這個的效果並不理想

另一個角度可以這麼理解。比如,我看了「文章出軌事件」,後續出現的「文章離婚」,「文章新電影」什麼的,或者「汪峰劈腿」等,也會推給我。

這個看起來那麼簡單粗暴,只要點了就給你推,並沒有太多的緩衝延遲或者是再次試探確認猜測驗證等環節。

作法可以這麼理解,2個是第一次就可以猜對的,剩下8個裡面,如果驗證4個也是對的,剩下4個是錯的,那麼這種簡單粗暴猜對的概率是60%。是你你選哪個?況且,現在哪有那麼多機會時間給你慢慢驗證,進來喜歡就繼續看,不喜歡就走了。而且,通過嚴格控制內容源,提高各個類別內容的熱度質量和可讀性,還會提高這個概率,給你推的就是你喜歡看的概率


縱有千萬的,不可推翻的數學演算法,但個性化新聞推薦是偽命題。

(1)世界上有價值的新聞數量 和 個體接受的新聞數量遠遠沒有達到要過濾的程度

(2)馬航新聞是不是所有用戶都要接收呢?天知道每個人的喜好,因時因地因人在改變。測算這種沒有意義的,不如只要分體育、國際、國內等傳統大塊,把每篇新聞做好了才是關鍵。

P.S.大家可能會覺得什麼權值什麼的術語很高大上。其實這是實際想法投射為數學表達。如果前者不成立,數學表達則不正確。


聽聞協同過濾用得蠻多的,用了一些新聞app,網易新聞的推薦做得還可以


我記得吳軍的《數學之美》里有一章就是講的新聞相似度演算法。 大概就是將新聞的每個實詞(因為實詞當然比「得」「地」「的」這種虛詞更有區分度)進行編號。計算每個編號的TF-IDF值, 然後一篇新聞就像下圖這樣變成了一系列數字,用這個值構成一個n維向量。

加入新聞X的向量是X1,X2,X3....X6400 .新聞X的向量是Y1,Y2,Y3....Y6400

然後像這樣計算新聞X和新聞Y的向量的餘弦值。餘弦值越小也就代表著兩篇新聞相似度越高.

這樣推薦起來就很簡單了,如果你看了新聞A, 系統會查找向量餘弦值最小的新聞推薦給你。 大概就是這樣。


推薦閱讀:

特徵工程到底是什麼?
Netflix 是如何判斷《紙牌屋》這樣的劇是符合其觀眾口味並且能夠拉動付費用戶增長的?
誰能解釋下這個架構?
推薦系統有哪些比較好的論文?

TAG:新聞 | 程序員 | 演算法 | 推薦系統 | 推薦演算法 |