詞向量及語言模型
一、詞向量
詞向量(word embedding):詞的向量表徵。
很多初識機器學習、深度學習等的同學,包括我,一定對詞向量比較迷惑,為什麼說前者之前都要提到詞向量?答案:為了將輸入資料表示成向量,在向量上進行數學建模。這樣把詞表示為計算機適合處理的方式。
詞向量表示方法:
1)one-hot vector:將所有單詞排序,排序之後每個單詞就會有一個位置,然後用一個與單詞數量等長的陣列表示某單詞,該單詞所在的位置陣列值就為1,而其他所有位置值都為0。
例如:
“話筒”表示為 [0 0 0 1 0 0 0 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 海中的一個 1。但是2)Distributed representation
其是一種既能表示詞本身又可以考慮語義距離的詞向量表示方法。
該方法最早由 Hinton在 1986 年提出。它是一種低維實數向量,這種向量一般長成這個樣子:[0.792, −0.177, −0.107, 0.109, −0.542, …]。將 word對映到一個新的空間中,並以多維的連續實數向量進行表示叫做“Word Represention” 或 “ Word Embedding”。
採用低維空間表示法,不但解決了維數災難問題,並且挖掘了word之間的關聯屬性,從而提高了向量語義上的準確度。二、語言模型
早期的自然語言處理採用硬編碼的規則來實現。在上世紀80年代,機器學習被應用於自然語言處理中,統計語言模型被提出來,並廣泛應用於機器學習模型中。我們這裡的語言模型就是指統計語言模型。我們認識一下什麼是一個好的模型?對某個我們認為正確的句子,比如『狗啃骨頭』,一個好的模型將能給出很高的概率。而對於不合理的句子,比如『骨頭啃狗』它將給出很低的概率。這裡面的一個重要的概念就是句子的概率。統計語言模型,簡單而言,就是計算某一個句子的概率:P(w1, w2, w3, …)。其中w表示句子中的單詞。
1、N-gram neural model。
根據前n個詞來預測下一個詞。這樣我們就得到了Unigram Model,Bigram Model, Trigram Model或者N-gram Model。
但是,直接使用N-gram模型來計算句子概率是有問題的。因為它太簡單了,最多能表示單詞和前n個單詞的關係,前n+1個單詞就無法表示。而且n不能太大,太大會導致計算問題,並且n太大通常效能不會有明顯的提升。詳細分析參考:模型詳細分析。模型如下圖所示:
2、詞向量模型
1) LSA矩陣分解模型
採用線性代數中的奇異值分解方法,選取前幾個比較大的奇異值所對應的特徵向量將原矩陣對映到低維空間中,從而達到詞向量的目的。
2)PLSA 潛在語義分析概率模型
從概率學的角度重新審視了矩陣分解模型,並得到一個從統計,概率角度上推匯出來的和LSA相當的詞向量模型。
3) LDA 文件生成模型
按照文件生成的過程,使用貝葉斯估計統計學方法,將文件用多個主題來表示。LDA不只解決了同義詞的問題,還解決了一詞多義的問題。目前訓練LDA模型的方法有原始論文中的基於EM和 差分貝葉斯方法以及後來出現的Gibbs Samplings 取樣演算法。
4)Word2Vector 模型
其通過神經網路機器學習演算法來訓練N-gram 語言模型,並在訓練過程中求出word所對應的vector的方法。
3、word2vec演算法
詞向量模型中主要要介紹的是word2vec演算法。可以理解為word2vec就是將詞表徵為實數值向量的一種高效的演算法模型,其利用深度學習的思想,可以通過訓練,把對文字內容的處理簡化為 K 維向量空間中的向量運算,而向量空間上的相似度可以用來表示文字語義上的相似。其使用 Distributed representation 的詞向量表示方式。
基本思想:通過訓練將每個詞對映成 K 維實數向量(K 一般為模型中的超引數),通過詞之間的距離(比如 cosine 相似度、歐氏距離等)來判斷它們之間的語義相似度.其採用一個 三層的神經網路 ,輸入層-隱層-輸出層。有個核心的技術是 根據詞頻用Huffman編碼 ,使得所有詞頻相似的詞隱藏層啟用的內容基本一致,出現頻率越高的詞語,他們啟用的隱藏層數目越少,這樣有效的降低了計算的複雜度。
word2vec演算法,在不斷髮展沉澱之後,得到兩個機器學習模型:Skip Gram Model和CBOW(Continuous Bag of Words)。
3-1)Continuous Bag-of-Words model(CBOW)
CBOW模型通過一個詞的上下文(各N個詞)預測當前詞。具體來說,不考慮上下文的詞語輸入順序,CBOW是用上下文詞語的詞向量的均值來預測當前詞。CBOW的好處是對上下文詞語的分佈在詞向量上進行了平滑,去掉了噪聲,因此在小資料集上很有效。
演算法步驟:
- 隨機生成一個大小為(vocabulary_size, embedding_size)的embedding矩陣(即所有單詞的詞向量矩陣,每一個行對應一個單詞的向量)
- 對於某一個單詞(中心詞),從embedding矩陣中提取其周邊單詞的詞向量
- 求周邊單詞的詞向量的均值向量
- 在該均值向量上使用logistic regression進行訓練,softmax作為啟用函式
- 期望logistic regression得到的概率向量可以與真實的概率向量(即中心詞的one-hot編碼向量)相匹配。
3-2)Skip-gram model
Skip-gram模型的具體做法是,將一個詞的詞向量對映到2n個詞的詞向量(2n表示當前輸入詞的前後各n個詞),然後分別通過softmax得到這2n個詞的分類損失值之和。
Skip-gram的方法中,用一個詞預測其上下文,得到了當前詞上下文的很多樣本,因此可用於更大的資料集。具體如圖:
Skip-gram模型屬於非監督學習領域。
演算法步驟:
- 隨機生成一個大小為(vocabulary_size, embedding_size)的embedding矩陣(即所有單詞的詞向量矩陣,每一個行對應一個單詞的向量)
- 對於某一個單詞,從embedding矩陣中提取單詞向量
- 在該單詞向量上使用logistic regression進行訓練,softmax作為啟用函式
- 期望logistic regression得到的概率向量可以與真實的概率向量(即周邊詞的one-hot編碼向量)相匹配。
3)詞向量計算
詞向量的計算結果:最終的詞向量裡面,相似的單詞,他們的詞向量值在比例上也是相似的。
詞向量的相似性衡量:事實上我們通常會用餘弦距離去衡量詞向量的相似性,即詞向量間的夾角。相似性就是:給定單詞w1 w2 w3的詞向量Vw1 Vw2 Vw3,如果Vw1 Vw2.T / (|Vw1||Vw2|) > Vw1 Vw3.T / (|Vw1||Vw3|),那麼我們就認為w2比w3更接近w1。