淺談微博精準推薦——用戶行為挖掘與相似用戶挖掘
引言:在推薦係統中,通過對用戶數據的挖掘,抽象出用戶感興趣的“商品”,以微博的博文推薦為例,“商品”表現為用戶的博文,在博文精準推薦中,其核心問題是在給定的環境下,為用戶推薦高質量且符合用戶興趣的博文。
本文選自《Python機器學習算法》。
精準推薦
1 精準推薦的項目背景
在社交網絡中,每一個用戶隻是整個網絡中的一個節點,一個簡單的網絡結構如圖1所示。
圖1 網絡結構
在微博中,用戶可以通過“關注”行為成為另一個用戶的粉絲,“關注”行為是有向的。通過“關注”一個用戶後,我們可以在我們的feed流中看到對方的信息。在微博中,通過這樣的方式,我們可以接觸到更多的信息。
然而,在信息過載的時代,信息呈現爆炸式增長,如在微博中,每天有大量的微博被創作和轉發,信息量的爆炸式增長在給用戶不斷帶來新的信息的同時,也增加了用戶篩選信息的難度,為了能夠為用戶推薦其感興趣的信息,我們首先要分析出該用戶的興趣,從海量的信息中選擇出與用戶興趣相似的信息,並將這些信息推薦給用戶。推薦係統(Recommendation System,RS)正是在這樣的背景下被提出的,推薦算法根據用戶的曆史行為,挖掘出用戶的喜好,並為用戶推薦與其喜好相符的商品或者信息。推薦係統的任務就是能夠連接信息與用戶,幫助用戶找到其感興趣的信息,同時讓一些有價值的信息能夠觸達到潛在的用戶中。此時,對用戶興趣的精準挖掘,成為為用戶精準推薦博文的關鍵任務。
2 精準推薦的技術架構
在構建推薦係統的過程中,為了能夠為用戶提供精準的博文推薦,其架構的設計主要包括四層:數據生產層、存儲層、候選過濾層和排序層。最終輸出排序後的結果,具體的精準推薦的架構設計如圖2所示。
圖2 精準推薦的架構設計
在圖2所示的精準推薦的架構設計中,首先,在數據生產層,我們需要利用離線挖掘的方法對用戶興趣進行挖掘,挖掘完成後,將用戶數據存儲到對應的數據庫中,我們稱為用戶數據庫。同時,我們需要將待推薦的微博也存儲在數據庫中,我們稱為推薦微博數據庫。在用戶數據挖掘中,通常使用到的方法包括協同過濾算法、標簽傳播算法、word2vec等。
在存儲層,將挖掘好的用戶興趣存儲到對應的數據庫中,我們通常可以使用Redis等NoSQL數據庫。
在候選過濾層,當用戶請求時,首先從用戶數據庫中查找到用戶的興趣,再根據查找到的用戶興趣、到推薦微博數據庫中進行請求,查找到對應的待推薦的微博,其具體過程如圖3所示。
圖3 查詢操作
當通過如上的操作查詢出了最終的結果後,我們需要對其中的結果進行合並和過濾,以保證最終結果的唯一性。
在排序層,我們需要對所有的候選進行排序,以確定最終的曝光順序,在排序階段,使用的評價指標通常為點擊率CTR,即:
其中,#impression表示的是曝光的次數,#click表示的是點擊的次數,在微博中,點擊的行為主要包括:“轉發”、“評論”、“點讚”、“點擊短鏈接”等。通常采用機器學習的算法對候選進行排序,排序的主要方法有:Logistic Regression算法、因子分解機FM算法、梯度提升決策樹GBDT算法等。
3 離線數據挖掘
在精準推薦中,對用戶的離線數據挖掘是很關鍵的步驟,常用的用戶定向主要有:①人群屬性定向(Demographic Targeting);②行為定向(Behavioral Targeting);③地理位置的定向(Geo Targeting);④相似用戶的定向(Look-Alike Targeting)。
人群屬性定向指基於用戶基本屬性進行定向,包括年齡、性別等定向,比如為女性用戶推薦化妝品類的微博。行為定向指的是基於用戶的曆史行為數據挖掘用戶的興趣,比如通過對微博中用戶對博文的“轉發”、“評論”、“點讚”等數據的分析,發現用戶的興趣。地理位置定向指的是利用移動設備記錄用戶的地理位置,為用戶推薦相關的微博,比如用戶在某個景點,我們為其推薦鄰近地點的微博。相似用戶的定向指的是利用已經找出的一些人,找到與其相似的用戶進行定向。
以上簡單介紹了4種離線數據挖掘的方法,還有很多其他的挖掘方法。在本文中,我們重點關注行為定向和相似用戶的定向。
基於用戶行為的挖掘
在微博中,有兩方麵的數據可以使用,一方麵是用戶之間的關注關係,這不部分數據體現了用戶的社交屬性;另一方麵是用戶的行為數據,主要包括用戶的原創、“轉發”、“評論”、“收藏”、“點讚”、“點擊短鏈接”等,這部分體現了用戶的興趣屬性,通過對不同類型的數據挖掘,我們可以獲得用戶不同維度上的相似性。
在基於用戶的行為的挖掘中,主要包括:
- 基於互動內容的興趣挖掘
- 基於與待推薦微博博主的互動
1 基於互動內容的興趣挖掘
在微博中,用戶的互動行為主要包括“轉發”、“評論”、 “點讚”、“收藏”和“點擊短鏈接”等。這些行為的背後,表明用戶對這條微博的內容在某種程度上產生了共鳴,但是,在不同的行為之間,其能夠代表用戶的興趣程度也是不一樣的,如“點讚”行為隻是對博文內容的認同,而轉發行為,則更多地表明用戶希望讓自己認同的微博內容被更多人看到,更能表明用戶的興趣。
基於互動內容的興趣挖掘是指利用一些機器學習或者文本處理的方法,提取出用戶互動微博文本中的核心詞,一般提取核心詞的主要步驟為:
- 對文本進行分詞,常用的分詞工具有:paoding、FudanNLP、CRF++、jieba等
- 去掉停用詞,並計算剩餘詞的TF-IDF值,取TD-IDF值較高的詞作為核心詞
以這些核心詞作為用戶的標簽,並將這些信息保存到對應的數據庫中,其具體過程如圖4所示。
圖4 基於互動內容的興趣挖掘
2 基於與博主互動的興趣挖掘
當用戶A與待推薦微博的博主之間有過互動行為時,在一定程度上表明該用戶與博主之間存在某種興趣上的相似性,對於博主發布的微博,用戶A互動的可能性比較大,因此,可以選擇將這部分用戶作為待推廣的候選集。
在基於與博主互動的興趣挖掘中,是指將微博博主的微博投放給與其互動過的一些用戶。基於與博主互動的興趣挖掘的主要任務是對曆史的“轉發”、“評論”、“點讚”、“收藏”等數據進行處理,從中提取出博主與互動用戶之間的關係,並將這樣的對應關係存入對應的數據庫中,其具體的過程如圖5所示。
圖5 基於與博主互動的興趣挖掘
基於相似用戶的挖掘
“相似用戶”的概念在不同的應用場景下的理解是不同的,如基於相似興趣的相似用戶,基於不同群體的相似用戶等。在基於相似興趣的相似用戶中,這些用戶都對同一個事物有興趣,如一群對“機器學習”感興趣的用戶的集合。在基於不同群體的相似用戶中,這些用戶可能是年齡區間也可能是消費能力相似,如大學生群體等。在精準推薦中,我們主要考慮的是基於相似興趣的相似用戶。
1 基於“@”人的相似用戶挖掘
從上麵的分析中,我們知道,在微博中,一個用戶與其粉絲之間的關係大致可以分為:
- 社交關係:如親戚、朋友、同事、同學等
- 興趣關係:如機器學習愛好者等
一個用戶與其粉絲之間存在某種相似性,或者是興趣維度的相似,或者是群體間的相似。在微博中,為了能夠定向讓某個人看到,我們會在這條微博中加入“@”該用戶的標記。“@”標記在一定程度上說明該信息與被“@”用戶之間存在關係,而由上述的分析可知,用戶與其粉絲之間存在社交關係或者興趣關係,因此,這樣的挖掘方法能夠充分利用微博數據的特殊性。
在基於“@”人的相似用戶挖掘中,對於包含“@”信息的微博,通過對“@”用戶的提取,查找到該用戶的粉絲,並進行投放,需要查找的庫為用戶的粉絲庫。
2 基於社區的相似用戶挖掘
社區劃分是社交網絡中研究比較多的一個話題,對於不同結構的社交網絡有不同的社區劃分算法。對於社區並沒有明確的定義,通常對於社區的理解是:在網絡中,由一些節點構成特定的分組,在同一個分組內的節點,通過節點之間的連接邊緊密地連接在一起,而在分組與分組之間,其連接比較鬆散,稱每一個分組為一個社區。社區劃分算法通過某種方式將用戶劃分到不同的社區中,社區內部的連接較為強烈,社區與社區之間有比較明顯的界限。
在微博中,用戶與用戶之間的連接主要分為兩種,一種是通過“關注”操作連接兩個用戶,另外一種是通過“轉發”、“評論”、“點讚”、“收藏”、“點擊短鏈接”等行為連接兩個用戶。在上述的兩種連接中,前者的關係不僅包含了興趣關係,也包含社交關係,而後者,更多傾向於興趣關係。在這裏,我們想要得到的更多的是用戶之間的興趣關係,因此,我們這裏使用到的數據是用戶之間的“轉發”、“評論”、“點讚”、“收藏”、“點擊短鏈接”等行為數據。
從這些行為數據中我們可以知道,這些行為數據連接的兩個用戶之間的邊是存在方向的,即構成的圖是有向圖。有向圖是指圖中的邊是帶有方向的圖。對於有向圖,每兩個節點之間的邊的條數是兩條,分別為流出的邊和流入的邊,其流出邊的總數為出度,流入邊的總數為入度,有向圖如圖6所示。
圖6 有向圖
對於節點5,其出度為2,入度也為2。對於更多的有向圖的知識,可參閱相關圖論的書籍。
而對於標簽傳播Label Propagation算法,其對數據的要求是無向圖,為了使得Label Propagation算法能夠利用上述的行為數據對用戶進行社區劃分,我們將圖中的流出邊和流入邊進行合並,合並的公式為:
其中表示的是節點j到節點i的權重,
表示的是節點i到節點j的權重,
表示的是節點j到節點i的權重。通過參數α和參數β可以調節不同的權重比例。此時,我們可以利用Label Propagation算法對微博中的社區進行劃分。
我們對參數α與參數β進行了不同的取值,並利用30天的行為數據,最終得到,當α=0.6,β=0.4時效果比較好,最終識別出12629個社區。雖然我們挖掘出了這些社區,但是這些社區的質量參差不齊,有的社區內部較為活躍,而有些社區,內部並不活躍,我們試圖將一些不活躍的社區從我們挖掘好的社區中去除,此時,計算每一個社區中的信息熵,熵越大表明該社區越活躍,因此,我們過濾一些不活躍的社區,保留活躍的社區。
當有微博需要投放時,選擇某幾個社區,將微博投放給社區中的住戶,選擇社區的方式有很多種,比如:
- 微博的主題與社區標簽的匹配
- 微博博主所在的社區
在基於社區的相似用戶的挖掘中,利用Label Propagation算法對社區進行挖掘,最終將社區對應的用戶列表存儲到對應的數據庫中,其具體的過程如圖7所示。
圖7 基於社區的相似用戶挖掘
3 基於協同過濾的相似用戶挖掘
對於相似用戶的挖掘,除了上述的社區挖掘的方法外,還可以使用協同過濾的方法。在協同過濾算法中,主要分為基於用戶的協同過濾算法和基於項的協同過濾算法,其主要的區別是在相似度的計算過程中。
我們以基於用戶的協同過濾算法為例,在基於用戶的協同過濾算法中,主要計算任意兩個用戶A和B之間的相似度,並利用該相似度將用戶B互動過而用戶A沒有互動過的商品推薦給用戶A。
在微博中,每個用戶都有自己的粉絲列表,我們可以利用兩個用戶的粉絲列表來度量這兩個用戶之間的相似度,假設用戶A的粉絲列表集合為,用戶B的粉絲列表集合為
,那麼,用戶A和用戶B的相似度為:
其中,表示的是
和
的交集,
表示的是集合
中元素的個數。
本文選自《Python機器學習算法》,點此鏈接可在博文視點官網查看此書。
想及時獲得更多精彩文章,可在微信中搜索“博文視點”或者掃描下方二維碼並關注。
最後更新:2017-07-28 15:02:49