NLP基礎之詞向量(Word2Vector)

NLP基礎之詞向量(Word2Vector)

0. 前言

與圖像或相比,語言是一種經過人類智力處理後的、更爲抽象的數據對象,因此nlp相比cv相比有許多獨特之處,研究起來也比較複雜,其中詞的表徵方式就是一個重要方面。

1. one-hot向量

詞(Word)最簡單粗暴的一種表徵方式(representation)就是one-hot vector。記VV爲詞庫,V|V|爲詞庫大小,則每個詞可以表徵爲一個RV×1R^{|V|\times 1}的向量,其中第kk維爲1,其他維爲0 ,kk是該詞在詞庫中的位置。這種方式的缺點在於:

  • 維數可能會很大,詞向量會很稀疏
  • 無法衡量詞與詞之間的相似性(任何兩個詞之間的內積或者餘弦相似度都爲0)
    因此,我們自然而然地想能否將詞向量的空間RVR|V|降維成一個子空間,並且這個子空間可以表徵出詞與詞之間的關係。

2. SVD分解

先遍歷一個大的文檔集,統計每兩個詞是否配對出現。例如,設文檔集裏面的句子爲如下:

  1. I enjoy flying.
  2. I like NLP.
  3. I like deep learning.
    則可以都得到這樣的共現矩陣(Co-occurrence Matrix):
    在這裏插入圖片描述

XX進行SVD分解:
X=UΣVT(2,1) X=U\Sigma V^T\tag{2,1}
假設選取前kk個奇異值對應主要成分,則應該選擇U1:V,1:kU_{1:|V|,1:k}作爲降維後的詞嵌入矩陣,這樣就得到了詞庫中每個詞的kk維表徵。
這種方法的缺點是:

  • 隨着新詞的引入,共現矩陣的大小會經常變化
  • 共現矩陣很高維,而且很稀疏
  • SVD分解需要很大的時間開銷(約O(n3)O(n^3)
  • SVD的可解釋性較差

3. Word2Vec

前面提到的方法需要存儲和計算整個語料庫的所有信息,而Word2Vec通過上下文來預測詞的概率,用迭代學習參數的方法,可以降低複雜度。它包含兩種算法:continuous baf-of-words(CBOW)和skip-gram,兩種訓練方法:負採樣和層級softmax。

3.1. 語言模型——n-gram

P(ω1,ω2,,ωn)P(\omega_1, \omega_2, \cdots, \omega_n)表示一個具有n個詞的序列(句子)的概率。Unigram模型假設每個詞之間都是相互獨立的,也即
P(ω1,ω2,,ωn)=i=1nP(ωi)(3-1) P(\omega_1, \omega_2, \cdots, \omega_n)=\prod_{i=1}^nP(\omega_i)\tag{3-1}
Bigram模型假設每個詞只與它前面的詞有關:
P(ω1,ω2,,ωn)=i=1nP(ωiωi1)(3-2) P(\omega_1, \omega_2, \cdots, \omega_n)=\prod_{i=1}^nP(\omega_i|\omega_{i-1})\tag{3-2}
類似地可以得到n-gram的表達式。一般用CBOW或者Skip-gram方法來學習出一個句子的概率。
簡而言之,CBOW的目的是通過上下文來預測中心詞,而Skip-gram是通過中心詞來預測上下文的分佈。它們的作用都是將one-hot表示的詞“嵌入”到一個低維空間中,這個方法也叫“詞嵌入”(Word Embedding)

3.2. Continuous Bag of Words Model(CBOW)

先考慮bigram的情形,也即利用一個詞預測下一個詞。此時,輸入詞是語境詞(context word)wIw_I,輸出詞是目標詞wOw_O
記輸入詞的one-hot向量爲x,xk=1,xk=0for kkx,x_k=1,x_{k'}=0\, for\ k'\neq k,輸出詞的one-hot向量爲yy。它們的維度都是V|V|,非常大。我們希望將每個詞的one-hot向量映射到一個較低的維度NN上(同時還能較好地表達詞的含義以及詞與詞之間的關係)。爲此,我們在輸入詞和輸出詞之間增加一個NN個節點的隱藏層,輸入層到隱藏層的權重矩陣記爲WV×NW_{V\times N},稱之爲輸入層矩陣,隱藏層到輸出層的權重矩陣記爲WN×VW'_{N\times V},稱之爲輸出詞矩陣。我們就是希望通過一系列訓練數據和上述模型結構學習到輸入詞矩陣和輸出詞矩陣。
一般我們用的詞向量是輸入層矩陣,輸出層矩陣代表了上下文詞與目標詞之間的關係。最開始的時候並不是這麼做,最開始爲了降低輸出端反向傳播的計算複雜度,用的是hierarchical softmax,輸出端是二叉樹結構,輸出端參數是二叉樹中每個節點的向量,輸出向量是和二叉樹的節點一一對應的,跟word根本對應不上來,這種情況你只能利用輸入端的詞向量。
bigram的CBOW模型可以表示爲如下的一個兩層神經網絡結構:

在這裏插入圖片描述

輸入層到隱藏層的矩陣運算爲:
h=WTx=W(k,:)T:=vwI(3-3) h=W^Tx=W^T_{(k,:)}:=v_{w_I}\tag{3-3}
WW的每一行vwv_{w}代表了某個詞的輸入詞向量(第i行代表第i個詞的輸入詞向量),輸入層h其實就是把WW的第kk層複製過來了,它代表了輸入詞wIw_I輸入詞向量。這個地方隱含了輸入詞的激活函數是線性的且不對該層的輸入做任何改變。
隱藏層到輸出層可以表示爲:
U=WTh(3-4) U=W'^Th\tag{3-4}
其中UU的每一行uj=vwjThu_j=v'^T_{w_j}hvwjTv'^T_{w_j}代表了輸出詞矩陣WW'的第jj列。再對ZZ進行一個softmax變換,就可以將其每一維都映射到[0,1][0,1]之間,用來代表輸出層某一維不爲零的概率,這樣就可以與輸出詞的真實one-hot向量進行比較(計算loss function)。輸出層第jj個單元的值可以表示爲:
p(wjwI)=yj=exp(uj)i=1Vexp(ui)=exp(vwjTvwI)i=1Vexp(vwjTvwI)(3-5) \begin{aligned} p(w_j|w_I)=y_j&=\frac{exp(u_j)}{\sum_{i=1}^{|V|}exp(u_i)}\\ &=\frac{exp(v'^T_{w_j}v_{w_I})}{\sum_{i=1}^{|V|}exp(v'^T_{w_j}v_{w_I})}\tag{3-5} \end{aligned}
上式代表的是輸出詞(目標詞)wOw_Ojj維不爲零的概率。假設實際的目標詞wOw_O的第jj^*維不爲零(爲1),則該神經網絡的優化目標爲最大化如下式子:
max p(wOwI)=max yj=max logyj=max (ujlogi=1Vexp(ui))(3-6) \begin{aligned} max\ p(w_O|w_I)&=max\ y_{j^*}\\ &=max\ logy_{j^*}\\ &=max\ \left(u_{j_*}-log\sum_{i=1}^{|V|}exp(u_i)\right)\\ \tag{3-6} \end{aligned}

當利用多個輸入詞來預測一個目標詞時,架構與上面類似,區別在於隱藏層的計算方式是全蟲矩陣乘以輸入詞的one-hot向量的平均值:
h=1CWT(x1+x2++xC)(3-7) h=\frac{1}{C}W^T(x_1+x_2+\cdots+x_C)\tag{3-7}
在這裏插入圖片描述

3.3. Skip-Gram Model

skip-gram模型是CBOW模型的反向過程:利用一個詞來預測它的上下文。記輸入詞爲xx,隱藏層爲hh,輸入層到隱藏層的權重矩陣爲WW,輸入層到隱藏層可以表示爲:
h=WTx=W(k,:)T:=vwI(3-8) h=W^Tx=W^T_{(k,:)}:=v_{w_I}\tag{3-8}
其中vwIv_{w_I}表示代表了輸入詞wIw_I輸入詞向量。假設上下文的詞的個數爲C,與CBOW不同的地方在於,隱藏層映射到輸出層時,輸出層有C組size爲V|V|的向量,對應每個上下文詞的預測輸出。
Uc=WTh(3-9) U_c=W'^Th\tag{3-9}

假設第cc個上下文詞的實際值是wO,cw_{O,c},則輸出層第cc個預測詞等於實際詞的概率爲:
p(wc,j=wO,cwI)=yc,j=exp(uc,j)i=1Vexp(ui)=exp(vwjTvwI)i=1Vexp(vwjTvwI)(3-10) \begin{aligned} p(w_{c,j}=w_{O,c}|w_I)&=y_{c,j}&\\ &=\frac{exp(u_{c,j})}{\sum_{i=1}^{|V|}exp(u_i)}\\ &=\frac{exp(v'^T_{w_j}v_{w_I})}{\sum_{i=1}^{|V|}exp(v'^T_{w_j}v_{w_I})}\\ \tag{3-10} \end{aligned}
loss function可以表示爲:
Loss=log p(wO,1,p(wO,2,,p(wO,CwI)=logexp(uc,jc)i=1Vexp(ui)=c=1Cujc+Clogi=1Vexp(ui)(3-11) \begin{aligned} Loss&=-log\ p(w_{O,1},p(w_{O,2},\cdots,p(w_{O,C}|w_I)\\ &=-log\prod\frac{exp(u_{c,j_c^*})}{\sum_{i=1}^{|V|}exp(u_i)}\\ &=-\sum_{c=1}^Cu_{j_c^*}+C\cdot log\sum_{i=1}^{|V|}exp(u_i)\\ \tag{3-11} \end{aligned}
在這裏插入圖片描述

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