2.5 学习词嵌入-深度学习第五课《序列模型》-Stanford吴恩达教授
學(xué)習(xí)詞嵌入 (Learning Word Embeddings)
在本節(jié)視頻中,你將要學(xué)習(xí)一些具體的算法來(lái)學(xué)習(xí)詞嵌入。在深度學(xué)習(xí)應(yīng)用于學(xué)習(xí)詞嵌入的歷史上,人們一開(kāi)始使用的算法比較復(fù)雜,但隨著時(shí)間推移,研究者們不斷發(fā)現(xiàn)他們能用更加簡(jiǎn)單的算法來(lái)達(dá)到一樣好的效果,特別是在數(shù)據(jù)集很大的情況下。但有一件事情就是,現(xiàn)在很多最流行的算法都十分簡(jiǎn)單,如果我一開(kāi)始就介紹這些簡(jiǎn)單的算法,你可能會(huì)覺(jué)得這有點(diǎn)神奇,這么簡(jiǎn)單的算法究竟是怎么起作用的?稍微復(fù)雜一些的算法開(kāi)始,因?yàn)槲矣X(jué)得這樣更容易對(duì)算法的運(yùn)作方式有一個(gè)更直觀的了解,之后我們會(huì)對(duì)這些算法進(jìn)行簡(jiǎn)化,使你能夠明白即使一些簡(jiǎn)單的算法也能得到非常好的結(jié)果,我們開(kāi)始吧。
假如你在構(gòu)建一個(gè)語(yǔ)言模型,并且用神經(jīng)網(wǎng)絡(luò)來(lái)實(shí)現(xiàn)這個(gè)模型。于是在訓(xùn)練過(guò)程中,你可能想要你的神經(jīng)網(wǎng)絡(luò)能夠做到比如輸入:“I want a glass of orange ___.”,然后預(yù)測(cè)這句話的下一個(gè)詞。在每個(gè)單詞下面,我都寫(xiě)上了這些單詞對(duì)應(yīng)詞匯表中的索引。實(shí)踐證明,建立一個(gè)語(yǔ)言模型是學(xué)習(xí)詞嵌入的好方法,我提出的這些想法是源于Yoshua Bengio,Rejean Ducharme,Pascal Vincent,Rejean Ducharme,Pascal Vincent還有Christian Jauvin。
下面我將介紹如何建立神經(jīng)網(wǎng)絡(luò)來(lái)預(yù)測(cè)序列中的下一個(gè)單詞,讓我為這些詞列一個(gè)表格,“I want a glass of orange”,我們從第一個(gè)詞I開(kāi)始,建立一個(gè)one-hot向量表示這個(gè)單詞I。這是一個(gè)one-hot向量(上圖編號(hào)1所示),在第4343個(gè)位置是1,它是一個(gè)10,000維的向量。然后要做的就是生成一個(gè)參數(shù)矩陣 EEE ,然后用 EEE 乘以 O4343O_{4343}O4343? ,得到嵌入向量 e4343e_{4343}e4343? ,這一步意味著 e4343e_{4343}e4343? 是由矩陣 EEE 乘以one-hot向量得到的(上圖編號(hào)2所示)。然后我們對(duì)其他的詞也做相同的操作,單詞want在第9665個(gè),我們將 EEE 與這個(gè)one-hot向量(O9665O_{9665}O9665?)相乘得到嵌入向量 e9665e_{9665}e9665? 。對(duì)其他單詞也是一樣,a是字典中的第一個(gè)詞,因?yàn)?strong>a是第一個(gè)字母,由 O1O_1O1? 得到 e1e_1e1? 。同樣地,其他單詞也這樣操作。
于是現(xiàn)在你有許多300維的嵌入向量。我們能做的就是把它們?nèi)糠胚M(jìn)神經(jīng)網(wǎng)絡(luò)中(上圖編號(hào)3所示),經(jīng)過(guò)神經(jīng)網(wǎng)絡(luò)以后再通過(guò)softmax層(上圖編號(hào)4所示),這個(gè)softmax也有自己的參數(shù),然后這個(gè)softmax分類器會(huì)在10,000個(gè)可能的輸出中預(yù)測(cè)結(jié)尾這個(gè)單詞。假如說(shuō)在訓(xùn)練集中有juice這個(gè)詞,訓(xùn)練過(guò)程中softmax的目標(biāo)就是預(yù)測(cè)出單詞juice,就是結(jié)尾的這個(gè)單詞。這個(gè)隱藏層(上圖編號(hào)3所示)有自己的參數(shù),我這里用 W[1]W^{[1]}W[1] 和 b[1]b^{[1]}b[1] 來(lái)表示,這個(gè)softmax層(上圖編號(hào)4所示)也有自己的參數(shù) W[2]W^{[2]}W[2] 和 b[2]b^{[2]}b[2] 。如果它們用的是300維大小的嵌入向量,而這里有6個(gè)詞,所以用6×300,所以這個(gè)輸入會(huì)是一個(gè)1800維的向量,這是通過(guò)將這6個(gè)嵌入向量堆在一起得到的。
實(shí)際上更常見(jiàn)的是有一個(gè)固定的歷史窗口,舉個(gè)例子,你總是想預(yù)測(cè)給定四個(gè)單詞(上圖編號(hào)1所示)后的下一個(gè)單詞,注意這里的4是算法的超參數(shù)。這就是如何適應(yīng)很長(zhǎng)或者很短的句子,方法就是總是只看前4個(gè)單詞,所以說(shuō)我只用這4個(gè)單詞(上圖編號(hào)2所示)而不去看這幾個(gè)詞(上圖編號(hào)3所示)。如果你一直使用一個(gè)4個(gè)詞的歷史窗口,這就意味著你的神經(jīng)網(wǎng)絡(luò)會(huì)輸入一個(gè)1200維的特征變量到這個(gè)層中(上圖編號(hào)4所示),然后再通過(guò)softmax來(lái)預(yù)測(cè)輸出,選擇有很多種,用一個(gè)固定的歷史窗口就意味著你可以處理任意長(zhǎng)度的句子,因?yàn)檩斎氲木S度總是固定的。所以這個(gè)模型的參數(shù)就是矩陣 EEE ,對(duì)所有的單詞用的都是同一個(gè)矩陣 EEE ,而不是對(duì)應(yīng)不同的位置上的不同單詞用不同的矩陣。然后這些權(quán)重(上圖編號(hào)5所示)也都是算法的參數(shù),你可以用反向傳播來(lái)進(jìn)行梯度下降來(lái)最大化訓(xùn)練集似然,通過(guò)序列中給定的4個(gè)單詞去重復(fù)地預(yù)測(cè)出語(yǔ)料庫(kù)中下一個(gè)單詞什么。
事實(shí)上通過(guò)這個(gè)算法能很好地學(xué)習(xí)詞嵌入,原因是,如果你還記得我們的orange jucie,apple juice的例子,在這個(gè)算法的激勵(lì)下,apple和orange會(huì)學(xué)到很相似的嵌入,這樣做能夠讓算法更好地?cái)M合訓(xùn)練集,因?yàn)樗袝r(shí)看到的是orange juice,有時(shí)看到的是apple juice。如果你只用一個(gè)300維的特征向量來(lái)表示所有這些詞,算法會(huì)發(fā)現(xiàn)要想最好地?cái)M合訓(xùn)練集,就要使apple(蘋(píng)果)、orange(橘子)、grape(葡萄)和pear(梨)等等,還有像durian(榴蓮)這種很稀有的水果都擁有相似的特征向量。
這就是早期最成功的學(xué)習(xí)詞嵌入,學(xué)習(xí)這個(gè)矩陣 EEE 的算法之一。現(xiàn)在我們先概括一下這個(gè)算法,看看我們?cè)撛鯓觼?lái)推導(dǎo)出更加簡(jiǎn)單的算法。現(xiàn)在我想用一個(gè)更復(fù)雜的句子作為例子來(lái)解釋這些算法,假設(shè)在你的訓(xùn)練集中有這樣一個(gè)更長(zhǎng)的句子:“I want a glass of orange juice to go along with my cereal.”。我們?cè)谏蟼€(gè)幻燈片看到的是算法預(yù)測(cè)出了某個(gè)單詞juice,我們把它叫做目標(biāo)詞(下圖編號(hào)1所示),它是通過(guò)一些上下文,在本例中也就是這前4個(gè)詞(下圖編號(hào)2所示)推導(dǎo)出來(lái)的。如果你的目標(biāo)是學(xué)習(xí)一個(gè)嵌入向量,研究人員已經(jīng)嘗試過(guò)很多不同類型的上下文。如果你要建立一個(gè)語(yǔ)言模型,那么一般選取目標(biāo)詞之前的幾個(gè)詞作為上下文。但如果你的目標(biāo)不是學(xué)習(xí)語(yǔ)言模型本身的話,那么你可以選擇其他的上下文。
比如說(shuō),你可以提出這樣一個(gè)學(xué)習(xí)問(wèn)題,它的上下文是左邊和右邊的四個(gè)詞,你可以把目標(biāo)詞左右各4個(gè)詞作為上下文(上圖編號(hào)3所示)。這就意味著我們提出了一個(gè)這樣的問(wèn)題,算法獲得左邊4個(gè)詞,也就是a glass of orange,還有右邊四個(gè)詞to go along with,然后要求預(yù)測(cè)出中間這個(gè)詞(上圖編號(hào)4所示)。提出這樣一個(gè)問(wèn)題,這個(gè)問(wèn)題需要將左邊的還有右邊這4個(gè)詞的嵌入向量提供給神經(jīng)網(wǎng)絡(luò),就像我們之前做的那樣來(lái)預(yù)測(cè)中間的單詞是什么,來(lái)預(yù)測(cè)中間的目標(biāo)詞,這也可以用來(lái)學(xué)習(xí)詞嵌入。
或者你想用一個(gè)更簡(jiǎn)單的上下文,也許只提供目標(biāo)詞的前一個(gè)詞,比如只給出orange這個(gè)詞來(lái)預(yù)測(cè)orange后面是什么(上圖編號(hào)5所示),這將會(huì)是不同的學(xué)習(xí)問(wèn)題。只給出一個(gè)詞orange來(lái)預(yù)測(cè)下一個(gè)詞是什么(上圖編號(hào)6所示),你可以構(gòu)建一個(gè)神經(jīng)網(wǎng)絡(luò),只把目標(biāo)詞的前一個(gè)詞或者說(shuō)前一個(gè)詞的嵌入向量輸入神經(jīng)網(wǎng)絡(luò)來(lái)預(yù)測(cè)該詞的下一個(gè)詞。
還有一個(gè)效果非常好的做法就是上下文是附近一個(gè)單詞,它可能會(huì)告訴你單詞glass(上圖編號(hào)7所示)是一個(gè)鄰近的單詞。或者說(shuō)我看見(jiàn)了單詞glass,然后附近有一個(gè)詞和glass位置相近,那么這個(gè)詞會(huì)是什么(上圖編號(hào)8所示)?這就是用附近的一個(gè)單詞作為上下文。我們將在下節(jié)視頻中把它公式化,這用的是一種Skip-Gram模型的思想。這是一個(gè)簡(jiǎn)單算法的例子,因?yàn)樯舷挛南喈?dāng)?shù)暮?jiǎn)單,比起之前4個(gè)詞,現(xiàn)在只有1個(gè),但是這種算法依然能工作得很好。
研究者發(fā)現(xiàn),如果你真想建立一個(gè)語(yǔ)言模型,用目標(biāo)詞的前幾個(gè)單詞作為上下文是常見(jiàn)做法(上圖編號(hào)9所示)。但如果你的目標(biāo)是學(xué)習(xí)詞嵌入,那么你就可以用這些其他類型的上下文(上圖編號(hào)10所示),它們也能得到很好的詞嵌入。我會(huì)在下節(jié)視頻詳細(xì)介紹這些,我們會(huì)談到Word2Vec模型。
總結(jié)一下,在本節(jié)視頻中你學(xué)習(xí)了語(yǔ)言模型問(wèn)題,模型提出了一個(gè)機(jī)器學(xué)習(xí)問(wèn)題,即輸入一些上下文,例如目標(biāo)詞的前4個(gè)詞然后預(yù)測(cè)出目標(biāo)詞,學(xué)習(xí)了提出這些問(wèn)題是怎樣幫助學(xué)習(xí)詞嵌入的。在下節(jié)視頻,你將看到如何用更簡(jiǎn)單的上下文和更簡(jiǎn)單的算法來(lái)建立從上下文到目標(biāo)詞的映射,這將讓你能夠更好地學(xué)習(xí)詞嵌入,一起進(jìn)入下節(jié)視頻學(xué)習(xí)Word2Vec模型。
課程板書(shū)
總結(jié)
以上是生活随笔為你收集整理的2.5 学习词嵌入-深度学习第五课《序列模型》-Stanford吴恩达教授的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 2.4 嵌入矩阵-深度学习第五课《序列模
- 下一篇: 2.6 Word2Vec-深度学习第五课