1. 程式人生 > >基於skip-gram做推薦系統的想法

基於skip-gram做推薦系統的想法

hub 數據 影視 公式 width 一位 友好 word2vec 效率

一、人工智能之自然語言處理

自然語言處理(Natural Language Processing, NLP),是人工智能的分支科學,意圖是使計算機具備處理人類語言的能力。

“處理人類語言的能力”要達到什麽效果呢?舉個例子!班主任問路班長:“你能把粉筆遞過來麽?”。這句話有兩層意思,第一層:你能不能把粉筆遞過來;第二層:把粉筆遞過來。Get到第一層,班長回答“能”,Get到第二層意思,班長遞上粉筆。倘若班長僅回答了“能”,情景略尷尬。

對於人類來說,Get到兩層意思沒什麽問題,但是要計算機Get到第二層意思就不那麽簡單。因為人類語言囊括了許多主觀意識,是人從出生開始不斷學習而形成的技能,如果想要計算機達到這樣的效果,也需要有一個學習的過程。基於這樣一個出發點,自然語言處理應運而生。

二、自然語言處理之word2vec

計算機智能保存0、1這樣的數據,不會保存kitty、tom、jerry、舒克這樣的文本,那麽該如何表達文本呢?

1、 one-hot編碼

又稱獨熱編碼、一位有效編碼。直觀來說就是有多少個狀態就有多少比特,而且只有一個比特為1,其他全為0的一種碼制,如圖一:

kitty

1

0

0

0

tom

0

1

0

0

jerry

0

0

1

0

舒克

0

0

0

1

圖一

舉個例子:我們用{1,0,0,0}表示kitty,用{0,0,0,1}表示tom。這樣kitty與tom之間的區分程度就可以用數學中的向量距離來表示。

但是one-hot有一個弊端,就是表達方式太冗余,僅僅利用了一個位置,其他位置全部浪費了。上面4個單詞用了4列,其中3列為0,如果有1000個單詞,那麽就會有999列為0。因此需要一種更好的表達方式。

2、 Embeddings

是一組廣泛應用於預測NLP建模的特征工程技術,是比one-hot更有效率的一種表達方式,如圖二:

Cat

Mouse

kitty

0.8

0.2

tom

0.9

0.1

jerry

0.2

0.8

舒克

0.3

0.7

圖二

我們使用Cat和Mouse兩個特征,kitty{0.8,0.2}與tom{0.9,0.1}之間的距離要小於kitty{0.8,0.2}與jerry{0.2,0.8}之間的距離,與直觀上的感受是一致的,也可以達到區分的目的。而且空間占用相比於one-hot減小了一倍。

三、word2vec之skip-gram

首先我們要有一個直觀的感受,來看下面四個句子:

1、 武磊在西班牙足球甲級聯賽打入首粒入球;

2、 武磊確認為西班牙人足球隊本場比賽的首發;

3、 湖人5連勝,詹姆斯三雙再刷NBA歷史紀錄;

4、 詹姆斯又創NBA裏程悲,湖人還有辦法嗎?

上面四個句子,我們可以發現:當“武磊”出現時,大概率會出現“足球”、“西班牙”, 小概率出現“NBA”;當“詹姆斯”出現時,大概率會出現“NBA”、“湖人”,小概率出現“足球”。

上述問題可以換一種抽象的描述:當X出現時,Y1、Y2、Y3…Yn會以較大概率出現。Skip-Gram-Naïve-Softmax模型可以處理這種情況,如圖三:

技術分享圖片

圖三

假設我們的輸入是最左邊的one-hot-vector向量,經過VxD維矩陣M1映射為1xD的Vc向量,再經過DxV維矩陣M2映射,最後經過SoftMax成為公式一

技術分享圖片公式1

公式1可以用來用來表示的具體信息,我們暫不討論數學公式,僅從直觀上分析:要找到一種情景S使公式1最大,從而最有效的對矩陣M1、M2進行訓練(參考神經網絡相關知識)。

那麽情景S如何選取呢,Skip-gram將情景S定義為單詞的上下文,即距離目標單詞Wi物理位置較近的Wi-1,Wi+1等等。比如說本節的例子,“武磊”附近大概率出現“足球”、“西班牙”,“詹姆斯”附近大概率出現“NBA”、“湖人“。

通過符合情景S的訓練集,對圖中的矩陣M1、M2進行訓練,就可以得的單詞的Embeddings表示,進而計算不同單詞之間的距離。

代碼實現、數據集:https://github.com/dongguadan/recommender-system.git

查詢單詞:kenya

相似度排名:

Colonialism:0.71

Sheeny:0.67

Score:0.65

Religious:0.64

Estereotyped:0.64

Africa:0.63

Maputo:0.63

Jodorowsky:0.61

Tankjacking:0.61

Cambodia:0.61

技術分享圖片

圖四

四、Skip-gram應用於推薦系統

上面的數據集是基於影視評論的統計,通過計算於目標單詞相似度最近的單詞,可以找到與評論者近似的評論,進而對評論者的興趣進行評估、做友好推薦。

五、參考

https://github.com/DSKSD/DeepNLP-models-Pytorch

https://www.jianshu.com/p/8e291e4ba0da

基於skip-gram做推薦系統的想法