基於skip-gram做推薦系統的想法
一、人工智能之自然語言處理
自然語言處理(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做推薦系統的想法