您的位置:首頁>科技>正文

個性化推薦是怎麼做的?產品經理也可以懂的演算法

文/Baolan發佈於14小時前閱讀1943評論0喜歡3

閱讀1943

標籤:

產品經理演算法推薦今日頭條演算法

今日頭條帶動了“個性化推薦”的概念, 自此之後, 無論是工具產品, 電商產品, 還是內容型的產品, 都自帶內容屬性, 個性化演算法也逐漸從賣點變為標配。

各種推薦演算法不能僅僅是研發涉獵領域, 作為PM, 也要深入到演算法內部, 瞭解演算法的設計, 以及結合內容對演算法不斷“調教”, 才能讓產品的推薦演算法不斷完善, 才能符合用戶的口味。

目前比較流行的個性化推薦演算法有以下幾種:

1、產品冷開機通過熱度演算法進行內容推薦

產品發展初期, 由於一方面沒有用戶行為、用戶喜好、用戶畫像, 另外也沒有大量的內容樣本基礎, 是很難開展個性化推薦的。 所以在產品初期, 一般採取“熱度演算法”, 顧名思義就是把熱點的內容優先推薦給使用者。 雖然無法做到基於興趣和習慣為每一個用戶做到精准化的推薦, 但能覆蓋到大部分的內容需求, 而且啟動成本比個性化推薦演算法低太多。

熱度演算法基本原理:

新聞熱度分 = 初始熱度分 + 用戶交互產生的熱度分 – 隨時間衰減的熱度分

Score = S0 + S(Users) – S(Time)

1)以新聞或視頻較有時效性的內容舉例, 熱度隨內容陳舊而分值衰減。

2)初始熱度分不要一視同仁。

按照新聞類別給予新聞不同的初始熱度, 讓用戶關注度高的類別獲得更高的初始熱度分,

從而獲得更多的曝光。 軍事>娛樂>體育>財經....

對於重大事件的報導, 如何讓它入庫時就有更高的熱度, 我們採用的是熱詞匹配的方式。

即對大型新聞網站的頭條, Twitter熱點, 競品的頭條做監控和扒取, 並將這批新聞的關鍵字維護到熱詞庫並保持更新;每條新聞入庫的時候,

讓新聞的關鍵字去匹配熱詞庫, 匹配度越高, 就有越高的初始熱度分。 這樣處理後, 重大事件發生時, Twitter和門戶網站的爭相報導會導致熱詞集中化, 所有匹配到這些熱詞的新聞, 即報導同樣事件的新聞, 會獲得很高的初始熱度分。

3)用戶交互的熱度分值比重不一。 首先明確用戶的的哪些行為會提高新聞的熱度值, 然後對這些行為賦予一定的得分規則。

例如對於單條新聞, 用戶可以點擊閱讀(click), 收藏(favor), 分享(share), 評論(comment)這四種行為, 我們為不同的行為賦予分數, 就能得到新聞的即時用戶行為分為:

S(Users) = 1*click + 5*favor + 10*comment + 20*share

這裡對不同行為賦予的分數為1,5,10,20, 但這個值不能是一成不變的;當使用者規模小的時候,

各項事件都小, 此時需要提高每個事件的行為分來提升用戶行為的影響力;當使用者規模變大時, 行為分也應該慢慢降低, 因此做內容運營時, 應該對行為分不斷調整。

當然也有偷懶的辦法, 那就是把使用者規模考慮進去, 算固定用戶數的行為分, 即:

S(Users) = (1*click + 5*favor + 10*comment + 20*share)/ DAU * N(固定數)

這樣就保證了在不同使用者規模下, 使用者行為產生的行為分基本穩定。

2、基於內容特徵與使用者特徵進行個性化推薦

對於此種推薦, 有兩個實體:內容和使用者, 因此需要有一個聯繫這兩者的東西, 即為標籤。 內容轉換為標籤即為內容特徵化, 使用者則稱為使用者特徵化。 對於此種推薦, 主要分為以下幾個關鍵部分:

標籤庫

綜合上面講述的各個部分即可實現一個基於內容和使用者畫像的個性化推薦系統。

標籤庫

標籤是聯繫使用者與物品、內容以及物品、內容之間的紐帶, 也是反應用戶興趣的重要資料來源。 標籤庫的最終用途在於對使用者進行行為、屬性標記。 是將其他實體轉換為電腦可以理解的語言關鍵的一步。

標籤庫則是對標籤進行聚合的系統,包括對標籤的管理、更新等。

一般來說,標籤是以層級的形式組織的。可以有一級維度、二級維度等。

標籤的來源主要有:

對於內容的關鍵字提取,使用結巴分詞+TFIDF即可。此外,也可以使用TextRank來提取內容關鍵字。

這裡需要注意的一點是對於關聯標籤的處理,比如用戶的標籤是足球,而內容的標籤是德甲、英超,那麼使用者和內容是無法聯繫在一起的。最簡單的方式是人工設置關聯標籤,此外也可以使用word2vec一類工具對標籤做聚類處理,構建主題模型,將德甲、英超聚類到足球下麵。

內容特徵化

內容特徵化即給內容打標籤。目前有兩種方式:

針對機器自動打標籤,需要採取機器學習的相關演算法來實現,即針對一系列給定的標籤,給內容選取其中匹配度最高的幾個標籤。這不同於通常的分類和聚類演算法。可以採取使用分詞 +Word2Vec來實現,過程如下:

將文本語料進行分詞,以空格,tab隔開都可以,使用結巴分詞。

使用word2vec訓練詞的相似度模型。

使用tfidf提取內容的關鍵字A,B,C。

遍歷每一個標籤,計算關鍵字與此標籤的相似度之和。

取出TopN相似度最高的標籤即為此內容的標籤。

此外,可以使用文本主題挖掘相關技術,對內容進行特徵化。這也分為兩種情況:

通用情況下,只是為了效果優化的特徵提取,那麼可以使用非監督學習的主題模型演算法。如LSA、PLSI和GaP模型或者LDA模型。

在和業務強相關時,需要在業務特定的標籤體系下給內容打上適合的標籤。這時候需要使用的是監督學習的主題模型。如sLDA、HSLDA等。

使用者特徵化

使用者特徵化即為使用者打標籤。通過使用者的行為日誌和一定的模型演算法得到使用者的每個標籤的權重。

使用者對內容的行為:點贊、不感興趣、點擊、流覽。對用戶的回饋行為如點贊賦予權值1,不感興趣賦予-1;對於用戶的流覽行為,則可使用點擊/流覽作為權值。

對內容發生的行為可以認為對此內容所帶的標籤的行為。

用戶的興趣是時間衰減的,即離當前時間越遠的興趣比重越低。時間衰減函數使用1/[log(t)+1], t為事件發生的時間距離當前時間的大小。

要考慮到熱門內容會干預使用者的標籤,需要對熱門內容進行降權。使用click/pv作為用戶流覽行為權值即可達到此目的。

此外,還需要考慮雜訊的干擾,如標題黨等。

另,在非業務強相關的情況下,還可以考慮使用LSA主題模型等矩陣分解的方式對使用者進行標籤化。

隱語義推薦

有了內容特徵和使用者特徵,可以使用隱語義模型進行推薦。這裡可以使用其簡化形式,以達到即時計算的目的。

使用者對於某一個內容的興趣度(可以認為是CTR):

其中i=1…N是內容c具有的標籤,m(ci)指的內容c和標籤i的關聯度(可以簡單認為是1),n(ui)指的是用戶u的標籤i的權重值,當用戶不具有此標籤時n(ui)=0,q©指的是內容c的品質,可以使用點擊率(click/pv)表示。

3、其他運用

除了個性化推薦,基於內容的相關性演算法能精准地給出一篇新聞的相關推薦列表,對相關閱讀的實現非常有意義。此外,標籤系統對新聞分類的實現和提升準確性,也有重要的意義。

4、優缺點

基於內容的推薦演算法有幾個明顯優點:

對用戶數量沒有要求,無論日活幾千或是幾百萬,均可以採用;因此個性化推薦早期一般採用這種方式。

每個使用者的特徵都是由自己的行為來決定的,是獨立存在的,不會有互相干擾,因此惡意刷閱讀等新聞不會影響到推薦演算法。

而最主要的缺點就是確定性太強了,所有推薦的內容都是由使用者的閱讀歷史決定,所以沒辦法挖掘用戶的潛在興趣;也就是由於這一點,基於內容的推薦一般與其他推薦演算法同時存在。

基於用戶的協同推薦

終於,經過團隊的努力,你的產品已經有了大量活躍使用者了,這時候你開始不滿足于現有的演算法。雖然基於內容的推薦已經很精准了,但總是少了那麼一點性感。因為你所有給使用者的內容都是基於他們的閱讀習慣推薦的,沒能給用戶“不期而遇”的感覺。

於是,你就開始做基於用戶的協同過濾了。

基於使用者的協同過濾推薦演算法,簡單來講就是依據用戶A的閱讀喜好,為A找到與他興趣最接近的群體,所謂“人以群分”,然後把這個群體裡其他人喜歡的,但是A沒有閱讀過的內容推薦給A。

舉例我是一個足球迷,系統找到與我類似的用戶都是足球的重度閱讀者,但與此同時,這些“足球群體”中有一部分人有看NBA新聞的習慣,系統就可能會給我推薦NBA內容,很可能我也對NBA也感興趣,這樣我在後臺的興趣圖譜就更完善了。

1、用戶群體劃分

做基於用戶的協同過濾,首先就要做用戶的劃分,可以從三方面著手:

(1)外部資料的借用

因為協力廠商帳戶都是授權獲取部分使用者資訊的,往往包括性別,年齡,工作甚至社交關係等,這些資訊對使用者群劃分很有意義。

此外還有其他的一些資料也能借用,例如IP位址,手機語種等。

使用這些資料,你很容易就能得到一個用戶是北京的還是上海的,是大學生還是創業者,並依據這些屬性做準確的大類劃分。

比如一篇行業投資分析出來後,“上海創業圈”這個群體80%的用戶都看過,那就可以推薦給剩下的20%。

(2)產品內主動詢問

常見在產品首次啟動的時候,彈框詢問用戶是男是女,職業等,這樣能對內容推薦的冷開機提供一些幫助。但總體來說,性價比偏低,只能詢問兩三個問題並對使用者的推薦內容做非常粗略的劃分,同時要避免打擾到用戶;這種做法算是基於用戶個性化的雛形。

(3)對比使用者特徵

新聞的特徵加使用者的閱讀資料能得到使用者的特徵,那就可以通過使用者特徵的相似性來劃分群體。

最後總結,沒有一款完美的個性化推薦演算法,畢竟使用者的心裡你別猜別猜別猜,但是產品經理還是要結合自身產品不斷打磨演算法。

作者:Baolan

本文轉自 簡書作者:Baolan 若有任何來源問題,請聯繫QQ:2977686517及時更正。

標籤庫則是對標籤進行聚合的系統,包括對標籤的管理、更新等。

一般來說,標籤是以層級的形式組織的。可以有一級維度、二級維度等。

標籤的來源主要有:

對於內容的關鍵字提取,使用結巴分詞+TFIDF即可。此外,也可以使用TextRank來提取內容關鍵字。

這裡需要注意的一點是對於關聯標籤的處理,比如用戶的標籤是足球,而內容的標籤是德甲、英超,那麼使用者和內容是無法聯繫在一起的。最簡單的方式是人工設置關聯標籤,此外也可以使用word2vec一類工具對標籤做聚類處理,構建主題模型,將德甲、英超聚類到足球下麵。

內容特徵化

內容特徵化即給內容打標籤。目前有兩種方式:

針對機器自動打標籤,需要採取機器學習的相關演算法來實現,即針對一系列給定的標籤,給內容選取其中匹配度最高的幾個標籤。這不同於通常的分類和聚類演算法。可以採取使用分詞 +Word2Vec來實現,過程如下:

將文本語料進行分詞,以空格,tab隔開都可以,使用結巴分詞。

使用word2vec訓練詞的相似度模型。

使用tfidf提取內容的關鍵字A,B,C。

遍歷每一個標籤,計算關鍵字與此標籤的相似度之和。

取出TopN相似度最高的標籤即為此內容的標籤。

此外,可以使用文本主題挖掘相關技術,對內容進行特徵化。這也分為兩種情況:

通用情況下,只是為了效果優化的特徵提取,那麼可以使用非監督學習的主題模型演算法。如LSA、PLSI和GaP模型或者LDA模型。

在和業務強相關時,需要在業務特定的標籤體系下給內容打上適合的標籤。這時候需要使用的是監督學習的主題模型。如sLDA、HSLDA等。

使用者特徵化

使用者特徵化即為使用者打標籤。通過使用者的行為日誌和一定的模型演算法得到使用者的每個標籤的權重。

使用者對內容的行為:點贊、不感興趣、點擊、流覽。對用戶的回饋行為如點贊賦予權值1,不感興趣賦予-1;對於用戶的流覽行為,則可使用點擊/流覽作為權值。

對內容發生的行為可以認為對此內容所帶的標籤的行為。

用戶的興趣是時間衰減的,即離當前時間越遠的興趣比重越低。時間衰減函數使用1/[log(t)+1], t為事件發生的時間距離當前時間的大小。

要考慮到熱門內容會干預使用者的標籤,需要對熱門內容進行降權。使用click/pv作為用戶流覽行為權值即可達到此目的。

此外,還需要考慮雜訊的干擾,如標題黨等。

另,在非業務強相關的情況下,還可以考慮使用LSA主題模型等矩陣分解的方式對使用者進行標籤化。

隱語義推薦

有了內容特徵和使用者特徵,可以使用隱語義模型進行推薦。這裡可以使用其簡化形式,以達到即時計算的目的。

使用者對於某一個內容的興趣度(可以認為是CTR):

其中i=1…N是內容c具有的標籤,m(ci)指的內容c和標籤i的關聯度(可以簡單認為是1),n(ui)指的是用戶u的標籤i的權重值,當用戶不具有此標籤時n(ui)=0,q©指的是內容c的品質,可以使用點擊率(click/pv)表示。

3、其他運用

除了個性化推薦,基於內容的相關性演算法能精准地給出一篇新聞的相關推薦列表,對相關閱讀的實現非常有意義。此外,標籤系統對新聞分類的實現和提升準確性,也有重要的意義。

4、優缺點

基於內容的推薦演算法有幾個明顯優點:

對用戶數量沒有要求,無論日活幾千或是幾百萬,均可以採用;因此個性化推薦早期一般採用這種方式。

每個使用者的特徵都是由自己的行為來決定的,是獨立存在的,不會有互相干擾,因此惡意刷閱讀等新聞不會影響到推薦演算法。

而最主要的缺點就是確定性太強了,所有推薦的內容都是由使用者的閱讀歷史決定,所以沒辦法挖掘用戶的潛在興趣;也就是由於這一點,基於內容的推薦一般與其他推薦演算法同時存在。

基於用戶的協同推薦

終於,經過團隊的努力,你的產品已經有了大量活躍使用者了,這時候你開始不滿足于現有的演算法。雖然基於內容的推薦已經很精准了,但總是少了那麼一點性感。因為你所有給使用者的內容都是基於他們的閱讀習慣推薦的,沒能給用戶“不期而遇”的感覺。

於是,你就開始做基於用戶的協同過濾了。

基於使用者的協同過濾推薦演算法,簡單來講就是依據用戶A的閱讀喜好,為A找到與他興趣最接近的群體,所謂“人以群分”,然後把這個群體裡其他人喜歡的,但是A沒有閱讀過的內容推薦給A。

舉例我是一個足球迷,系統找到與我類似的用戶都是足球的重度閱讀者,但與此同時,這些“足球群體”中有一部分人有看NBA新聞的習慣,系統就可能會給我推薦NBA內容,很可能我也對NBA也感興趣,這樣我在後臺的興趣圖譜就更完善了。

1、用戶群體劃分

做基於用戶的協同過濾,首先就要做用戶的劃分,可以從三方面著手:

(1)外部資料的借用

因為協力廠商帳戶都是授權獲取部分使用者資訊的,往往包括性別,年齡,工作甚至社交關係等,這些資訊對使用者群劃分很有意義。

此外還有其他的一些資料也能借用,例如IP位址,手機語種等。

使用這些資料,你很容易就能得到一個用戶是北京的還是上海的,是大學生還是創業者,並依據這些屬性做準確的大類劃分。

比如一篇行業投資分析出來後,“上海創業圈”這個群體80%的用戶都看過,那就可以推薦給剩下的20%。

(2)產品內主動詢問

常見在產品首次啟動的時候,彈框詢問用戶是男是女,職業等,這樣能對內容推薦的冷開機提供一些幫助。但總體來說,性價比偏低,只能詢問兩三個問題並對使用者的推薦內容做非常粗略的劃分,同時要避免打擾到用戶;這種做法算是基於用戶個性化的雛形。

(3)對比使用者特徵

新聞的特徵加使用者的閱讀資料能得到使用者的特徵,那就可以通過使用者特徵的相似性來劃分群體。

最後總結,沒有一款完美的個性化推薦演算法,畢竟使用者的心裡你別猜別猜別猜,但是產品經理還是要結合自身產品不斷打磨演算法。

作者:Baolan

本文轉自 簡書作者:Baolan 若有任何來源問題,請聯繫QQ:2977686517及時更正。

Next Article
喜欢就按个赞吧!!!
点击关闭提示