word2vec模型

word2vec

動機:爲什麼要學習詞向量(Word Embeddings)

傳統的自然語言處理系統把詞(word)當作一個離散的原子符號。比如,貓可以使用Id537來表示,Id143表示狗。這些編碼是任意的,這些編碼對於系統處理不同的單詞並沒有提供有用的信息。這就意味着,如果系統已經學習了什麼是“貓”的信息,但這個系統處理什麼是“狗”是並沒有提供很大的幫助(比如:他們都是動物,有四條腿,寵物,等)。這種詞的表示是獨立的,離散的Id使得數據之間並沒有很大的關聯,通常也意味着我們需要更多的數據去成功的訓練統計模型。然而,向量(vector representation)克服了這些缺點。

向量空間模型(Vector space models, VSMs)使用一個連續的空間表示詞(words/embed), 它把語義相關的單詞都映射在了附近爲位置。在NLP中,VSM擁有很長很豐富的歷史,但是所有的方法,在很大的程度上都有這些或者那樣的分佈式假設(Distributional Hypothesis), 及指出了出現在相同上下文的詞具有相同的語意。基於這種假設可以劃分兩種不同的類別:count-based methods e.g. Latent Semantic Analysis), 和 predictive methods (e.g. neural probabilistic language models)

Baroni et al詳細的介紹了這兩種方法的差異性。但是總的來說,Count-based methods compute the statistics of how often some word co-occurs with its neighbor words in a large text corpus, and then map these count-statistics down to a small, dense vector for each word(只可意會不可言傳啊! ^_^)。就學習更小,更稠密詞向量(dense embedding vectors)而言, Predictive models直接從它附近的詞去預測它。

從最原始的文本去學習詞向量,Word2vec是一個特別有效的預測模型(Predictive models)。它具有兩個版本,Continuous Bag-of-Words 模型(CBOW) 和 Skip-Gram 模型。從算法的角度來看,這兩個模型都是相似的。

CBOW模型是給定周圍的上下文預測(surrounding context)一箇中心詞(center word)。比如,給定“The cat sits on the mat”, 我們把[“The” , “cat”, “sits”, “on”, “mat”]爲上下文,而我們需要去預測和生成的中心詞爲”jumped”。

Skip-Gram模型:是給定中心詞預測它周圍的詞,它與CBOW模型剛好是相反的。

對於這兩種模型,對於數據集比較小的情況CBOW性能要比Skip-Gram模型好,但是對於數據集比較大時,其性能要差一些。

Scaling up with Noise-Contrastive Training

給定前面的詞(previous words)的概率h (for “history”) 來預測下一個詞的概率wt (for “target”),爲了最大化預測概率傳統的神經網絡概率語言模型都是使用最大似然(maximum likelihood ML)來進行訓練,以softmax 函數爲例:

f1

其中score(wt,h) 表示單詞wt 與上下文h 的相容性。通過在訓練集求解最大log似然來訓練該模型。比如,最大化

f12

上面等式爲正確標準化的語言模型。然而訓練它,代價非常的大。因爲每個訓練,我對於給定當前的上下文h , 我們需要使用score去計算和標準化在語料庫V 中所有其他的單詞w
這裏寫圖片描述

換句話說,特徵學習對於word2vec模型並不需要一個完全的概率模型。及對於相同的上下文,CBOW 和 skip-gram 模型訓練使用二分類目標函數(binary classification objective)從k 個假想(imaginary/noise)詞w^ 中判別出真實的目標詞wt 。CBOW模型可以使用下圖來描述,對於skip-gram模型只需要簡單的把方向反轉一下。
CBOW

數學表示爲,對於每個詞最大化目標函數爲:
f13

其中,Qθ(D=1|w,h) 表示二分類logistic 迴歸概率(binary logistic regression probability)在數據集D 上,模型已知單詞w 在上下文h 中,需要學習(或者說計算)的是詞向量θ 。在實踐中,我們通過噪音分佈(noise distribution)近似抽取k個constrastive words。

因此,目標變成了最大化真實詞(real words)的概率,最小化噪音詞(noise)的概率。從技術的角度,這稱之爲負採樣(Negative Sampling)。使用這個損失函數有一個很好數學動機:在有限的條件下所提出的更新規則近似的更新了softmax函數。但是計算特別的具有吸引力,因爲現在計算這個損失函數我們僅僅需要規格化我們所選擇的k 個早因此,而不是整個詞彙表V ,這使得訓練它更快。

讓我們更加直觀的看這個模型在實踐中是怎麼工作的。

Skip-gram 模型詳解

考慮數據集

the quick brown fox jumped over the lazy dog

首先,我們形成單詞的數據集和上下文,我們可以使用任何有意義的方式定義”上下文”。事實上,我們都知道語法規則(當前目標詞的語法依賴關係)。因爲,我們可以定義“上下文”(context)爲爲這詞左邊窗口的單詞,而目標詞(target word)作爲右邊的單詞。假設窗口(window size)爲1。對於上面數據集的(context, target)對爲,

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

我們知道skip-gram模型是給定context去預測目標詞。所以這任務就變成了預測‘the’ 和 ‘brown’給定‘quick’,預測‘quick’和’fox’ 給定 ‘brown’,等。因爲數據集的(input, output)對爲

(quick, the), (quick brow), (brown, quick), (brow, fox), …

其中目標函數是定義在整個數據集上,但是我們可以是使用隨機梯度遞減(stochastic gradient descent, SGD)來進行優化, 每一次只使用一個例子。(或者使用batch_size個例子中的minibatch個, 一般情況下, 16batchsize512 )。下面一步一步的講解這個過程是如何工作的。

假設上面第一個訓練例子(quick, the)在第t步下進行訓練, 及預測the給定input。我們選擇numnoise noisy example通過一些noise distribution, 一般使用unigram ditribution(P(w) )。爲了簡單化,假設numnoise=1 和選擇sheep作爲noisy example。那麼在第t 目標函數爲
J(t)NEG=logQθ(D=1|the,quick)+logQθ(D=0|sheep,quick)

及目標是就去更新向量參數θ 使得目標函數最大化。爲了達到這個目的我們可以通過目標函數對向量參數θ 進行求導,及θJNEG ,然後沿着梯度的方向更行向量參數。這個過程一直在訓練集上重複計算,這就使得每個單詞的向量表示進行了更新,直到但這個模型可以成功的從noise words中判斷出real words。

我們可以使用像 t-SNE dimensionality reduction technique將所學習到的詞向量投影到2維空間上。當我們仔細看這個可視化試圖的,這向量捕獲了非常有用的語義信息。在語義的關係上,我們也發現了一些確定的方向在可視化向量空間上。如下圖所示
這裏寫圖片描述

這個例子說明了爲什麼向量表示對於許多的NLP任務是非常的有用,比如說,詞性標註,命名實體識別, etc。

對於CBOW模型來說我們只需要把上面的(context, target)對換一下。其過程還是一樣的

Skip-Gram 模型數學表示

skip-gram
首先,來定義一些數學符號
1. 輸入one-hot向量或者context使用x(i) 表示。
2. 輸出使用y(i) 進行表示。
3. 輸入向量矩陣W1Rn×|V| , n,|V| 分別表示向量的大小和詞彙表的大小
4. wi 表示詞彙表的第i 個單詞
5. ui 表示W(1) 的第i 列,及單詞w(i) 的輸入向量表示
6. W(2)Rn times|V| 表示輸出向量矩陣
7. v(i) 表示W(2) 的第i 行,及單詞w(1) 的輸出向量表示。

則,Skip-Gram可以使用下面六步來表示,
1. 生成one-hot 輸入向量x
2. 獲取輸入向量u(i)=W(1)x
3. 因爲不需要averaging(或者可以理解爲,不需要對輸入數據規格化),因此 h=u(i)
4. 使用v=W(2)h 生成2C個score vectors, v(iC),...,v(i1),v(i+1),...,v(i+C) ,其中C 爲context的大小
5. 將每個score vectors 轉換成概率, y=softmax(x)
6. 應該使得說生成的概率要近似等於真實的概率,及y(iC),...,y(i1),y(i+1),...,y(i+C)

我們的目標是最小化,損失函數啊:
mini J=logP(context|target)

注意與前面區別, 前面少了一個負號,因此是最大損失函數
其給定輸入向量r^ (也就是target),使用softmax的word2vec模型爲
Pr(wordi|r^,w)=exp(wTir^)|V|j=1exp(wTjr^)
其中wj 表示詞彙表裏所有單詞的輸出向量(context)。

方法一:如果使用Cross-Entropy 那麼損失函數爲:

因爲該方法每次都需要對詞彙表中所有的單詞都進行更新,因此訓練速度非常的慢

Jce=logPr(wordi|r^,w)=wTr^+log|V|j=1exp(wTjr^)

爲了是損失函數最小化,可以使用梯度下降的方法來進行計算,及相應的梯度爲:
Jcer^=wi+k=1|V|Pr(wordk|r^,w)wk

Jcewj=r^(j=i)+exp(wTjr^)r^|V|k=1exp(wTkr^)

方法二:使用負採樣方法,損失函數爲:

Jng=logσ(wTir^)Kk=1log(σ(wTkr^))

其中,r^ 表示輸入向量(target), wi 表示輸出向量(context), wk 表示noisy word及K個負樣本。

相應梯度爲:

Jngr^=wi(σ(wTi)1)+Kk=1wk(1σ(wTkr^))

Jnewj=r^(σ(wTir^)1)r^(σ(wTjr^)1)0if j=iif ji,j{1,...,K}

其中 表示element-wise product

這裏寫圖片描述

這裏寫圖片描述

整理翻譯以下內容
1. tensorflow Vector Representations of Words
2. CS224d: Deep Learning for Natural Language Processing

僅作學習交流使用,嚴禁用於商業目的,轉載請說明出處!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章