Word2Vec and Glove

1. Word2Vec

1.Skip-Gram 跳字模型:假設背景詞由中心詞生成,即建模P(Wo|Wc) ,其中Wc爲中心詞, Wo爲任一背景詞
在這裏插入圖片描述
2.CBOW:假設中心詞由背景詞生成,即建模P(Wc|Wo),其中 爲背景詞的集合。

在這裏插入圖片描述
補充:這裏注意一下nn.Embedding 的輸出[seq_len,batch_size,embedding_size],不要把embedding和詞向量搞混了。Embedding只是隨機初始化向量,沒有意義的。

1.1如何處理高頻詞?eg:the,a,in

使用二次採樣:每一個詞都有一個丟棄概率。

P(wi)=max(1tf(wi),0) P(w_i)=\max(1-\sqrt{\frac{t}{f(w_i)}},0)

# 返回 true or flase
def discard(idx):
    return np.random.uniform(0, 1) < 1 - math.sqrt(
        1e-4 / counter[idx_to_token[idx]] * num_tokens)

1.2 提取中心詞和背景詞

原來這裏就是每一個單詞都有可能是中心詞,然後根據中心詞的前後max_window_size組成一個list.
每一個dataset就是:[{word - max_wimdow_size,word + max_window_size}]

補充:矩陣批量乘法torch.bmm(X,Y) ,理解就是對應矩陣作矩陣乘法。

然後算法作前向計算,就是矩陣乘法。跟神經網絡的原理一樣。

問題來了:每一個詞都是center_word,那不是一句話就可以生成超級無敵多dataset??
所以就要採用負採樣近似來進行採樣:

P(wowc)=exp(uovc)iVexp(uivc)P(w_o\mid w_c)=\frac{\exp(\boldsymbol{u}_o^\top \boldsymbol{v}_c)}{\sum_{i\in\mathcal{V}}\exp(\boldsymbol{u}_i^\top \boldsymbol{v}_c)}

P(wowc)=P(D=1wc,wo)k=1,wkP(w)KP(D=0wc,wk) P(w_o\mid w_c)=P(D=1\mid w_c,w_o)\prod_{k=1,w_k\sim P(w)}^K P(D=0\mid w_c,w_k)

其中 P(D=1wc,wo)=σ(uovc)P(D=1\mid w_c,w_o)=\sigma(\boldsymbol{u}_o^\top\boldsymbol{v}_c)σ()\sigma(\cdot) 爲 sigmoid 函數。對於一對中心詞和背景詞,我們從詞典中隨機採樣 KK 個噪聲詞(實驗中設 K=5K=5)。根據 Word2Vec 論文的建議,噪聲詞采樣概率 P(w)P(w) 設爲 ww 詞頻與總詞頻之比的 0.750.75 次方。

具體實現還沒完全弄懂。。先留個坑。此外減少運算量還可以層序softmax方法

1.3 損失函數

t=1Tmjm,j0[logP(D=1w(t),w(t+j))k=1,wkP(w)KlogP(D=0w(t),wk)] \sum_{t=1}^T\sum_{-m\le j\le m,j\ne 0} [-\log P(D=1\mid w^{(t)},w^{(t+j)})-\sum_{k=1,w_k\sim P(w)^K}\log P(D=0\mid w^{(t)},w_k)]

理解:感覺應該是每一個詞,然後通過計算他的背景詞,背景向量,找到相似性。這相當於自動給了label?
因爲隱含層的矩陣大小就是(詞數,embed_size這個是超參數)記起來上課講過應該就是這樣 肯定是的,需要的是向量。輸入詞(背景),輸出背景(詞)。最後softmax。

2.GloVe 全局向量的詞嵌入

在Skip-Gram模型上做改變:

  1. 使用非概率分佈的變量 pij=xijp'_{ij}=x_{ij}qij=exp(ujvi)q′_{ij}=\exp(\boldsymbol{u}^\top_j\boldsymbol{v}_i),並對它們取對數;
  2. 爲每個詞 wiw_i 增加兩個標量模型參數:中心詞偏差項 bib_i 和背景詞偏差項 cic_i,鬆弛了概率定義中的規範性;
  3. 將每個損失項的權重 xix_i 替換成函數 h(xij)h(x_{ij}),權重函數 h(x)h(x) 是值域在 [0,1][0,1] 上的單調遞增函數,鬆弛了中心詞重要性與 xix_i 線性相關的隱含假設;
  4. 用平方損失函數替代了交叉熵損失函數。

綜上,我們獲得了 GloVe 模型的損失函數表達式:

iVjVh(xij)(ujvi+bi+cjlogxij)2 \sum_{i\in\mathcal{V}}\sum_{j\in\mathcal{V}} h(x_{ij}) (\boldsymbol{u}^\top_j\boldsymbol{v}_i+b_i+c_j-\log x_{ij})^2

從而增加了數據集的全局統計信息。

2.1 近義詞和類比詞

觀測概率公式,中心詞的向量很大程度取決於背景詞向量來決定,從而聯想到同義詞。

類比詞,知道a,b,c 求d?
同樣也把abc的向量算出來,等到與結果相似的詞向量

x = vecs[1] - vecs[0] + vecs[2] # 順序可以交換

關於glove的使用:已經由於訓練好的,官方給出的API.

https://nlp.stanford.edu/projects/glove/
下載:glove.6B.zip glove.6B.zip

6B就是60個,xxd 就是維數

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