用戶畫像 User Profile算法
基於內容推薦離不開用戶畫像。在推薦系統中,並不以市場銷售人員的第一視角去看待用戶(繪製標籤雲圖像或者若干統計學屬性),用戶畫像應該給機器看而不是給人看。安全
推薦系統在對匹配評分以前,要先對 user 和 item 都向量化才能進行計算,其中用戶向量化的結果,就是 user profile。用戶畫像不是推薦系統的目的,而是構建推薦系統過程當中的一個關鍵環節。app
用戶畫像除了用戶最終的匹配評分(ranking),還用於在此以前的召回階段(candidate generation)框架
構建用戶畫像的兩個關鍵因素:維度、量化機器學習
1. 每一個維度的實際含義都是可理解的;維度的數量並不肯定;具體有哪些維度也不肯定(要根據實際狀況設計)工具
2. 不要先主觀量化每一個維度(交給機器),應該以推薦效果的好壞爲導向來反向優化用戶畫像學習
構建用戶畫像的方法:優化
1. 查戶口。直接使用原始數據做爲用戶畫像的內容。好比註冊的資料(人口統計學信息)、購買歷史、閱讀歷史等。除了數據清洗,沒有對數據自己進行任何抽象和概括,沒什麼技術含量,但對於用戶冷啓動等場景有用。搜索引擎
2. 堆數據。堆積歷史數據作統計工做。好比興趣標籤,從歷史行爲數據中去挖掘出標籤,而後在標籤維度上作數據統計,用統計結果做爲量化結果。spa
3. 黑盒子。例如矩陣分解獲得的隱因子、embedding 向量、潛在語義模型構建用戶閱讀興趣。一般不可解釋、不能直接被人看懂,但實際上在推薦系統中承擔的做用很是大。
從文本數據中挖掘
文本數據是互聯網產品中最多見的信息表達形式,數量多、處理快、存儲小,構建用戶畫像中經常使用文本挖掘算法。
user 端舉例:
1. 註冊資料中的姓名、我的簽名
2. 發表的動態、評論、日誌
3. 聊天記錄(?安全性和隱私在哪。。。)
item 端舉例:
1. 物品的標題、描述
2. 物品自己的內容(好比新聞資訊類)
3. 物品的其餘基本屬性的文本
從文本信息中構建一個基礎的用戶畫像,要作如下兩件事:
1. 把非結構化的文本結構化,filtering,保留關鍵信息
2.根據用戶行爲數據把物品的結構化結果傳遞給用戶,於用戶本身的結構化信息合併。
1、結構化文本
從物品端的文本信息,能夠利用成熟的 NLP 算法分析獲得的信息有下面幾種:
1. 關鍵詞提取:最基礎的標籤來源,經常使用 TF-IDF 和 TextRank
2. 實體識別:人物、位置和地點、著做、歷史事件和熱點事件等,經常使用基於詞典的方法結合 CRF 模型
3. 內容分類:將文本按照分類體系分類,用分類來表達較粗粒度的結構化信息
4. 文本:在無人制定分類體系的前提下,無監督地將文本劃分紅多個類簇。雖然不是標籤,類簇編號也是用戶畫像的常見構成
5. 主題模型:從大量已有文本中學習主題向量,而後再預測新的文本在各個主題上的機率分佈狀況。
6. embedding:用有限維度的向量來表達,挖掘字面意思之下的語義信息(往下再找一層)
以上涉及到的常見文本結構化算法:
1. TF-IDF
詞頻-逆文檔頻率。核心思想:在一篇文字中反覆出現的詞會更重要,在全部文本中都出現的詞更不重要。這兩點就分別量化成 TF 和 IDF 和兩個指標。
TF = 某詞在文章中出現的次數/文章總詞數 或者 TF = 某詞在文章中出現的次數/該文章中出現最多的詞的出現次數
IDF = log(語料庫的文章總數 / 包含該詞的文章總數+1 )
將兩個值相乘就獲得每個詞的權重,而後能夠根據權重篩選關鍵詞:1. 取 Top K 個詞。但若是總共獲得的詞個數少於K,顯然不合理;2. 計算全部詞權重的平均值,取在權重平均值之上的詞做爲關鍵詞
2. TextRank
i. 文本中設定一個窗口寬度,好比 K 個詞,統計窗口內的詞和詞的共現關係,將其當作無向圖。
ii. 全部詞初始化的重要性都是1
iii. 每一個節點把本身的權重平均分配給「和本身有鏈接」(共現)的其餘節點
iv. 每一個節點將全部其餘節點分給本身的權重求和,做爲本身的新權重
v. 迭代iii、iv,直到全部的節點權重收斂爲止
那些有共現關係的會互相支持對方成爲關鍵詞
3. 內容分類
圖文信息流 app 的資訊內容須要被自動分類到不一樣的頻道中,從而可以獲得最粗粒度的結構化信息,也被用來在用戶冷啓動時探索用戶興趣。
短文本分類的經典算法是SVM,在開源工具上最經常使用的是 Facebook 開源的 FastText。
4. 實體識別
命名實體識別(Named-Entity Recognition),對每個分好的詞,識別爲定義的命名實體集合之一。在 NLP 中被認爲序列標註問題。
序列標註問題經常使用的算法就是 HMM 或者 CRF,推薦系統中主要是想挖掘出想要的結構化結果。
另外還有實用的非模型作法:詞典法。用字典樹存儲,提早準備好各類 entity 的詞典;拿着分好的詞去詞典裏找,找到了某個詞就認爲是提早定義好的 entity 了。
工業級別的工具中 spaCy 效率較高。
5. 聚類
一樣是無監督,以 LDA 爲表明的主題模型能更準確地抓住主題,獲得軟聚類的效果(一條文本能夠屬於多個類簇)。
若是沒有業務專家專門制定分類體系,LDA 會有很大幫助。設定主題個數 K,能夠經過實驗的方式來肯定 K 值:每次計算 K 個主題兩兩之間的平均類似度,選擇一個較低的 K 值。另外,獲得文本在各個主題上的分佈,能夠保留機率最大的前幾個主題做爲文本的主題。
開源 LDA 工具備 Gensim、PLDA
6. embedding
比較熟悉,很少說了。主要是就是把高維稀疏的數據映射成一個稠密的向量,查表的計算方式會讓前向和反向傳播計算都很快,有助於提高後續模型的效果。
2、標籤選擇
如何把物品的結構化信息給到用戶呢?
把用戶對物品的行爲,消費或者沒有消費當作是一個分類問題。用戶的實際行動就已經標註了若干數據,那麼挑出他實際感興趣的特性就變成了特徵選擇問題。
最經常使用的是兩個方法:卡方檢驗(CHI)和信息增益(IG)
基本思想:
1. 把物品的結構化內容當作是文檔
2. 把用戶對物品的行爲當作是類別
3. 每一個用戶看見過的物品就是一個文本集合
4. 在這個文本集合上使用特徵選擇算法選出每一個用戶關心的東西
1.卡方檢驗
自己是一種特徵選擇方法。是有監督的(TF-IDF、TextRank 都是無監督的),須要提供分類標註信息。爲何須要呢?
在文本分類任務中,挑選關鍵詞是爲了分類任務而服務,而不只僅是挑選出直觀上看上去重要的詞。卡方檢驗本質作的是,檢驗「詞和某個類別 C 相互獨立」這個假設是否成立,和這個假設偏離越大,越說明這個詞和類別 C 很是有關係,那顯然這個詞就是關鍵詞了。
計算一個詞 Wi 和一個類別 Cj 的卡方值,須要統計四個值:
1. 類別爲 Cj 的文本中出現詞 Wi 的文本數 A
2. 詞 Wi 在非 Cj 的文本中出現的文本數 B
3. 類別爲 Cj 的文本中沒有出現 Wi 的文本數 C
4. 詞 Wi 在非 Cj 的文本中沒有出現的文本數 D
而後計算每個詞和每個類別的卡方值:
幾點說明:
1. 每一個詞和每一個類別都要計算,只要對其中一個類別有幫助的詞都應該留下
2. 因爲是比較卡方值的大小,因此公式中的 N 能夠不參與計算,由於它對每一個詞都同樣,就是總的文本數
3. 卡方值越大,意味着偏離「詞和類別相互獨立」的假設越遠,靠「詞和類別互相不獨立」這個備擇假設越近
2. 信息增益
信息增益(Information Gain)也是一種監督的關鍵詞選擇方法,也須要標註信息。與卡方檢驗不一樣的是,卡方檢驗是對每一個行爲單獨篩選一套標籤出來,信息增益是全局統一篩選。
如何理解信息熵呢。一批文本被標註了類別,任意挑出一個文本,其類別?若是原來每一個類別的文本數量都同樣,那確定最很差猜,但若是其中一個類別的文本 C 數量遠遠多於其餘類別,那麼就很容易猜對。區別就在於信息熵不一樣,前者信息熵大,後者小。
進一步再想,若是從這一堆文本中再挑出包含有詞 W 的文本數,再來看任意一條文本的類別時,仍然有上面說的兩種狀況。考慮一種狀況:若是在整個文本上的狀況是1,但挑出包含詞 W 後的狀況變成2了,那麼這個詞 W 就很是有用!
這就是信息增益的思想:
1. 統計全局文本的信息熵
2. 統計每一個詞的條件熵(知道了一個詞後再統計文本的信息熵,只不過要分別計算包含詞和不包含詞兩部分的信息熵,再按照各自文本比例加權平均)
3. 二者相減就是每一個詞的信息增益
CART 決策樹就用信息增益做爲選擇分裂點的標準。
卡方檢驗和信息增益都是在離線階段批量完成的,這樣就能夠天天更新用戶畫像。(新用戶呢?——MAB問題)
超越標籤的內容推薦系統
基於內容的推薦系統,標籤只是很小一部分(並且也不是說標籤越多就必定越有幫助)。基於內容推薦,其實就是一個信息檢索系統(包裝成推薦系統),但確是複雜推薦系統的基礎,並且有助於解決冷啓動問題(新物品)。
內容數據是比較容易獲得的,並且容易挖掘出有用信息供推薦系統使用(尤爲是文本數據)。
多抓數據補充內同源,增長分析的維度;數據清洗,去冗餘、垃圾、敏感內容;對數據深刻的挖掘;計算用戶興趣和物品屬性之間更合理的相關性
1. 基於內容推薦的框架:
基於內容推薦,最重要的不是算法,而是內容挖掘和分析。內容分析越深刻,能抓住的用戶羣體就越細緻,推薦的轉化率就越高,用戶的好感度就上升,反饋就越多。
內容分析的產出有兩個:
結構化內容庫(結合用戶反饋去學習用戶畫像);
內容分析模型(分類器、主題模型、entity識別模型、embedding,新物品進入時須要被實時推薦出去,須要這些模型對內容是實時分析,提取結構化內容,再用於用戶畫像匹配)
2. 內容推薦算法
i. 最簡單的方法就是計算 用戶畫像端的稀疏向量 和 內容端的稀疏向量 之間的類似度,基於類似度對推薦物品排序。(可解釋性強)
ii. 更好地利用內容中的結構化信息:不一樣字段的重要性不一樣。經常使用的開源搜索引擎 Lucene 已經實現了 BM25F 算法(相關性計算)
iii. 機器學習方法(考慮推薦的目標),CTR預估模型。每條樣本由兩部分構成,一部分是特徵,包含用戶端的畫像內容、物品端的結構化內容、日誌記錄的上下文信息(時間、地理位置、設備...);另外一部分就是用戶行爲,做爲標註信息(有反饋、無反饋兩類)。訓練一個二分類器,經常使用 LR 和 GBDT 或二者混合,按照用戶行爲發生的機率排序。