做好推薦的第一步,是認識待推薦的物品。例如,如果不知道一篇文章是介紹機械鍵盤的,也就不可能把它推薦機械鍵盤的愛好者們。對物品認識的角度,準確性,覆蓋面,等等,都影響著後續推薦的質量。
文字是物品資訊的最常見的存在形式,文字以很多種格式儲存和傳輸,並且常常是以自然語言形式組織的,但是在推薦系統無法理解自然語言資訊,必須是結構化處理。文字挖掘演算法承擔著轉化的任務。
本文將介紹文字類挖掘演算法。
網際網路中文字資訊最常見的存在形式是網頁,基本都是html格式。這裡就涉及資訊提取類演算法。最常見的就是網頁資訊提取演算法,這類演算法的目標是將網頁中物品的關鍵資訊提取出來。搜尋系統和推薦系統,為了提高搜尋和推薦的效果,一般會基於這些提取後的關鍵資訊去檢索和推薦,而不會基於整個網頁的資訊。
對於網頁資訊提取演算法,困難點在於:
早期的資訊提取演算法都是基於規則的,基本思路是對每個**維護一套提取規則,可以是xpath規則,也可以是css選擇器規則。這類演算法的缺點是當**數量邊多的時候,規則的維護成本比較大,因為**格式可能會改版,這些規則對html格式的微小改變是很敏感的,原來的規則就會時效。
後來出現了一些基於機器學習的自動抽取演算法。基本思路是人工標記出網頁中的目標資訊,作為訓練資料,利用機器學習演算法自動的學習目標資訊的特徵,然後用訓練的模型自動提取目標資訊。
我們知道,機器學習類演算法有兩方面重要的工作,乙個是模型方面的的工作, 另乙個是特徵工程方面的工作。先說模型,常用的資訊提取模型有基於分類是,主要用svm,gbdt;也有基於序列標註的,主要用到隱馬爾科夫(hmm)和條件隨機場(crf).
我們知道特徵工程和模型的是互補的,所有的問題都可以在特徵和模型兩側找到對稱的解決方案。網頁資訊提取演算法早期用到的特徵,主要是html標籤和文字統計類特徵,比如標籤名字,標籤屬性值,標籤內文字數量,父標籤是什麼,子標籤數量等等。由於html語法的靈活性,不難想象這些特徵的泛化效果不會很好。例如,沒有理由說新聞的正文一定用標籤,也可以用標籤,其他任何能達到顯示效果的標籤,都可以。
對特徵的優化,後來引入了視覺特徵,靈感來自於這樣乙個現象:不論你開啟哪家新聞**的網頁,你都會一眼就看出哪是正文,哪是標題,哪是時間,我們在做資訊定位的時候,其實用的就是視覺資訊,而不會管背後的html格式如何。因為對於一類網頁,都會遵照一類是視覺設計樣式,所以在開啟乙個外文**,我們可以在不認識具體內容的情況下,定位關鍵資訊的位置。
所謂視覺特徵,就是網頁經過渲染之後,使用者直接可以觀察到的特徵,例如標籤的座標位置,大小,文字顏色,字型大小,背景等等。可以想象出這類特徵的效果會非常好。
關於網頁資訊提取演算法更詳細的介紹,可以參考我之前的一篇博文:資訊提取(information extraction),這裡就不展開介紹了。
分詞是自然語言處理最基礎的任務。自然語言的基本元素是字元,分詞就是將連續的字串行按照一定的規範重新組合成詞序列的過程。分詞是其他文字挖掘任務的前置任務。
詞性標註就是為分詞結果中的每個單詞標註乙個正確的詞性,比如名詞,動詞,形容詞,等等。與分詞一樣,也是自然語言處理基礎任務之一。
分詞結果中有一類詞表示的是專用詞,包括人物,事件,地點,書名,影視劇名,等等,這類詞表示具有特殊意義的實體,稱為命名實體。命名實體識別就是找出分詞結果中的命名實體。
命名實體識別演算法與分詞演算法,詞性標註演算法同屬nlp領域的序列標註問題。常用的傳統演算法是隱馬爾可夫模型(hmm)和條件隨機場(crf),目前也有些深度學習類的演算法,例如基於迴圈神經網路的演算法。有需要可以參考相關的資料,本文就不再展開介紹了。
綜合考慮兩個指標,得到每個詞t
\space t\space
t對於一篇文字i
\space i\space
i的權重:
w (t
,i)=
tf(t
,i)⋅
logn
df(x
)+
1w(t,i)=tf(t,i) \cdot log\frac
w(t,i)
=tf(
t,i)
⋅log
df(x
)+1n
textrank演算法基於pagerank演算法的思想,通過對組成文字的詞建立圖模型,利用投票機制,迭代計算每個詞的得分,直到分數收斂為止。
每一次迭代得分計算方式為:
w (i
)=(1
−d)+
d⋅∑j
∈in(
i)1∣
out(
i)∣⋅
w(j)
w(i)=(1-d)+d\cdot\sum_\frac\cdot w(j)
w(i)=(
1−d)
+d⋅j
∈in(
i)∑
∣out
(i)∣
1⋅w
(j)其中d
dd稱為阻尼係數,一般取0.85。in(i)表示指向改詞的單詞集合,out(i)表示i指向的單詞集合。
人類演算法首先需要乙個分類體系,其次是人工標記好類別的訓練資料。
好的分類體系需要較強的領域知識,所以分類體系的梳理一般由領域專家來完成。分類體系一般是分層的,有大類,大類中有小類別。
有了分類體系之後,分類演算法將文字劃分為類別系統中的類別之一。分類演算法一般屬於監督類機器學習演算法。常用的分類演算法有svm。
類別是文字的重要特徵,是人類認識資訊的乙個重要緯度,分類資訊是各類產品的重要功能之一,例如電商產品都會提供乙個商品分類展示和檢索功能,資訊類產品各類資訊都有對應的頻道。
並且,在個性化推薦的冷啟動時期,我們對新使用者興趣了解甚少,類別資訊常常被推薦系統用來探索使用者的興趣。
聚類不需要領域專家梳理的分類體系。聚類與分類是差別是,屬於無監督類機器學習演算法,根據文字間的相似度聚類成若干個類簇。類簇號也是重要的一類文字特徵。也有之前的文章專門介紹過聚類演算法,這裡就不展開了。
主題模型演算法自動學習出文字的主題分布,以lda演算法為代表。lda也不需要我們指定主題,通常值只需要指定主題的數量。
嵌入(embedding)是乙個稠密向量,文字嵌入是文字嵌入到潛因子空間的座標。潛因子空間的緯度一般人為指定,以效果為導向。
得到資訊在潛因子空間的嵌入表達後,可以通過向量計算來計算資訊之間的相似度,也可以作為其他演算法的輸入特徵。
嵌入的思想來自於word2vec演算法。word2vec演算法用神經網路學習到每個詞在潛因子空間的嵌入表達。其思想被發揚之後,出現了很多text2vec,item2vec,user2vec,doct2vec等等演算法。
推薦系統演算法介紹(二)
我們拿到的是使用者的一些基本資訊,或者根據使用者的上下文資訊得到使用者的標籤,這些標籤就屬於使用者的特徵,根據使用者的特徵可以找到跟使用者相似的使用者。相似的使用者具有相似的愛好,所以把物品推薦給使用者。最重要的資訊就是使用者的基本資訊,如年齡,性別。沒有使用者基本資訊,還可以收集沒有明確含義的使用...
推薦系統之LFM(二)
顯然我們不能靠由單個人 編輯 或team的主觀想法建立起來的分類標準對整個平台使用者喜好進行標準化。此外我們還需要注意的兩個問題 我們在可見的使用者書單中歸結出3個類別,不等於該使用者就只喜歡這3類,對其他類別的書就一點興趣也沒有。也就是說,我們需要了解使用者對於所有類別的興趣度。對於乙個給定的類來...
協同過濾之基於使用者 物品矩陣推薦系統 待續
先上圖,第乙個是基於物品協同過濾推薦,第二個是基於使用者的協同過濾推薦 這個兩個步驟差不多。先說基於物品的協同過濾,原理就是上面這張圖,下面說步驟 步驟 1 根據使用者對物品的評分構建使用者 物品矩陣 2 建立乙個nn的物品相似度矩陣 在產品 產品協同過濾中的產品之間的相似性值是通過觀察所有對兩個產...