A. 簡要智能閱讀中智能推薦的技術原理
智能推薦演算法總的來說分為兩種:基於內容的推薦演算法和協同過濾推薦演算法。
基於內容的推薦演算法:
根據內容的相似度(靜態的東西)進行推薦,內容不好提取的可以採取貼標簽的形式來區分計算內容的相似程度。然後根據用戶的喜好設置,關注等進行相似內容推薦。
協同過濾推薦演算法:
根據動態信息來進行推薦,即推薦的過程是自動的,推薦結果的產生是系統從用戶的購買行為或瀏覽記錄等隱式信息拿到的,無需用戶通過填表格等方式來明確自己的喜好。因為這些數據都是要讀到內存中進行運算的,所以又叫基於內存的協同過濾(Memory-based Collaborative Filtering),另一種協同過濾演算法則是基於模型的協同過濾(Model-based Collaborative Filtering);m個物品,m個用戶的數據,只有部分用戶和部分數據之間是有評分數據的,其它部分評分是空白,此時我們要用已有的部分稀疏數據來預測那些空白的物品和數據之間的評分關系,找到最高評分的物品推薦給用戶。對於這個問題,用機器學習的思想來建模解決,主流的方法可以分為:用關聯演算法,聚類演算法,分類演算法,回歸演算法,矩陣分解,神經網路,圖模型以及隱語義模型來解決。
(https://www.cnblogs.com/chenliyang/p/6548306.html)
而基於內存的協同過濾又有兩種:
基於user的協同過濾(用戶相似度):通過相似用戶的喜好來推薦
基於item的協同過濾(內容相似度):通過用戶對項目的不同評分推薦可能讓用戶打高評分的項目,是項目之間的相似度。
任何一種單一推薦演算法都有缺點,我們在實際項目中,可以採用混合推薦演算法,融合以上方法,通過串聯並聯等融合,構造出自己的一套推薦體系。
B. 個性化推薦演算法——協同過濾
有三種:協同過濾
用戶歷史行為
物品相似矩陣
C. 信息流的那點事:3 推薦演算法是如何實現的
講完信息流流行的原因( 信息流的那點事:2 為什麼信息流如此流行 ),這一篇,我們來從產品的視角,來看看推薦演算法在技術上是如何實現的。
根據需要的技術和運營成本,可以將主流的推薦演算法分為三類:基於內容元數據的推薦、基於用戶畫像的推薦、基於協同過濾演算法的推薦。
基於元數據的推薦是比較基礎的推薦演算法,基本原理是給內容打標簽,具體元數據的選取根據的內容有所不同,比較通用的角度有內容的關鍵詞、類型、作者、來源等,打開一款頭條類app,選擇屏蔽一條內容,就可以看到一些該內容的元數據。
有了內容的元數據,就可以根據內容間的關聯,可以進行相關內容的推薦,喜歡看奇葩說的用戶,可能也會喜歡看同是米未傳媒出品的飯局的誘惑。根據內容的元數據,也可以記錄並逐漸明確用戶的內容偏好,進行數據積累,便於結合用戶的喜好進行對應的精準推薦,這也就是下面要說的基於用戶畫像的推薦的內容。
用戶畫像,類比一下就是給用戶打標簽,主要由三部分組成:用戶的基礎數據(年齡、性別等)、應用使用數據(應用使用頻率、時長等)和內容偏好數據(喜好的內容分類、種類等)。
對於基礎數據,不同年齡的用戶的內容偏好有很大差異,年輕人可能更喜歡新歌熱歌,而中年人可能更愛聽懷舊一些的歌曲;根據應用使用數據,可以進行用戶分層,活躍用戶可以多推薦內容促進使用,快要流失用戶可以推送一些打開率較高的內容來挽回,運營活動也可以更有針對性;基於內容偏好數據,可以記錄並逐漸明確用戶的內容偏好,從而進行更精準的推薦,從愛看娛樂新聞,到愛看國內明星,再到愛看某個小鮮肉,隨著內容偏好數據的逐步積累,頭條類產品的推薦也就越精確。
協同過濾演算法,簡單來說,就是尋找相近的用戶或內容來進行推薦,主要有基於用戶的協同過濾推薦和基於項目的協同過濾推薦兩種。
(1)基於用戶的協同過濾推薦
基於用戶的協同過濾推薦演算法,就是通過演算法分析出與你內容偏好相近的用戶,將他喜歡的內容推薦給你,這種推薦給你志同道合的人愛看的內容的思路,更相近於生活中的朋友作為同道中人的推薦。舉例來說,如果你喜歡ABC,而其他用戶在和你一樣喜歡ABC的同時,還都喜歡D,那麼就會把D推薦給你。
(2).基於內容的協同過濾推薦
基於內容的協同過濾推薦演算法,就是通過演算法分析出內容和內容之間的關聯度,根據你喜歡的內容推薦最相關的內容,常見的看了這個內容的用戶85%也喜歡xxx,就是這種思路。舉例來說,如果你喜歡A,而喜歡A的用戶都喜歡B,那麼就會把B推薦給你。
相比於純粹的基於內容元數據的推薦,基於內容的協同過濾推薦更能發現一些內容間深層次的聯系,比如羅輯思維經常推薦各種內容,僅僅根據內容元數據來推薦,一集羅輯思維最相關的應該是另外一集,並不能推薦內容元數據相關性不太大的節目里推薦的內容;但由於可能很多用戶看完後都會搜索查看節目里推薦的內容,基於內容的協同過濾推薦就會發現兩者的相關性,進行推薦。
介紹推薦演算法的思路時,我們一直談到一個詞「內容偏好」,這也就是實現推薦演算法時一個核心的問題——需要通過怎樣的數據,才能判定用戶的內容偏好?主流的思路有一下三種:
讓用戶手動選擇,顯然是最簡單的思路,然而由於選擇的空間必然有限,只能讓用戶從幾個大類中間挑選,無法涵蓋全部內容的同時,粒度過大推薦也就很難精準。而且剛打開應用就讓用戶選擇,或者是讓用戶使用一段時間後在去補充選擇,這樣的操作都太重可能造成用戶流失。
既然手動選擇很難實現,我們就需要從用戶的使用數據中挖掘,主流的思路就是根據用戶一些主動操作來判斷,點擊閱讀了就說明喜歡,點了贊或者回復分享就是特別喜歡,如果跳過了內容就減少推薦,點擊了不感興趣,就不再推薦。
根據用戶使用的操作來判斷內容偏好,在不斷地使用中積累與細化數據,對內容偏好的判斷也就越來越准確,這就是頭條系應用的主要策略,這樣的策略對於下沉市場的不願做出主動選擇的沉默用戶,是一個非常適合的策略,但這樣只看點擊與操作,不關注內容實際質量的策略也會造成標題黨、內容低俗等問題,在後文會進一步介紹。
既然選擇不能完全代表用戶的內容偏好,如何使判斷更加精準呢?就要從一些更加隱性的數據入手了,比如對於文章,除了點擊,閱讀時間,閱讀完成度,是否查看文章的相關推薦內容,都是可以考慮的角度,相比純粹的點擊判斷,可以一定程度上解決標題黨的問題。再比如看視頻,如果快進次數過多,雖然看完了,可能也不是特別感興趣,而值得反復回看的內容,命中內容偏好的幾率就相對較高。
介紹完了推薦演算法的原理與數據來源,讓我們來試著還原一下一條內容的完整分發流程。
首先,是內容的初始化與冷啟動。可以通過演算法對內容進行分析提取或者人工處理,提取內容的來源、分類、關鍵詞等元數據,再根據用戶畫像計算內容興趣匹配度,分發給有對應內容偏好的用戶,,也可以通過內容原匹配度,向關系鏈分發,完成內容的冷啟動。
然後,可以根據用戶閱讀時間,閱讀完成度,互動數等數據,對該內容的質量進行分析,相應的增加或者減少推薦,實現內容動態分發調節。
最後,就是協同過濾演算法發揮作用的時間,對於優質內容,可以通過基於用戶的協同過濾推薦,推薦給與該內容受眾有類似愛好的用戶,也可以基於項目的協同過濾推薦,推薦給愛觀看同類內容的用戶,讓優質內容的傳播不在局限於關系鏈。
在真正的推薦演算法實現過程中,除了基礎的內容原匹配度,內容匹配度和內容質量,還有很多值得考慮的問題,比如新聞通知等時效性內容就要短時間加權,超時則不推薦;對於用戶的內容偏好也不能永遠維持,隨著時間用戶可能會喜歡新的內容,如果一定時間內用戶對以前喜歡的內容不感興趣,就要減少該種類推薦;還有為了不陷入越喜歡越推薦,最後全部是一種內容,讓用戶厭煩的境地,對於用戶的偏好也要設定一個上限;為了保持新鮮度,需要幫助用戶發現他可能喜歡的新內容.....
最後,通過數據可以了解我們如何閱讀這篇文章,但任何數據都無法准確描述我們閱讀後的感受與收獲;再高級的演算法也只是演算法,它雖然可能比我們更了解我們實際的的內容偏好,但無法了解到我們對於內容的追求。
這可能也就是頭條系產品雖然收獲了巨大成功,但也收到了標題黨、低俗化、迴音室效應等指責的原因,下一篇,讓我們來聊聊,信息流產品的面臨的問題與可能的解決方法。
D. 利用 SVD 實現協同過濾推薦演算法
奇異值分解(Singular Value Decomposition,以下簡稱SVD)
是在機器學習領域廣泛應用的演算法,它不光可以用於 降維演算法中的特徵分解 ,還可以用於 推薦系統 ,以及自然語言處理等領域。
優點: 簡化數據,去除雜訊,提高演算法的結果。
缺點: 數據的轉換可能難以理解。
應用領域: 推薦引擎(協同過濾、相似度計算)、圖像壓縮等。
SVD定義: 如果我們求出了矩陣A的n個特徵值λ1≤λ2≤...≤λn,以及這n個特徵值所對應的特徵向量{w1,w2,...wn},如果這n個特徵向量線性無關,那麼矩陣A就可以用下式的特徵分解表示:A=WΣW−1,其中W是這n個特徵向量所張成的n×n維矩陣,而Σ為這n個特徵值為主對角線的n×n維矩陣。一般我們會把W的這n個特徵向量標准化,即滿足||wi||2=1, 或者wiTwi=1,此時W的n個特徵向量為標准正交基,滿WTW=I,即WT=W−1, 也就是說W為酉矩陣。要進行特徵分解,矩陣A必須為方陣。那麼如果A不是方陣,則用到SVD。
矩陣A的SVD為:A=UΣVT,其中U是一個m×m的矩陣,Σ是一個m×n的矩陣,除了主對角線上的元素以外全為0,主對角線上的每個元素都稱為奇異值,V是一個n×n的矩陣。U和V都是酉矩陣,即滿足UTU=I,VTV=I。
對於奇異值,它跟我們特徵分解中的特徵值類似,在奇異值矩陣中也是按照從大到小排列,而且奇異值的減少特別的快,在很多情況下,前10%甚至1%的奇異值的和就佔了全部的奇異值之和的99%以上的比例。也就是說,我們也可以用最大的k個的奇異值和對應的左右奇異向量來近似描述矩陣。
因此SVD 也是一種強大的降維工具 ,可以利用 SVD 來逼近矩陣並從中獲得主要的特徵。通過保留矩陣的 80%~90% 的能量,就可以得到重用的特徵並去除雜訊。
推薦系統 是利用電子商務網站向客戶提供商品信息和建議,幫助用戶決定應該購買什麼產品,模擬銷售人員幫助客戶完成購買過程。
主要有以下幾種推薦演算法:
基於內容的推薦(用到自然語言處理), 協同過濾(主流) ,基於規則推薦(基於最多用戶點擊,最多用戶瀏覽等),混合推薦(類似集成演算法,投票決定),基於人口統計信息的推薦(根據用戶基本信息)
協同過濾推薦分為三種類型。 第一種是基於用戶(user-based)的協同過濾(需要在線找用戶和用戶之間的相似度關系),第二種是基於項目(item-based)的協同過濾(基於項目的協同過濾可以離線找物品和物品之間的相似度關系), 第三種是基於模型(model based)的協同過濾(用戶和物品,主流)。
一般在推薦系統中,數據往往是使用 用戶-物品 矩陣來表示的。 用戶對其接觸過的物品進行評分,評分表示了用戶對於物品的喜愛程度,分數越高,表示用戶越喜歡這個物品。而這個矩陣往往是稀疏的,空白項是用戶還未接觸到的物品,推薦系統的任務則是選擇其中的部分物品推薦給用戶。
對於這個 用戶-物品 矩陣,用已有的部分稀疏數據來預測那些空白的物品和數據之間的評分關系,找到最高評分的物品推薦給用戶。
具體基於模型的方法有:
用關聯演算法做協同過濾(Apriori演算法、FP Tree演算法)
用聚類演算法做協同過濾(針對基於用戶或者基於模型,Kmeans,DBSCAN)
用分類演算法做協同過濾(設定評分閾值,高於推薦,低於不推薦,邏輯回歸和樸素貝葉斯,解釋性很強)
用回歸演算法做協同過濾(Ridge回歸,回歸樹)
用矩陣分解做協同過濾(由於傳統的奇異值分解SVD要求矩陣不能有缺失數據,必須是稠密的,而用戶物品評分矩陣是一個典型的稀疏矩陣,主要是SVD的一些變種,比如FunkSVD,BiasSVD和SVD++。這些演算法和傳統SVD的最大區別是不再要求將矩陣分解為UΣVT的形式,而變是兩個低秩矩陣PTQ的乘積形式。)
用神經網路做協同過濾(限制玻爾茲曼機RBM)
在 Python 的 numpy 中,linalg已經實現了SVD
E. 協同過濾演算法屬於自然語言處理方向嗎
協同過濾演算法是這一領域的主流。作為基於內容的演算法執行方式,協同版過濾在准確性上具有相權當的優勢,但無法冷啟動、推薦同質化和運算效率低使其依然存在很多不足。
協同過濾演算法的名稱來源於化學上的過濾操作。
原理
利用物質的溶解性差異,將液體和不溶於液體的固體分離開來的一種方法。如用過濾法除去粗食鹽中少量的泥沙
過濾實驗儀器
漏斗、燒杯、玻璃棒、鐵架台(含鐵圈)、濾紙。
過濾操作要領
要做到「一貼、二低、三靠」。
一貼
即使濾紙潤濕,緊貼漏斗內壁,中間不要留下氣泡。(防止氣泡減慢過濾速度。)
二低
1.濾紙邊緣略低於漏斗邊緣。
2.液面低於濾紙邊緣。(防止液體過濾不凈。)
三靠
1.傾倒時燒杯杯口要緊靠玻璃棒上。
2.玻璃棒下端抵靠在三層濾紙處。
3.漏斗下端長的那側管口緊靠燒杯內壁。
過濾注意事項
1.燒杯中的混合物在過濾前應用玻璃棒攪拌,然後進行過濾。
2.過濾後若溶液還顯渾濁,應再過濾一次,直到溶液變得透明為止。
3.過濾器中的沉澱的洗滌方法:用燒瓶或滴管向過濾器中加蒸餾水,使水面蓋沒沉澱物,待溶液全部濾出後,重復2~3次。
希望我能幫助你解疑釋惑。
F. 協同過濾,基於內容推薦有什麼區別
舉個簡單的小例子,我們已知道
用戶u1喜歡的電影是A,B,C
用戶u2喜歡的電影是A, C, E, F
用戶u3喜歡的電影是B,D
我們需要解決的問題是:決定對u1是不是應該推薦F這部電影
基於內容的做法:要分析F的特徵和u1所喜歡的A、B、C的特徵,需要知道的信息是A(戰爭片),B(戰爭片),C(劇情片),如果F(戰爭片),那麼F很大程度上可以推薦給u1,這是基於內容的做法,你需要對item進行特徵建立和建模。
協同過濾的辦法:那麼你完全可以忽略item的建模,因為這種辦法的決策是依賴user和item之間的關系,也就是這里的用戶和電影之間的關系。我們不再需要知道ABCF哪些是戰爭片,哪些是劇情片,我們只需要知道用戶u1和u2按照item向量表示,他們的相似度比較高,那麼我們可以把u2所喜歡的F這部影片推薦給u1。
根據數據源的不同推薦引擎可以分為三類
1、基於人口的統計學推薦(Demographic-based Recommendation)
2、基於內容的推薦(Content-based Recommendation)
3、基於協同過濾的推薦(Collaborative Filtering-based Recommendation)
基於內容的推薦:
根據物品或內容的元數據,發現物品或內容的相關性,然後基於用戶以前的喜好記錄推薦給用戶相似的物品
基於內容推薦的一個典型的例子,電影推薦系統,首先我們需要對電影的元數據有一個建模,這里只簡單的描述了一下電影的類型;然後通過電影的元數據發現電影間的相似度,因為類型都是「愛情,浪漫」電影 A 和 C 被認為是相似的電影(當然,只根據類型是不夠的,要得到更好的推薦,我們還可以考慮電影的導演,演員等等);最後實現推薦,對於用戶 A,他喜歡看電影 A,那麼系統就可以給他推薦類似的電影 C。