主要內(nèi)容
上一節(jié)討論了自然語(yǔ)言處理,討論了深度學(xué)習(xí),非常宏觀,也非常有趣。這一節(jié)和下一節(jié)的探討則會(huì)直接跳到最基礎(chǔ)的內(nèi)容:詞向量。同時(shí),也會(huì)涉及到一些基本的數(shù)學(xué)推導(dǎo)。
如何表示一個(gè)詞語(yǔ)的意思?計(jì)算機(jī)如何處理詞語(yǔ)的意思離散化表示的問(wèn)題從符號(hào)化表示到分布式表示基于相似度的分布式表示通過(guò)向量定義詞語(yǔ)的含義word2vec神經(jīng)網(wǎng)絡(luò)詞嵌入的基本思路word2vec主要思路Skip-gram預(yù)測(cè)word2vec細(xì)節(jié)一張圖濃縮Skipgram訓(xùn)練模型:計(jì)算向量梯度梯度推導(dǎo)梯度下降隨機(jī)梯度下降法關(guān)于公式排版Md2All 簡(jiǎn)介
如何表示一個(gè)詞語(yǔ)的意思?
什么是“意思”?這是個(gè)簡(jiǎn)單的問(wèn)題,想要解釋清楚卻并不容易。怎么辦,向詞典求助。韋氏詞典說(shuō),“意思”是詞語(yǔ)、短語(yǔ)所表達(dá)的思想;人們使用詞語(yǔ)、符號(hào)所要表達(dá)的思想;作品、藝術(shù)所要表達(dá)的思想。這基本上與語(yǔ)言學(xué)家的思路是一致的。
在語(yǔ)言學(xué)家眼中,詞語(yǔ)是一種語(yǔ)言符號(hào)。任何語(yǔ)言符號(hào)是由“能指”和“所指”構(gòu)成的,“能指”指語(yǔ)言的聲音形象,“所指”指語(yǔ)言所反映的事物的概念。比如英語(yǔ)的“tree”這個(gè)單詞,它的發(fā)音就是它的“能指”,而“樹(shù)”的概念就是“所指”。
中文中“意思”的意思更加有意思:
他說(shuō):“她這個(gè)人真有意思(funny)?!彼f(shuō):“他這個(gè)人怪有意思的(funny)?!庇谑侨藗円詾樗麄冇辛艘馑迹╳ish),并讓他向她意思意思(express)。他火了:“我根本沒(méi)有那個(gè)意思(thought)!”她也生氣了:“你們這么說(shuō)是什么意思(intention)?”事后有人說(shuō):“真有意思(funny)。”也有人說(shuō):“真沒(méi)意思(nonsense)”。(原文見(jiàn)《生活報(bào)》1994.11.13.第六版)[吳尉天,1999] ——《統(tǒng)計(jì)自然語(yǔ)言處理》
然而這些高大上的東西對(duì)于計(jì)算機(jī)實(shí)際處理詞語(yǔ)的意思幾乎沒(méi)有任何幫助。
計(jì)算機(jī)如何處理詞語(yǔ)的意思
過(guò)去幾十年里主要使用的是分類詞典。比如使用WordNet詞庫(kù)可以查詢上義詞和同義詞。
panda 的上義詞
fromnltk.corpusimportwordnetaswnpanda=wn.synset('panda.n.01')hyper=lambdas:s.hypernyms()list(panda.closure(hyper))[Synset('procyonid.n.01'),Synset('carnivore.n.01'),Synset('placental.n.01'),Synset('mammal.n.01'),Synset('vertebrate.n.01'),Synset('chordate.n.01'),Synset('animal.n.01'),Synset('organism.n.01'),Synset('living_thing.n.01'),Synset('whole.n.02'),Synset('object.n.01'),Synset('physical_entity.n.01'),Synset('entity.n.01')]
good 的同義詞
S:(adj)full,goodS:(adj)estimable,good,honorable,respectableS:(adj)beneficial,goodS:(adj)good,just,uprightS:(adj)adept,expert,good,practiced,proficient,skillfulS:(adj)dear,good,nearS:(adj)good,right,ripe…S:(adv)well,goodS:(adv)thoroughly,soundly,goodS:(n)good,goodnessS:(n)commodity,tradegood,good
離散化表示的問(wèn)題
有很大的參考價(jià)值,但無(wú)法體現(xiàn)細(xì)微差異,比如adept, expert, good, practiced, proficient, skillful雖然意思相近,但有很多細(xì)微差異
缺少新詞,無(wú)法與時(shí)俱進(jìn)
比較主觀
需要手工創(chuàng)建和改編,甚至需要專家參與
難以精確計(jì)算詞與詞之間的相似度
無(wú)論是基于規(guī)則的語(yǔ)言處理,還是基于統(tǒng)計(jì)的語(yǔ)言處理,大都把詞語(yǔ)當(dāng)作單個(gè)符號(hào)進(jìn)行處理。這種離散化、分類式的表示都普遍存在上述問(wèn)題。
把這樣的單個(gè)詞語(yǔ)直接轉(zhuǎn)換成向量后,就會(huì)出現(xiàn)一個(gè)1和大量的0:
這就是所謂的one-hot 向量,也是一種localist的表示方式(只顧自己,不顧他人)這種編碼方式會(huì)導(dǎo)致向量維度隨著詞表的增加而增加。2萬(wàn) (speech) – 5萬(wàn) (PTB) – 50萬(wàn) (big vocab) – 1300萬(wàn) (Google 1T),最后,這些詞向量會(huì)變得非常非常長(zhǎng),使得計(jì)算機(jī)難以處理。
從符號(hào)化表示到分布式表示
符號(hào)化表示體現(xiàn)不出詞語(yǔ)之間的內(nèi)在聯(lián)系,無(wú)法表示意思的相似度。任何兩個(gè)獨(dú)熱向量都是正交的,無(wú)法通過(guò)任何運(yùn)算得到相似度。
因此需要找到一種可以直接把相似度編碼進(jìn)向量的方法,也就是說(shuō)可以直接從向量中讀出詞語(yǔ)之間的內(nèi)在聯(lián)系。
基于相似度的分布式表示
語(yǔ)言學(xué)家J. R. Firth提出,通過(guò)一個(gè)詞語(yǔ)的上下文可以得到它的意思?!癥ou shall know a word by the company it keeps.”一個(gè)詞的意思是通過(guò)它的上下文表示的。
這個(gè)思想非常簡(jiǎn)單,卻非常強(qiáng)大,是現(xiàn)代自然語(yǔ)言處理最成功的思想之一。
例如,如何知道banking的意思呢?方法就是找到成千上萬(wàn)含有banking的例句,看它周圍都出現(xiàn)了哪些詞語(yǔ),然后通過(guò)處理這些詞語(yǔ)來(lái)獲得banking的含義:
government debt problems turning into ?banking? crises as has happenedsaying that Europe needs unified ?banking? regulation to replace the hodgepodge
banking的含義是由周圍的這些詞表示的。
通過(guò)向量定義詞語(yǔ)的含義
我們先把一個(gè)詞語(yǔ)定義成一個(gè)稠密向量,通過(guò)調(diào)整一個(gè)單詞及其上下文單詞的向量,使得根據(jù)兩個(gè)向量可以推測(cè)兩個(gè)詞語(yǔ)的相似度;或通過(guò)一個(gè)詞可以預(yù)測(cè)詞語(yǔ)的上下文;或根據(jù)上下文可以預(yù)測(cè)這個(gè)詞。這種手法也是遞歸的。
這個(gè)稠密的向量,就是詞義的分布式表示。
word2vec
神經(jīng)網(wǎng)絡(luò)詞嵌入的基本思路
借助詞向量來(lái)定義一個(gè)預(yù)測(cè)中心詞和語(yǔ)境詞的概率模型(給定中心詞,預(yù)測(cè)語(yǔ)境詞的概率):
然后再定義損失函數(shù):
這里的表示的語(yǔ)境詞(負(fù)號(hào)表示除了某某之外)。損失函數(shù)的目的是判斷預(yù)測(cè)的準(zhǔn)確與否。如果根據(jù)中心詞可以完美預(yù)測(cè)語(yǔ)境詞,則損失函數(shù)為零。而一般情況下是做不到的這一點(diǎn)的。
有了損失函數(shù)后,接下來(lái)就會(huì)在一個(gè)大型語(yǔ)料庫(kù)的不同位置得到訓(xùn)練實(shí)例,調(diào)整詞向量,最小化損失函數(shù)。
最后,令人驚嘆的奇跡就會(huì)發(fā)生!產(chǎn)生的詞向量非常強(qiáng)大,能充分地表示詞語(yǔ)的含義。(后面會(huì)提到)
word2vec主要思路
在中心詞和語(yǔ)境詞之間相互預(yù)測(cè)!
兩種算法:
Skip-grams(SG)給定目標(biāo)詞,預(yù)測(cè)語(yǔ)境詞
連續(xù)詞袋(CBOW)給定語(yǔ)境詞袋,預(yù)測(cè)目標(biāo)詞
兩個(gè)相對(duì)高效的訓(xùn)練方法:
層級(jí) Softmax
負(fù)采樣
Skip-gram預(yù)測(cè)
Skip-gram預(yù)測(cè)
Skip-gram的核心思想是定義一個(gè)給定中心詞、預(yù)測(cè)語(yǔ)境詞的概率分布模型。然后通過(guò)調(diào)整向量,使概率分布最大化。
注意:這里雖然有四條線,但模型中只有一個(gè)條件分布。學(xué)習(xí)就是要最大化這些概率。
word2vec細(xì)節(jié)
對(duì)于每一個(gè)中心詞,計(jì)算半徑為的窗口中的所有外圍詞的預(yù)測(cè)概率。。然后通過(guò)調(diào)整向量,使得預(yù)測(cè)概率最大。
所以目標(biāo)函數(shù)就是下面這個(gè)樣子,我們要通過(guò)調(diào)整參數(shù),使其最大化:
對(duì)其取負(fù)對(duì)數(shù),得到負(fù)對(duì)數(shù)似然函數(shù),這樣就把連我乘轉(zhuǎn)換為求和。我們要對(duì)其最小化。
其中 表示所有需要優(yōu)化的變量。
loss function = cost function = objective function 損失函數(shù)、代價(jià)函數(shù)、目標(biāo)函數(shù)都是一樣的。對(duì)于概率分布,一般使用交叉熵來(lái)計(jì)算損失。
那么概率是如何計(jì)算的?
對(duì)兩個(gè)詞向量 做點(diǎn)乘:
兩個(gè)向量越相似,其點(diǎn)積越大!
重復(fù)以上,,算出所有詞與的點(diǎn)積,然后通過(guò)softmax獲得的概率分布。softmax是一種將實(shí)數(shù)值轉(zhuǎn)換成概率(0-1)的標(biāo)準(zhǔn)方法。
其中:是外部詞(輸出詞、語(yǔ)境詞)索引,是中心詞索引,是索引為的中心詞向量是索引為的外部詞向量
一張圖濃縮Skipgram
Skipgram濃縮圖
從左到右是中心詞獨(dú)熱向量,乘以中心詞向量矩陣W,獲得中心詞語(yǔ)義向量,乘以另一個(gè)語(yǔ)境詞矩陣W'得到每個(gè)詞語(yǔ)的“相似度”,對(duì)相似度取softmax得到概率,與答案對(duì)比計(jì)算損失。
這兩個(gè)矩陣都含有V個(gè)詞向量,也就是說(shuō)同一個(gè)詞有兩個(gè)詞向量,哪個(gè)作為最終的、提供給其他應(yīng)用使用的embeddings呢?有兩種策略,要么加起來(lái),要么拼接起來(lái)。
訓(xùn)練模型:計(jì)算向量梯度
通常把模型參數(shù)集定義為向量 ,訓(xùn)練的過(guò)程就是優(yōu)化這些參數(shù),方法是梯度下降法。以之前的模型為例,有V個(gè)詞,每個(gè)詞有兩個(gè)向量,每個(gè)向量為d維,共有2dV個(gè)參數(shù)。
梯度推導(dǎo)
重要組件:
矩陣偏微分
鏈?zhǔn)椒▌t若y=f(u),u=g(x),即y=f(g(x)),則:
目標(biāo)函數(shù):
最大化它等同于最小化
其中T是文本長(zhǎng)度,m是窗口大小。
目標(biāo)函數(shù)中的概率通過(guò)softmax計(jì)算:
注意:每個(gè)詞語(yǔ)分別有中心詞和語(yǔ)境詞兩個(gè)向量表示。
我們先從一個(gè)中心詞及其語(yǔ)境詞開(kāi)始。
對(duì)中心詞求梯度:
因此,
以上只是中心詞向量參數(shù)梯度的推導(dǎo),外部詞向量參數(shù)梯度的推導(dǎo)過(guò)程類似。
梯度下降
有了梯度,參數(shù)減去梯度就能朝著最小值走了。這就是梯度下降法。
要在整個(gè)數(shù)據(jù)集上優(yōu)化目標(biāo)函數(shù),需要計(jì)算所有窗口的梯度。用矩陣的語(yǔ)言表述:
樸素梯度下降代碼:
whileTrue:theta_grad=evaluate_gradient(J,corpus,theta)theta=theta-alpha*theta_grad
梯度下降示意圖
等高線表示目標(biāo)函數(shù)的數(shù)值。梯度與等高線垂直,指明了前進(jìn)的方向。 是每次前進(jìn)的步長(zhǎng)。
梯度下降法是求函數(shù)最小值的最基本的方法。
隨機(jī)梯度下降法
面對(duì)海量語(yǔ)料庫(kù)和窗口數(shù),計(jì)算所有參數(shù)的梯度,會(huì)讓每次參數(shù)更新變得異常緩慢!這對(duì)所有神經(jīng)網(wǎng)絡(luò)來(lái)說(shuō),都不是個(gè)好主意。
相反,我們使用隨機(jī)梯度下降法(SGD)。每次只對(duì)某個(gè)窗口更新參數(shù)。
隨機(jī)梯度下降代碼:
whileTrue:theta_grad=evaluate_gradient(J,window,theta)theta=theta-alpha*theta_grad
雖然隨機(jī)梯度下降充滿噪音,但效果奇好,而且速度要快幾個(gè)數(shù)量級(jí)。神經(jīng)網(wǎng)絡(luò)喜歡嘈雜的算法!
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4772瀏覽量
100807 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5503瀏覽量
121206 -
自然語(yǔ)言處理
+關(guān)注
關(guān)注
1文章
618瀏覽量
13562
原文標(biāo)題:詞語(yǔ)的向量化表示(CS224N-2)
文章出處:【微信號(hào):gh_b11486d178ef,微信公眾號(hào):語(yǔ)言和智能】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論