一、word2vec
在自然語言處理中,詞向量是一種常見的詞分佈式表示。詞表中的每個單詞均由一個維度固定的連續向量表示。word2vec是2013年Google公佈的訓練詞向量的工具,其包含了兩個模型,分別是:CBOW和SkipGram。這裏僅簡單介紹SkipGram模型,更加詳細的原理介紹見文章【自然語言處理】【Word2Vec(二)】超詳細的原理推導(包含負採樣和層次softmax)。
1. SkipGram模型結構
如果詞表爲V,那麼SkipGram就是某個單詞的one-hot編碼,其是一個維度爲|V|的向量。其結構如圖所示
該模型可以看做是不帶激活函數的雙層全連接神經網絡。更正式的來說,輸入向量,輸入層權重爲,輸出層權重爲。其前向傳播過程中,輸入層到隱藏層爲
隱藏層到輸出層爲
使用softmax層轉換爲概率分佈
2. SkipGram主要思想
SkipGram的主要思想是使用輸入詞來預測上下文。舉例來說,給定一個句子"Named entity recognition plays an important role"。那麼在一次訓練中輸入爲單詞"recognition",需要預測的是其上下文單詞"Named"、“entity”、“plays”、“an”。SkipGram的最終目標是獲得輸入層到隱藏層的權重矩陣,其大小爲。由於是由V個N維向量組成,每個向量就對應詞表中的一個詞。所以就是詞表V中單詞的詞向量集合。
3. SkipGram訓練過程
上面說“使用輸入詞來預測上下文”,但是模型結構決定其不能同時預測多個上下文。因此在實際的訓練過程當中,依次使用輸入詞預測上下文單詞。例如,使用“recogniton”預測“Named”,然後使用“recogniton”預測“entity”,再使用“recogniton”預測“plays”,最後使用“recogniton”預測“an”。常見的SkipGram的結構圖如下圖,但其實該圖是SkipGram結構圖和訓練過程的結合。
4. 層次Softmax
通常來說,詞表的大小|V|會十分的巨大,在計算softmax時需要進行冪運算,因此計算量十分巨大。層次softmax就是爲了解決這個問題,將原始的時間複雜度降低至。
原始softmax可以將輸入轉換爲概率分佈,而層次softmax則是將|V|個單詞的概率值分配到二叉樹的葉節點上。其結構如下圖
詞表中的|V|個單詞,分別是。該樹中的每個非葉節點都對應一個線性二分類器(也就是邏輯迴歸LR),也就是說每個葉節點都有一個需要進行學習的參數。那麼,這個樹是如何替代原始softmax來表示某個詞的概率呢?由於每個非葉節點的分類器都會輸出一個概率值,某個詞的概率就是由根節點到對應詞路徑上的所有概率乘積來表示的。舉例來說,前向傳播過程中預測單詞的概率,則是由節點預測爲左的概率乘以節點預測爲左的概率,再乘以節點預測爲右是概率來決定的,即爲目標輸出詞的概率爲
之後只要使用最大似然估計來更新所有參數即可。這裏再做幾點說明
- 原始softmax的時間複雜度爲O(|V|),而層次softmax每次前向傳播時僅僅需要計算樹的高度log|V|個值。因此,其時間複雜度爲log|V|.
- 爲了使頻繁出現的單詞,儘量少的更新,從而進一步降低時間複雜度。可以統計各個詞出現的頻數,然後構造Huffman樹,使得從根節點到點頻繁出現單詞的路徑儘量短。
- 在Huffman樹中,|V|個單詞有|V|-1個非葉節點,那麼也就會導致模型多出來|V|-1個參數需要更新。
二、DeepWalk
DeepWalk是一種圖嵌入方法,其可以將圖中的頂點轉換爲固定維度的向量,這個向量可以捕獲到該頂點的結構信息,並用於後續的頂點分類、聚類等問題。
1. 使用隨機遊走(Random Walk)獲取訓練數據
圖,其中是頂點集合,是邊的集合。隨機遊走:從圖中隨機選擇一個頂點作爲開始,之後再從該頂點的鄰居節點隨機的選擇一個作爲下一個節點,依次類推可以得到一個以該節點爲起始的頂點序列。那麼將這些頂點序列看做是一種語料,其包含了該頂點的結構信息。
2. 使用SkipGram學習圖中頂點的表示
將通過隨機遊走獲得的頂點序列看做是自然語言中的語料,並使用SKipGram對其進行序列就能得到圖中頂點的向量表示。
3.並行
由隨機遊走產生的頂點序列具有長尾效應。因此,當使用SkipGram訓練,模型反向傳播時更新會比較稀疏(即某些頂點的出現頻率不會過於集中)。所以,使用異步SGD也是可以的。而且,實驗也證明異步SGD對最終的效果沒有顯著的影響。