1. Word meaning
1.1 one-hot表示法
比如一個有4個詞的語料:
I like deep learning,如果使用one-hot編碼那么每一個詞對應(yīng)一個1,其他詞則對應(yīng)0爽篷,
I :[1 0 0 0]
like :[0 1 0 0]
deep :[0 0 1 0]
learning:[0 0 0 1]
但是使用這樣的表大方是有個問題动猬,就是每當(dāng)我的語料庫更改的話灯抛,那么同一個詞的編碼方式就會發(fā)生變化随橘,比如我的語料庫變成了:I like deep learning very much蕴坪,那么這里面的詞的編碼就變成:
I :[1 0 0 0 0 0]
enjoy :[0 1 0 0 0 0]
deep :[0 0 1 0 0 0]
learning:[0 0 0 1 0 0]
very :[0 0 0 0 1 0]
much :[0 0 0 0 0 1]
可以看到还栓,只是語料庫發(fā)生了變化碌廓,同一個詞I,deep剩盒,learning三個詞都發(fā)生了變化谷婆,而且可以發(fā)現(xiàn)隨著語料庫的增加,每一個句中的詞的長度都在增加勃刨,并且1在整個句子中越來越稀疏波材,比如有個200個詞的語料庫只有一位是1,其他199位都是0身隐,再比如2000個詞的語料庫呢廷区?并且 like 和 enjoy其實(shí)表達(dá)的是差不多的意思,但是使用這種方法就完全體現(xiàn)不出來贾铝,所以總結(jié)一下使用one-hot有一下幾個缺點(diǎn):
同一個隨著語料庫發(fā)生改變表達(dá)也會不同
不能表示詞與詞之間的相似性
隨著語料庫的增加one-hot表式會變得越來越稀疏
1.2 分布式表示
基于上面one-hot無法表示詞與詞之間的相似性隙轻,所以1957年語言學(xué)家J.R.Firth提出:
這句話是說:你要是想知道一個單詞的意思,可以通過這個單詞周圍的詞(上下文)看出來垢揩。所以應(yīng)運(yùn)而生了一種新的表示方法:distributed representation(分布式表示)玖绿,其實(shí)這個概念我們中國學(xué)生最了解不過了,還記不記得大家上學(xué)時做過一種英語題叫做完形填空叁巨,你做題時是不是英語老師會跟你說這個空里面的詞你就看上下文就能十有八九猜出來斑匪。這里有的小伙伴可能會疑惑,為什么叫分布式表示呢锋勺,我的理解是一個詞的意思不單單在于它本身還取決于他周圍的詞蚀瘸,也就是說詞的信息有一部分存在于上下文中,信息被分散了庶橱。比如下面這個例子:
1.3 分布式詞表示的實(shí)現(xiàn)
跟one-hot相同的是贮勃,分布式詞表示同樣使用一個向量來表示,但與one-hot使用詞在句子中的位置來標(biāo)識不同苏章,分布式是是使用一個稠密的向量來表示一個詞寂嘉,這個向量一般在300-500維左右奏瞬,有的會超過1000維,但對于超大型的預(yù)料來說這已經(jīng)相對于one-hot是降維的了泉孩。
那么硼端,句中的所有詞都使用這樣的稠密向量表示后,我們就可以用一些手段來優(yōu)化這些向量寓搬,使得劇中的某些詞的向量能更準(zhǔn)確的代表詞的意思显蝌。而這種方法就是接下來要提到的word2vec model(Mikolov et al. 2013)
2. Word2vec introduction
2.1 word2vec的主要思路
2.2 word2vec有兩個基本模型
-
Skip-gram(SG)
給出中心詞預(yù)測上下文 predict context words given target (position independent)
-
Continuous Bags of Words(CBOW)
給出上下文預(yù)測中心詞 predict target word from bag-of-words context
2.3 兩種高效的訓(xùn)練模型的方式
- Hierarchical softmax(層次softmax)
-
Negative sampling(負(fù)例采樣)
雖然上述兩種方式對于word2vec模型的訓(xùn)練很高效,但是在本節(jié)課中只針對Skip-gram模型介紹一種低效的訓(xùn)練方式订咸,叫做Na?ve softmax
2.4 Skip-gram
skip-gram的主題思想是通過一個中心詞預(yù)測該詞周圍的上下文詞,如圖:
從圖中看到酬诀,該中心詞是然后預(yù)測的詞是
脏嚷、
、
瞒御、
四個詞父叙,也就是說定義了一個分別向前向后的
窗口,用數(shù)據(jù)學(xué)表達(dá)式寫出就是:
公式的意義是:最大化所有中心詞預(yù)測它周圍上下文詞正確的概率肴裙,這個公式作為即代價函數(shù)趾唱。
我再舉個例子來說明下這個數(shù)學(xué)公式,借用漫威中Spider Man的一句話:
這里我就寫了和
兩個蜻懦,但是聰明的你應(yīng)該知道這里的
應(yīng)該要遍歷文本中所有的詞來作為中心詞的甜癞。這里解釋清楚了我們繼續(xù),對
取對數(shù)似然的相反數(shù)為:
我們的目標(biāo)是最大化即
宛乃,那么對于
就變成了
悠咱。再反觀
公式,這個
該如何表示呢征炼?答案是使用
函數(shù)替換:
這個公式里面的和
分別代表的是中心詞的向量和當(dāng)前預(yù)測的上下文的向量析既,這個也說明了:在一句話中一個詞有兩個向量,一個是中心詞向量谆奥,一個是上下文向量眼坏,比如我剛才舉的例子,當(dāng)
作為中心詞預(yù)測
時酸些,
會有個上下文向量宰译,當(dāng)
作為中心詞預(yù)測其他詞時,
也會有個中心詞向量擂仍。
2.5 Skip-gram詳細(xì)過程
下圖是課程中老教授給出的一幅skip-gram的介紹圖囤屹,從圖中我們可以看出一點(diǎn)端倪:
這里有幾個符號需要說一下:
:句子中某個單詞的
向量
:語料庫中(非一個句子)所有單詞對應(yīng)的中心詞向量矩陣(這個矩陣就是我們的優(yōu)化目標(biāo),初始化一般是隨機(jī)小數(shù))
:中心詞的向量
:語料庫中(非一個句子)所有單詞的上下文向量矩陣(這個矩陣就是我們的優(yōu)化目標(biāo)逢渔,初始化一般是隨機(jī)小數(shù))
:中心詞向量與上下文向量的內(nèi)積
可以看到在最終的結(jié)果中和
都預(yù)測錯了肋坚,所以我們會不斷優(yōu)化使得最終所有的詞盡可能的都預(yù)測正確。如果這個圖看著不舒服的話,這里附上標(biāo)準(zhǔn)的圖片:
3. Skip-gram模型訓(xùn)練:梯度計(jì)算
在2.5中提到過和
都是我們的優(yōu)化目標(biāo)矩陣智厌,有的時候會把它們統(tǒng)稱為
然后放在一起:
明白了這點(diǎn)我們就開始使用梯度下降對進(jìn)行求導(dǎo)計(jì)算了: