1.Word2Vec 模型總述
Word2Vec簡單講其實就是透過學習文字然後用詞向量的方式表徵詞的語義資訊,即透過Embedding 把原先詞所在空間對映到一個新的空間中去,使得語義上相似的單詞在該空間內距離相近。
以傳統神經網路為基礎的神經機率語言模型,缺點主要是計算量太大,集中體現在:隱層和輸出層之間的矩陣運算和輸出層上的Softmax歸一化運算上。
因此就是針對這兩點來最佳化神經機率語言模型的。中兩個重要的模型是 CBOW 模型和 Skip-gram 模型。對於這兩個模型,給出了兩套框架,分別是基於Hierarchichal Softmax 和 Negative Sampling 來設計的,本文梳理的是第一種型別。
2.CBOW模型
2.1 基於Hierarchichal Softmax模型的網路結構
CBOW模型的全稱是 Continous bag-of-words,它包括三層結構分別是:輸入層、投影層和輸出層。
1.輸入層:包含 Context(w) 中 2c 個詞的詞向量
其中 ,n 表示詞向量的長度。
2.投影層:將輸入層的 2c 個向量做求和累加處理,即
3.輸出層:輸出層對應一顆 樹,它是以語料中出現過的詞當葉子節點,以各詞在語料庫中出現的次數當權值構造而成。在這顆 樹中,葉子結點共N(=|D|) 個分別對應詞典 D 中的詞,非葉結點 N-1 個(上圖中黃色的結點)。
2.2 梯度的計算
為了後續方便描述問題,首先對模型中用到的符號做一個統一的說明:
:從根節點到出發到達對應葉子結點的路徑;
:從根節點到出發到達對應葉子結點的路徑;
:路徑中的個結點,其中表示根結點,表示詞對應的結點;
,其中 :詞對應的編碼,它由 位編碼構成,表示路徑中第個結點對應的編碼(根結點不對應編碼);
,其中:路徑中非葉子結點對應的向量,表示路徑中第個非葉子結點對應的向量。
所以的思想,即對於詞典 中的任意詞 , 樹中必然存在唯一一條從根結點到詞對應葉子結點的路徑。路徑上存在個分支,將每個分支看作一次二分類,那麼每一次分類就對應一個機率,最後將這些機率連乘得到 。
其中 ,透過對數極大似然化處理可得模型的目標函式為:
極大化化目標函式使用的演算法是是隨機梯度上升法,首先考慮關於的梯度計算:
於是,的更新公式為:然後再考慮關於的梯度計算:
如果觀察到中和具有對稱性,那麼計算相應梯度會更方便。由於表示的是中所有詞向量的疊加,那麼如何根據來更新每一個分量呢? 中的做法非常的樸素,直接取
2.3 CBOW模型更新相關引數虛擬碼
3.Skip-gram模型
3.1 基於Hierarchichal Softmax模型的網路結構
同模型一樣,模型的網路結構也包括三層結構分別是輸入層、投影層和輸出層:
輸入層:只含有當前樣本的中心詞的詞向量 。
投影層:該層為恆等投影,其實這層可有可無,在這裡只是為了方便和模型的網路結構做對比:
3.輸出層:和模型一樣,輸出層也是一顆樹。
3.2 梯度的計算
對於模型已知的是當前詞 ,需要對其上下文 中的詞進行預測,所以關鍵是條件機率函式的構造,模型中將其定義為:
上式中的可以類比上節介紹的的思想,因此可得:
透過對數極大似然化處理可得模型的目標函式為:
首先考慮 關於 的梯度計算: 於是, 的更新公式為:3.3 skip-gram模型更新相關引數虛擬碼
4. 總結
Word2Vec的基本功能就是把自然語言中的每一個詞,表示成一個統一意義統一維度的詞向量,因為只有把自然語言轉化為向量的形式,才能在此之上構建相關的演算法,至於向量中的每個維度具體是什麼含義,無人知曉,也無需知曉,有道是,玄之又玄,眾妙之門矣!
如果你覺得有幫助的話,歡迎點個贊,比心❤️!