《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 可編程邏輯 > 業(yè)界動(dòng)態(tài) > 深度 | 自然語(yǔ)言處理的一大步,應(yīng)用Word2Vec模型學(xué)習(xí)單詞向量表征

深度 | 自然語(yǔ)言處理的一大步,應(yīng)用Word2Vec模型學(xué)習(xí)單詞向量表征

2018-08-01
關(guān)鍵詞: 自然語(yǔ)言 編碼 Word2Vec

在常見的自然語(yǔ)言處理系統(tǒng)中,單詞的編碼是任意的,因此無(wú)法向系統(tǒng)提供各個(gè)符號(hào)之間可能存在關(guān)系的有用信息,還會(huì)帶來(lái)數(shù)據(jù)稀疏問(wèn)題。使用向量對(duì)詞進(jìn)行表示可以克服其中的一些障礙。本文通過(guò)推理、范例及數(shù)學(xué)公式介紹了從原始文本中學(xué)習(xí)「詞嵌入」的模型 Word2Vec。該模型通常用在預(yù)處理階段,可以提高計(jì)算效率。

微信圖片_20180801154320.jpg



讓我們用推理、范例及數(shù)學(xué)公式來(lái)介紹 Word2Vec


引言


Word2Vec 模型用于學(xué)習(xí)被稱為「詞嵌入」的單詞向量表示,通常用在預(yù)處理階段,之后,學(xué)習(xí)到的詞向量可以被輸入到一個(gè)判別模型(通常是一個(gè) RNN)中,進(jìn)而生成預(yù)測(cè)或被用于處理其他有趣的任務(wù)。


為什么要學(xué)習(xí)詞的嵌入表示


圖像和音頻處理系統(tǒng)與豐富的高維數(shù)據(jù)集一起工作,其處理的圖像數(shù)據(jù)被編碼為各個(gè)原始像素強(qiáng)度的向量,因此所有信息都被編碼在數(shù)據(jù)中,從而可以很容易地建立起系統(tǒng)中各種實(shí)體之間的關(guān)系(比如貓和狗)。


但是,在常見的自然語(yǔ)言處理系統(tǒng)中,單詞被視為離散的原子符號(hào),因此」貓」可以被表示為 Id537 而」狗」可以被表示為 Id143。這些編碼是任意的,因而無(wú)法向系統(tǒng)提供各個(gè)符號(hào)之間可能存在關(guān)系的有用信息。這意味著該模型在處理關(guān)于「狗」的數(shù)據(jù)時(shí)無(wú)法充分利用關(guān)于「貓」的知識(shí)(例如它們都是動(dòng)物、寵物、有四只腳等)。


將單詞表示為獨(dú)特、離散的序列號(hào)還會(huì)導(dǎo)致數(shù)據(jù)稀疏問(wèn)題,這通常意味著我們可能需要更多數(shù)據(jù)才能成功地訓(xùn)練統(tǒng)計(jì)模型,而使用向量對(duì)詞進(jìn)行表示可以克服其中的一些障礙。


舉例來(lái)說(shuō):


傳統(tǒng)的自然語(yǔ)言處理方法涉及到許多語(yǔ)言學(xué)本身的知識(shí)。理解諸如音素和語(yǔ)素之類的術(shù)語(yǔ)是相當(dāng)基礎(chǔ)和必要的,因?yàn)橛性S多語(yǔ)言學(xué)分支致力于這樣的研究。我們來(lái)看看傳統(tǒng)的自然語(yǔ)言處理如何試圖理解下面的單詞。


假設(shè)我們的目標(biāo)是收集關(guān)于這個(gè)詞的一些信息(表征它的情感,找到它的定義等)。利用我們的語(yǔ)言學(xué)知識(shí)可以將這個(gè)詞分解成 3 個(gè)部分。



微信圖片_20180801154346.jpg

微信圖片_20180801154418.jpg

深度學(xué)習(xí)最基本的層次是表示學(xué)習(xí)。在這里,我們將通過(guò)相同方法在大規(guī)模數(shù)據(jù)集上為單詞構(gòu)建向量表示。


詞向量


微信圖片_20180801154447.jpg


我們把每一個(gè)單詞表示為一個(gè) d 維的向量。在這里 d=6。我們希望根據(jù)這個(gè)句子,為每一個(gè)單獨(dú)的詞構(gòu)建它的向量表示。


微信圖片_20180801154520.jpg


現(xiàn)在讓我們來(lái)思考一下如何填充這些值。我們希望這些值能夠一定程度上表示這個(gè)單詞和它的上下文、含義或語(yǔ)義信息。一種方法是構(gòu)建共現(xiàn)矩陣。


共現(xiàn)矩陣包含了語(yǔ)料庫(kù)(或訓(xùn)練集)中每一個(gè)單詞同出現(xiàn)在它后一個(gè)單詞的統(tǒng)計(jì)信息。下表是上面所示句子的共現(xiàn)矩陣。


微信圖片_20180801154613.jpg

微信圖片_20180801154646.jpg



通過(guò)這個(gè)簡(jiǎn)單的矩陣,我們能夠獲得非常有用的信息。例如,「love」和「like」這兩個(gè)詞對(duì)名詞(NLP 和 dogs)的計(jì)數(shù)都是 1。他們對(duì)「I」的計(jì)數(shù)也是 1,這表明這些詞很可能是某種動(dòng)詞。對(duì)于遠(yuǎn)比一個(gè)句子更大的數(shù)據(jù)集,可以預(yù)料的是這種相似性會(huì)體現(xiàn)得更加清晰,因?yàn)椤竘ike」、」love」和其他具有相似上下文的同義詞將開始具有相似的向量表示。


這是一個(gè)好的開始,但應(yīng)該注意每個(gè)單詞的維度將隨著語(yǔ)料庫(kù)的大小線性增加。如果我們有一百萬(wàn)詞(在自然語(yǔ)言處理任務(wù)中并不算很多),我們將會(huì)得到一個(gè)一百萬(wàn)乘一百萬(wàn)的非常稀疏(有很多 0)的矩陣,存儲(chǔ)效率很低。后來(lái)人們?cè)谔剿鞲玫脑~向量表示上取得了很多進(jìn)展。其中最著名的是 Word2Vec。


正式介紹 


向量空間模型(VSM)表示(嵌入)連續(xù)向量空間中的單詞,其中語(yǔ)義上相似的單詞被映射到相鄰的點(diǎn)(「都嵌在彼此附近」)。向量空間模型在自然語(yǔ)言處理中有著悠久、豐富的歷史,但是所有方法都以某種方式依賴于分布假說(shuō),該假說(shuō)認(rèn)為出現(xiàn)在相同語(yǔ)境中的詞語(yǔ)具有相似的語(yǔ)義?;谶@一原則的方法可以被分為兩類:


 1. 基于計(jì)數(shù)的方法(例如隱性語(yǔ)義分析)

 2. 預(yù)測(cè)方法(例如神經(jīng)概率語(yǔ)言模型)


二者的區(qū)別在于:


基于計(jì)數(shù)的方法計(jì)算某個(gè)詞在大型文本語(yǔ)料庫(kù)中與其相鄰詞匯共同出現(xiàn)的頻率的統(tǒng)計(jì)數(shù)據(jù),然后將這些統(tǒng)計(jì)數(shù)據(jù)映射到每個(gè)詞的小而密集的向量。


預(yù)測(cè)模型直接嘗試根據(jù)學(xué)習(xí)到的近鄰單詞的小密集嵌入向量(考慮模型的參數(shù))來(lái)預(yù)測(cè)單詞。


Word2vec 是一種用于從原始文本中學(xué)習(xí)詞嵌入的模型,它有很高的計(jì)算效率。它主要有兩種實(shí)現(xiàn)方式,一種是連續(xù)詞袋模型(CBOW),另一種是 Skip-Gram 模型。這兩種方式在算法上是相似的,唯一的差別在于 CBOW 從源上下文單詞中預(yù)測(cè)目標(biāo)單詞,而 Skip-Gram 則恰恰相反,它根據(jù)目標(biāo)單詞預(yù)測(cè)源上下文單詞。


接下來(lái),我們將重點(diǎn)討論 skip-gram 模型。


應(yīng)用到的數(shù)學(xué)知識(shí)


神經(jīng)概率語(yǔ)言模型一般使用最大似然原則進(jìn)行訓(xùn)練,其目標(biāo)是要最大化在給定前面的單詞 h(對(duì)于「history」)時(shí)的下一個(gè)單詞 wt(對(duì)于「target」)的 softmax 概率


微信圖片_20180801154713.jpg

其中 score(wt, h) 計(jì)算目標(biāo)詞 wt 與上下文 h 的相容性(常用點(diǎn)積)。


我們通過(guò)在訓(xùn)練集上最大化它的對(duì)數(shù)似然來(lái)訓(xùn)練這個(gè)模型。所以,我們要最大化以下?lián)p失函數(shù):


微信圖片_20180801154737.jpg


這為語(yǔ)言建模提供了一個(gè)合適的標(biāo)準(zhǔn)化概率模型。


我們可以用另一種形式來(lái)更好地展示這種方法,它可以清晰地展示在訓(xùn)練過(guò)程中為了最大化目標(biāo)函數(shù)而不斷改變的選擇變量(或參數(shù))。


我們的目標(biāo)是找到可以用于預(yù)測(cè)當(dāng)前單詞的周圍詞匯的向量表示。我們尤其希望最大化我們?cè)谡麄€(gè)語(yǔ)料庫(kù)上的平均對(duì)數(shù)概率:


微信圖片_20180801154757.jpg


這個(gè)等式的主要含義是,在當(dāng)前單詞的一定窗口范圍 c 內(nèi)出現(xiàn)的單詞 wt 存在一定的概率 p。這個(gè)概率同當(dāng)前詞 wt 和我們?cè)O(shè)定的參數(shù) theta 相關(guān)。我們希望設(shè)定的參數(shù) theta 可以最大化整個(gè)語(yǔ)料庫(kù)的上述概率。


基本參數(shù)化:Softmax 模型


基本的 skip-gram 模型定義了經(jīng)過(guò) softmax 函數(shù)計(jì)算的概率 p。如果我們的詞匯表中有 N 個(gè)詞,而我們希望學(xué)習(xí)的嵌入向量的維度為 k,那么我們可以設(shè)定 wi 是 N 維的 ont-hot 向量,theta 是一個(gè) N×K 的嵌入矩陣,從而有:


微信圖片_20180801154816.jpg

值得注意的是,在學(xué)習(xí)之后,矩陣 theta 可以被認(rèn)為是嵌入查找矩陣。


在架構(gòu)方面,它是一個(gè)簡(jiǎn)單的三層神經(jīng)網(wǎng)絡(luò)。


微信圖片_20180801154837.jpg


 1. 使用一個(gè) 3 層神經(jīng)網(wǎng)絡(luò)(1 個(gè)輸入層+ 1 個(gè)隱藏層+ 1 個(gè)輸出層)。

 2. 輸入一個(gè)詞,并訓(xùn)練模型來(lái)預(yù)測(cè)它的相鄰詞匯。

 3. 刪除最后一層(輸出層)并保留輸入和隱藏層。

 4. 現(xiàn)在,輸入一個(gè)詞匯表中的單詞。在隱藏層給出的輸出是輸入單詞的「單詞嵌入」。


限制這種參數(shù)化方法在大規(guī)模語(yǔ)料中的應(yīng)用的一個(gè)主要缺點(diǎn)是計(jì)算的效率。具體來(lái)說(shuō),為了計(jì)算單次的正向傳播過(guò)程,我們需要對(duì)整個(gè)語(yǔ)料庫(kù)的詞匯進(jìn)行統(tǒng)計(jì),以計(jì)算 softmax 函數(shù)。這對(duì)于大型數(shù)據(jù)集來(lái)說(shuō)是非常昂貴的,所以我們希望能夠在這個(gè)模型和計(jì)算效率之間找到一個(gè)平衡。


提高計(jì)算效率


對(duì)于 word2vec 中的特征學(xué)習(xí),我們不需要完整的概率模型。CBOW 和 skip-gram 模型是使用二元分類目標(biāo)(邏輯回歸)來(lái)訓(xùn)練的,其目標(biāo)是要在相同的上下文中將真實(shí)目標(biāo)詞語(yǔ)(wt)與 k 個(gè)偽(噪音)詞語(yǔ) -w 進(jìn)行區(qū)分。


微信圖片_20180801154900.jpg


當(dāng)模型給真實(shí)單詞分配更高的概率并且將低概率分配給噪音詞時(shí),我們可以得到最大化的目標(biāo)函數(shù)。從技術(shù)上來(lái)講,我們一般稱之為負(fù)采樣,它提出的更新近似于 softmax 函數(shù)更新的極限。但是從計(jì)算角度來(lái)看,它擁有很高的效率,因?yàn)檫@樣一來(lái)?yè)p失函數(shù)的復(fù)雜度僅僅依賴于我們選擇的噪音詞的數(shù)量(k)而不是詞匯表(V)中的所有單詞。這可以大大提高訓(xùn)練的速度。像 Tensorflow 這樣的軟件包使用了一種非常相似的損失函數(shù),稱為噪聲對(duì)比估計(jì)(NCE)損失。


SKIP-GRAM 模型的直觀感受


以這個(gè)數(shù)據(jù)集為例:


the quick brown fox jumped over the lazy dog


我們首先構(gòu)建一個(gè)包含所有單詞和它們的上下文的數(shù)據(jù)集?,F(xiàn)在,讓我們保持原始定義,并將「上下文」定義為目標(biāo)單詞左側(cè)和右側(cè)的窗口單詞。設(shè)定窗口大小為 1,我們可以得到(上下文,目標(biāo))對(duì)形式的數(shù)據(jù)集。


([the, brown], quick), ([quick, fox], brown), ([brown, jumped], fox), ...


回想一下,skip-gram 會(huì)顛倒上下文和目標(biāo),試圖根據(jù)目標(biāo)詞預(yù)測(cè)每個(gè)上下文單詞,因此任務(wù)變?yōu)閺摹筿uick」預(yù)測(cè)」the」和」brown」以及從」brown」預(yù)測(cè)」quick」和」fox」等。


這樣一來(lái)我們的數(shù)據(jù)集可以整理為(輸入,輸出)對(duì),如下所示:


(quick, the), (quick, brown), (brown, quick), (brown, fox), ...


目標(biāo)函數(shù)在定義上依賴于整個(gè)數(shù)據(jù)集,但是我們通常使用隨機(jī)梯度下降(SGD)方法來(lái)對(duì)模型進(jìn)行優(yōu)化,即每次只使用一個(gè)例子(或者每次使用一小批數(shù)據(jù),每批的數(shù)量通常在 16 到 512 之間)。接下來(lái)讓我們看一下每一步的訓(xùn)練過(guò)程。


讓我們想象一下上述例子的訓(xùn)練過(guò)程。這里的目標(biāo)是從 the 預(yù)測(cè) quick。我們從一個(gè)噪聲分布 P(w)(通常是單字符分布)中選取 num_noise 個(gè)噪聲樣本(單字符分布假設(shè)每個(gè)單詞的出現(xiàn)與所有其他單詞無(wú)關(guān),即我們可以將生成過(guò)程看作一個(gè)按序列擲骰子的過(guò)程)


為了簡(jiǎn)單起見,我們?cè)O(shè)定 num_noise = 1,我們選擇 sheep 作為一個(gè)噪聲樣本。接下來(lái)我們計(jì)算這對(duì)觀察到的和有噪聲的例子的損失,即在」t」時(shí)刻的目標(biāo)函數(shù)變成:


微信圖片_20180801154925.jpg


我們的目標(biāo)是要對(duì)嵌入?yún)?shù)進(jìn)行更新


 theta 用來(lái)最大化這個(gè)目標(biāo)函數(shù)。我們通過(guò)導(dǎo)出與之相關(guān)的損失梯度來(lái)實(shí)現(xiàn)這一目標(biāo)。


微信圖片_20180801154951.jpg


然后,我們通過(guò)向梯度方向邁出一小步來(lái)更新嵌入。當(dāng)我們?cè)谡麄€(gè)訓(xùn)練集上重復(fù)進(jìn)行這個(gè)過(guò)程時(shí),可以對(duì)每個(gè)單詞產(chǎn)生「移動(dòng)」嵌入向量的效果,直到模型成功地區(qū)分真實(shí)單詞和噪音單詞為止。


我們可以通過(guò)將它們向下投影到 2 維來(lái)可視化學(xué)習(xí)到的向量。當(dāng)我們觀察這些可視化時(shí),很明顯這些向量捕獲到了一些關(guān)于單詞的語(yǔ)義信息以及詞與詞之間的關(guān)系,這在實(shí)際中是非常有用的。

微信圖片_20180801155007.jpg


本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,請(qǐng)及時(shí)通過(guò)電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。