1、人工智能之天然語言處理git
天然語言處理(Natural Language Processing, NLP),是人工智能的分支科學,意圖是使計算機具有處理人類語言的能力。github
「處理人類語言的能力」要達到什麼效果呢?舉個例子!班主任問路班長:「你能把粉筆遞過來麼?」。這句話有兩層意思,第一層:你能不能把粉筆遞過來;第二層:把粉筆遞過來。Get到第一層,班長回答「能」,Get到第二層意思,班長遞上粉筆。假若班長僅回答了「能」,情景略尷尬。網絡
對於人類來講,Get到兩層意思沒什麼問題,可是要計算機Get到第二層意思就不那麼簡單。由於人類語言囊括了許多主觀意識,是人從出生開始不斷學習而造成的技能,若是想要計算機達到這樣的效果,也須要有一個學習的過程。基於這樣一個出發點,天然語言處理應運而生。學習
2、天然語言處理之word2vec編碼
計算機智能保存0、1這樣的數據,不會保存kitty、tom、jerry、舒克這樣的文本,那麼該如何表達文本呢?人工智能
一、 one-hot編碼spa
又稱獨熱編碼、一位有效編碼。直觀來講就是有多少個狀態就有多少比特,並且只有一個比特爲1,其餘全爲0的一種碼制,如圖一:blog
kittyip |
1ci |
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。所以須要一種更好的表達方式。
二、 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減少了一倍。
3、word2vec之skip-gram
首先咱們要有一個直觀的感覺,來看下面四個句子:
一、 武磊在西班牙足球甲級聯賽打入首粒入球;
二、 武磊確認爲西班牙人足球隊本場比賽的首發;
三、 湖人5連勝,詹姆斯三雙再刷NBA歷史紀錄;
四、 詹姆斯又創NBA里程悲,湖人還有辦法嗎?
上面四個句子,咱們能夠發現:當「武磊」出現時,大機率會出現「足球」、「西班牙」, 小几率出現「NBA」;當「詹姆斯」出現時,大機率會出現「NBA」、「湖人」,小几率出現「足球」。
上述問題能夠換一種抽象的描述:當X出現時,Y一、Y二、Y3…Yn會以較大機率出現。Skip-Gram-Naïve-Softmax模型能夠處理這種狀況,如圖三:
圖三
假設咱們的輸入是最左邊的one-hot-vector向量,通過VxD維矩陣M1映射爲1xD的Vc向量,再通過DxV維矩陣M2映射,最後通過SoftMax成爲公式一
公式1
公式1能夠用來用來表示的具體信息,咱們暫不討論數學公式,僅從直觀上分析:要找到一種情景S使公式1最大,從而最有效的對矩陣M一、M2進行訓練(參考神經網絡相關知識)。
那麼情景S如何選取呢,Skip-gram將情景S定義爲單詞的上下文,即距離目標單詞Wi物理位置較近的Wi-1,Wi+1等等。好比說本節的例子,「武磊」附近大機率出現「足球」、「西班牙」,「詹姆斯」附近大機率出現「NBA」、「湖人「。
經過符合情景S的訓練集,對圖中的矩陣M一、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
圖四
4、Skip-gram應用於推薦系統
上面的數據集是基於影視評論的統計,經過計算於目標單詞類似度最近的單詞,能夠找到與評論者近似的評論,進而對評論者的興趣進行評估、作友好推薦。
5、參考
https://github.com/DSKSD/DeepNLP-models-Pytorch
https://www.jianshu.com/p/8e291e4ba0da