日萌社
人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度學習實戰(不定時更新)
7.3 詞向量-word2vec
學習目標
- 目標
- 知道統計語言模型
- 掌握神經網絡語言模型NNLM原理
- 掌握wor2vec的實現方式以及優化特點
- 應用
- 無
7.3.1 Word2Vec模型介紹
7.3.1.1 爲什麼學習詞嵌入
圖像和音頻處理系統採用的是龐大的高維度數據集,對於圖像數據來說,此類數據集會編碼爲單個原始像素強度的向量。不過,自然語言處理系統一直以來都將字詞視爲離散的原子符號,將字詞表示爲唯一的離散 ID 還會導致數據稀疏性,並且通常意味着我們可能需要更多數據才能成功訓練統計模型。使用向量表示法可以掃除其中一些障礙。
-
計算相似度
-
- 尋找相似詞
- 信息檢索
-
作爲 SVM/LSTM 等模型的輸入
-
- 中文分詞
- 命名體識別
-
句子表示
-
- 情感分析
-
文檔表示
-
- 文檔主題判別
-
機器翻譯與聊天機器人
7.3.1.2 詞向量是什麼
定義:將文字通過一串數字向量表示
- 詞的獨熱表示:One-hot Representation
- 採用稀疏方式 存儲,簡單易實現
- 燈泡:[0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0]、燈管:[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0]
維度過大詞彙鴻溝現象:任意兩個詞之間都是孤立的。光從這兩個向量中看不出兩個詞是否有關係,哪怕”燈泡”和”燈管”這兩個詞是同義詞也不行
- 詞的分佈式表示:Distributed representation
- 傳統的獨熱表示( one-hot representation)僅僅將詞符號化,不包含任何語義信息
- Distributed representation 最早由 Hinton在 1986 年提出。它是一種低維實數向量,這種向量一般長成這個樣子: [0.792, −0.177, −0.107, 0.109, −0.542, …]
- 最大的貢獻就是讓相關或者相似的詞,在距離上更接近了
7.3.1.3 詞向量訓練來源思想-統計語言模型
統計語言模型
- 統計語言模型: 統計語言模型把語言(詞的序列)看作一個隨機事件,並賦予相應的概率來描述其屬於某種語言集合的可能性
注:語言模型就是用來計算一個句子的概率的模型,也就是判斷一句話是否是人話的概率?
例如:一個句子由w1,w2,w3,w4,w5,…….這些詞組,使得P(w1,w2,w3,w4,w5……)概率大(可以從訓練語料中得出)
- N-Gram:N元模型就是假設當前詞的出現概率只與它前面的N-1個詞有關
- 語言是一種序列,詞與詞之間並不是相互獨立
- 一元模型(unigram model):假設某個出現的概率與前面所有詞無關
- P(s) = P(w1)P(w2)P(w3)…P(w4)
- 二元模型(bigram model):假設某個出現的概率與前面一個詞相關
- P(s) = P(w1)P(w2|w1)P(w3|w2)…P(w_i|w_i-1)
- 三元模型(trigram model):假設某個出現的概率與前面兩個詞相關
- P(s) = P(w1)P(w2|w1)P(w3|w1,w2)…P(w_i|w_i-2,w_i-1)
注:目前使用較多的是三元模型,由於訓練語料限制,無法追求更大的N,並且N越大導致計算量越來越大
- 求解:
- 根據條件概率公式與大數定律,當語料的規模足夠大時,有
統計語言模型案例
這個例子來自大一點的語料庫,爲了計算對應的二元模型的參數。即P(wi | wi-1),我們要先計數即c(wi-1,wi),然後計數c(wi-1),再用除法可得到這些條件概率。
共現次數:
統計語言模型缺點
N-gram語言模型還存在OOV問題(Out Of Vocabulary),也就是序列中出現了詞表外詞(也叫做未登錄詞),或者說在測試集和驗證集上出現了訓練集中沒有過的詞。它採用一般的解決辦法:
- 設置一個詞頻閾值,只有高於該閾值的詞纔會加入詞表。
- 所有低於閾值的詞替換爲 UNK(一個特殊符號)。
統計語言模型這樣的思想可以用來做很多事情。
7.3.1.4 神經網絡語言模型NNLMNNLM
神經網絡語言模型NNLM依然是一個概率語言模型,它通過神經網絡來計算概率語言模型中每個參數。
- 2003年,Bengio等人發表的《A Neural Probabilistic Language Model》論文就提出了這個模型。
模型解釋:
- 輸入層:將context(w)每個詞映射成一個長度爲m的詞向量(長度訓練者指定),詞向量在開始是隨機的,也參與網絡訓練
- 使用隨機初始化的方法建立一個|m|×N個詞大小的查找表(lookup table)
- context(w):可以稱之爲上下文窗口長度,類似N-gram取多少個詞作爲添加
- 投影層:將所有的上下文此項來給你拼接成一個長向量,作爲目標w的特徵向量。長度爲m(n-1)
- 隱藏層:拼接後的向量會經過一個規模爲h的隱藏層,論文中使用tanh
-
- 輸出層:最後輸出會通過softmax輸出所有詞個數大小比如N的大小概率分佈
- 訓練過程:
- 訓練時,使用交叉熵作爲損失函數,反向傳播算法進行訓練
- 當訓練完成時,就得到了 N-gram 神經語言模型,以及副產品詞向量
- 初始化的矩陣查找表是和神經網絡的參數同時訓練更新
神經網絡語言模型例子
- 語料庫:
- "訓練 神經網絡 語言 模型 需要 反向 傳播 算法"
- 假設只有這樣一句語料庫,設定上下文窗口爲c=3,總不同次數N=8,會分割成如下組合
- "訓練 神經網絡 語言 模型”
- "神經網絡 語言 模型 需要"
- "語言 模型 需要 反向 傳播"
- "模型 需要 反向 傳播 算法"
下面這個例子,我們自定義初始化向量爲3,會得到一個|3|×8個詞大小的查找表(lookup table):
7.3.1.4 Word2Vec
word2Vec 本質上也是一個神經語言模型,但是它的目標並不是語言模型本身,而是詞向量;因此,其所作的一系列優化,都是爲了更快更好的得到詞向量
在這裏我們講一種模型,就是CBOW也是python gensim庫以及google Tensorflow word2vec使用的模型。
舉例:CBOW前向計算與向量(參數)更新推導
CBOW與2003年Bengio的結構有些不同,不同點在於CBOW去掉了最耗時的非線性隱層、並且所有詞共享隱層。該推導公式不包含下面的分層softmax與負採樣優化過程!!!
整個過程就是一個符合函數的求導鏈式法則過程,所以常見函數的導數要記清楚有利於複雜公式求導;
7.3.1.5 拓展- Word2vec 的訓練trick(優化)
Skip-Gram模型和CBOW模型計算softmax的時候都需要整個詞表 V,但實際當中,詞語的個數非常非常多,會給計算造成很大困難效率低,所以需要用技巧來加速訓練。
-
hierarchical softmax:分層softmax
-
- 本質是把 N 分類問題變成 log(N)次二分類,從O(N)時間複雜度編程O(log(N))
-
negative sampling
-
- 本質是預測總體類別的一個子集
其它:Skip與CBOW模型的推導過程,以及word2vec分層softmax的推導原理,word2vec負採樣參數更新公式推導。
我們可以可視化學到的向量,方法是使用(t-SNE降維)等技術將它們投射到二維空間。在檢查這些可視化效果時,這些向量很明顯捕獲了一些關於字詞及其相互關係的一般語義信息,而且這些語義信息實際上非常有用。第一次發現誘導向量空間中的某些方向專門表示了字詞之間特定的語義關係,例如男性-女性、動詞時態,甚至國家/地區-首都關係。https://distill.pub/2016/misread-tsne/
7.3.2 Word2vec 詞向量工具使用
- 可以使用python 的gensim庫進行詞向量訓練
- 使用google word2vec工具。地址: models/tutorials/embedding/word2vec.py
- Pyspark ml中的Word2Vec訓練詞向量
7.3.3 總結
- 掌握神經網絡語言模型NNLM原理
- 掌握wor2vec的實現方式以及優化特點