Word2Vec

word2vec由Tomas Mikolov等人在《Distributed Representations of Words and Phrases and their Compositionality》中提出。word2vec根據語料庫中單詞的「共現關係」求出每一個單詞的embedding。word2vec模型有兩種形式,skip-gram和cbow。skip-gram根據中心詞(target)預測上下文(context),而cbow根據上下文(context)預測中心詞(target)。架構

skip-gram模型

skip-gram模型的架構以下,
skip-gram.jpg
圖片轉自[NLP] 秒懂詞向量Word2vec的本質
模型的目標是最大化下式,
$$\frac{1}{T}\sum_{t=1}^{T}\sum_{-c \leq j \leq c, j \neq 0}\log p(w_{t+j}|w_t)$$
其中,$c$表示context的大小,以下圖,當center word爲"or"時,若是c=1,則context word爲"living"和"get";若是c=2,則context word爲"busy"、"living"、"get"和"busy"。$c$越大,訓練樣本越多,模型的準確度越高,但同時訓練的時間成本也會增長。
context.png
基礎形式的skip-gram使用softmax函數定義$p(w_{t+j}|w_t)$,
$$p(w_O|w_I)=\frac{exp({v^{'}}_{w_O}^\top v_{w_I})}{\sum_{w=1}^{W}exp({v^{'}}_{w}^\top v_{w_I})}$$
然而這種形式的skip-gram不具有可實現性,由於計算$\nabla\log p(w_O|w_I)$的代價是與單詞總數W的大小成正比的,而W的數量級通常是$10^5-10^7$。函數

Hierarchical Softmax

以中國有效減少計算複雜度的方法是,使用Hierarchical Softmax近似full softmaxHierarchical Softmax是由Morin和Bengio在《Hierarchical probabilistic neural network language model》中提出。spa

二叉哈夫曼樹

假設詞彙表中有$W$個不一樣的單詞,單詞$w_i$在語料庫中出現的頻率爲$c_i$,能夠構造出一個有$W$個葉子節點的二叉哈夫曼樹(binary Huffman tree),每個葉子節點對應一個單詞。構造方式以下:3d

  1. 將$\{(w_1, c_1), \cdots,(w_W,c_W)\}$當作$W$棵樹(每棵樹1個結點)組成的森林;
  2. 從森林中選擇根結點權值最小的兩棵樹進行合併,權值大的做爲左孩子結點,權值小的做爲右孩子結點,獲得一棵新樹,新樹的根結點權值爲其左、右子樹根結點權值之和。從森林中刪除被選中的兩棵子樹,保留新樹;
  3. 重複第2步和第3步,直至森林中只剩下一棵樹爲止。

例如,語料庫中只有一句話:「get busy living or get busy dying」。則對應的詞彙表爲,{"get":2, "busy":2, "living":1, "or":1, "dying":1},構成以下圖的二叉哈夫曼樹,
huffman.png
對於每個單詞$w_i$,都存在一條從根節點root到該單詞對應葉子節點的路徑,定義$L(w_i)$爲單詞$w_i$對應的路徑,$n(w_i,j)$爲路徑上的第j的節點,顯然有$n(w_i,1)=root,n(w_i,L(w_i))=w_i$,定義$ch(n)$表示節點$n$的左孩子節點(也能夠定義爲右孩子)。使用hierarchical softmax定義$p(w|w_I)$,
$$p(w|w_I) = \prod_{j=1}^{L(w)-1}\sigma(\mathbb{I}(n(w,j+1)==ch(n(w,j)))\cdot {v^{'}}_{n(w,j)}^\top v_{w_I})$$
其中,$\sigma$爲sigmoid函數$\frac{1}{1+e^{-x}}$,$\mathbb{I}(\cdot)$爲Indicator function。
使用二叉哈夫曼樹的好處是,it assigns short codes to the frequent words which results in fast training。從圖中能夠看出,單詞出現的頻率越高,則對應該單詞的葉子節點越靠近根節點(例如,$L("get")=3,L("living"=4)$)。code

相較於原始形式的skip-gram模型在計算$p(w_O|w_I)$時,須要考慮$W$個輸出節點,使用hierarchical softmax的模型只須要考慮$\log(W)$個內部節點。blog

Negative Sampling

$$p(w_O|w_I)=\log\sigma({v^{'}}_{w_O}^\top v_{w_I})+\sum_{i=1}^k \mathbb{E}_{w_i\sim P_n(w)}[\log \sigma(-{v^{'}}_{w_i}^\top v_{w_I})]$$
相較於原始的skip-gram模型須要考慮全部的類別($w_1,\cdots,w_W$),使用negative sampling的模型只是預測整體類別的一個子集w_isim P_n(w)。圖片

注意到,對於使用Hierarchical softmax的skip-gram模型,每個單詞$w$只有一個對應的表示$v_w$,此外二叉哈夫曼樹中的每一個內部節點$n$,也對應一個相應的表示$v_n$;而對於使用negtive sampling的skip-gram模型,每個單詞$w$對應着兩個向量表示,$v_w$和${v^{'}}_w$,其中$v_w$爲target embedding,對應單詞$w$爲target的狀況,${v^{'}}_w$context embedding,對應單詞$w$爲context的狀況。ip

cbow模型

cbow模型的架構以下,
cbow.jpg
圖片轉自[NLP] 秒懂詞向量Word2vec的本質
cbow在輸入層,根據context words獲得context embedding,而後對全部的輸入embedding進行加和獲得$h_i$,最後使用$h_i$來預測target word。實現方法與skop-gram模型相似。get

參考

  1. Distributed Representations of Words and Phrases and their Compositionality,https://arxiv.org/abs/1310.4546
  2. https://zhuanlan.zhihu.com/p/...
相關文章
相關標籤/搜索