「NLP-詞向量」從模型結構到損失函式詳解word2vec
上週我們講到,在進行NNLM訓練時,能夠得到副產品,詞向量。本文介紹一種專門用於詞向量製備的方法:word2vec,利用它能夠高效的訓練出詞向量。
作者 | 小Dream哥
編輯 | 小Dream哥
1 word2vec是什麼?
在闡述word2vec的原理之前,筆者先大致介紹一下,word2vec是什麼,能夠用來幹什麼,讓讀者有一個大致的認識。
word2vec是2013年Efficient estimation of word representations in vector space論文中提出的一種有效的詞向量製備方法,沿用至今。
word2vec用前饋神經網路進行訓練,提出了Continuous Bag-of-Words和Continuous Skip-Gram兩種模型訓練方法,損失層有層次Softmax(Hierarchical Softmax)和負取樣(Negative Sampling)兩種。
2 模型結構
上面我們說了,word2vec是一種高效的製備詞向量的方法,那麼跟2003年的NNLM相比,它的效率高在哪裡呢?先從網路結構開始,我們來細細看一下。
如上圖所示,是word2vec中提出的兩種模型訓練模式:Continuous Bag-of-Words和Continuous Skip-Gram。
Continuous Bag-of-Words:
CBOW是這樣一種任務,給定一個去掉了中間一個詞的context,預測其中間的那個詞。它跟NNLM的任務有點相似,差別在於,它是雙向的,即預測詞時利用了該詞前後的詞語資訊。
Continuous Skip-Gram:
Continuous Bag-of-Words是透過一個詞,預測其周圍的幾個詞。
以Continuous Bag-of-Words為例,我們來看看word2vec的網路結構。
如上圖所示,word2vec將網路做了如下的改造:
1.輸入的所有詞向量相加求和得到SUM,稱為embedding layer;
2.移除前向反饋神經網路中非線性的hidden layer,直接將中間層的embedding layer與輸出層的softmax layer連線;
我們來分析下這樣做有什麼好處呢?移除中間的隱藏層,最大的好處就是能夠極大的減少運算量了,訓練時候的效率就能夠大幅提升。Continuous Skip-Gram也是相似的道理了。
3 損失函式
以CBOW模型為例,訓練時最容易想到的是,得到輸入序列的SUM embedding之後,透過一個project和softmax層,計算出字典V中每個詞的機率,再構建交叉熵之類的損失函式,然而直接對詞典裡的V個詞計算相似度並歸一化顯然是極其耗時的。
為此作者提出了層次Softmax(Hierarchical Softmax)和負取樣(Negative Sampling)兩種損失層。層次Softmax(Hierarchical Softmax)原理很有意思,但是計算起來還是比NCE要複雜。因此,真正應用比較多的是NCE,這裡就詳細介紹一下NCE的原理。
負取樣的思想最初來源於一種叫做Noise-Contrastive Estimation的演算法,原本是為了解決那些無法歸一化的機率模型的引數預估問題。
在CBOW中,給定一個去掉了中間一個詞的context(w),預測其中間的那個詞w。那麼,中間的那個詞w就是 正樣本,其他的詞就是 負樣本了。那麼NCE的過程大致是這樣的, 對於context(w)構造一個關於w的負樣本集NEG(w);在訓練時,針對{w,NEG(w)}構造一個目標函式,透過最佳化該目標函式最佳化整個網路的引數(包括詞向量)。
那麼,這個目標函式該怎麼構建呢?
我先定義一個這樣的函式,
其中:
那麼p函式也可以這樣表示:
這裡X表示輸入的各個詞向量之和。
那我們的目標函式這樣去構建:
也可表示為:
這樣的話,我們在訓練時,只需最大化這個g,就可以最佳化網路的引數。想想看為什麼呢?從形式上看,最大化g就是最大化
同時最小化所有的
這不正是我們所需要的嗎?
好了,我們來總結一下上述的過程。 NCE的訓練過程,就是構建一個關於w的負樣本集NEG(w),針對正負樣本集,計算g函式的值,訓練時,透過最大化該值來最佳化網路。
4 負取樣的過程
我們這節來看看負取樣的過程是怎麼樣進行的, 也就是上述NEG(w)是如何獲得的。
對於語料C,可以構建一個詞典D,並統計其中各個詞的詞頻。整體的原則是,詞頻高的詞選中作為負樣本的機率就高。
設詞典D中每一個詞對應一個長度l(w)的線段,則l(w)=counter(w)/|C|。然後將這些線段首尾連線起來,就構成了一個長度為1的線段。在負取樣時,隨機往該線段上打點,打到的就被採到。這就是負取樣的大致過程了,在word2vec的實際操作過程中,會做一些變化,但是基本的思想就是這樣的。
總結
上述就是word2vec的基本原理了,透過word2vec能夠高效的獲得詞向量,是自然語言處理入門必須要掌握的內容。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946223/viewspace-2656589/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 詳解常見的損失函式函式
- 神經網路基礎部件-損失函式詳解神經網路函式
- 損失函式函式
- 3D高斯損失函式(2)新增BA最佳化和結構損失3D函式
- 例項解釋NLLLoss損失函式與CrossEntropyLoss損失函式的關係函式ROS
- 損失函式+啟用函式函式
- 3D高斯損失函式(1)單純損失函式3D函式
- Triplet Loss 損失函式函式
- 損失函式綜述函式
- 解構函式的標量與向量?函式
- 【機器學習基礎】常見損失函式總結機器學習函式
- Pytorch 常用損失函式PyTorch函式
- DDMP中的損失函式函式
- 建構函式詳解函式
- TensorFlow損失函式專題函式
- 談談交叉熵損失函式熵函式
- Pytorch中的損失函式PyTorch函式
- PyTorch:損失函式loss functionPyTorch函式Function
- SSD的損失函式設計函式
- 邏輯迴歸 損失函式邏輯迴歸函式
- 聊聊損失函式1. 噪聲魯棒損失函式簡析 & 程式碼實現函式
- Java建構函式詳解Java函式
- 2.3邏輯迴歸損失函式邏輯迴歸函式
- 機器學習從業者必知的5種迴歸損失函式機器學習函式
- 無需手工設計,從零開始搜尋損失函式函式
- 在Python和TensorFlow上構建Word2Vec詞嵌入模型Python模型
- TensorFlow筆記-06-神經網路優化-損失函式,自定義損失函式,交叉熵筆記神經網路優化函式熵
- c++建構函式詳解C++函式
- 焦點損失函式 Focal Loss 與 GHM函式
- 圖示Softmax及交叉熵損失函式熵函式
- 邏輯迴歸損失函式(cost function)邏輯迴歸函式Function
- 損失函式改進方法之Focal Loss函式
- 從‘void*’到‘int’的轉換損失精度
- c++建構函式詳解薦C++函式
- Jmeter(二十三) - 從入門到精通 - JMeter函式 - 上篇(詳解教程)JMeter函式
- Jmeter(二十四) - 從入門到精通 - JMeter函式 - 中篇(詳解教程)JMeter函式
- 人臉識別損失函式疏理與分析函式
- 理解神經網路的不同損失函式神經網路函式