【NLP-词向量】从模型结构到损失函数详解word2vec
上周我們講到,在進行NNLM訓練時,能夠得到副產品,詞向量。本文介紹一種專門用于詞向量制備的方法:word2vec,利用它能夠高效的訓練出詞向量。
作者&編輯 | 小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能夠高效的獲得詞向量,是自然語言處理入門必須要掌握的內容。有三AI-NLP知識星球詳細介紹了如何搭建網絡,復現上述的過程,感興趣的同學可以掃下面的二維碼加入。
讀者們可以留言,或者加入我們的NLP群進行討論。感興趣的同學可以微信搜索jen104,備注"加入有三AI NLP群"。
下期預告:自然語言處理中的命名實體識別
知識星球推薦
掃描上面的二維碼,就可以加入我們的星球,助你成長為一名合格的自然語言處理算法工程師。
知識星球主要有以下內容:
(1) 聊天機器人。考慮到聊天機器人是一個非常復雜的NLP應用場景,幾乎涵蓋了所有的NLP任務及應用。所以小Dream哥計劃以聊天機器人作為切入點,通過介紹聊天機器人的原理和實踐,逐步系統的更新到大部分NLP的知識,會包括語義匹配,文本分類,意圖識別,語義匹配命名實體識別、對話管理以及分詞等。
(2) 知識圖譜。知識圖譜對于NLP各項任務效果好壞的重要性,就好比基礎知識對于一個學生成績好壞的重要性。他是NLP最重要的基礎設施,目前各大公司都在著力打造知識圖譜,作為一個NLP工程師,必須要熟悉和了解他。
(3) NLP預訓練模型。基于海量數據,進行超大規模網絡的無監督預訓練。具體的任務再通過少量的樣本進行Fine-Tune。這樣模式是目前NLP領域最火熱的模式,很有可能引領NLP進入一個全新發展高度。你怎么不深入的了解?
轉載文章請后臺聯系
侵權必究
往期精選
【完結】 12篇文章帶你完全進入NLP領域,掌握核心技術
【NLP-詞向量】詞向量的由來及本質
【每周NLP論文推薦】從預訓練模型掌握NLP的基本發展脈絡
【每周NLP論文推薦】 NLP中命名實體識別從機器學習到深度學習的代表性研究
【每周NLP論文推薦】 介紹語義匹配中的經典文章
【每周NLP論文推薦】 開發聊天機器人必讀的重要論文
【每周NLP論文推薦】 掌握實體關系抽取必讀的文章
【每周NLP論文推薦】 聊天機器人中FAQ相關的論文推薦
總結
以上是生活随笔為你收集整理的【NLP-词向量】从模型结构到损失函数详解word2vec的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【每周NLP论文推荐】 生成式聊天机器人
- 下一篇: 【每周CV论文推荐】 初学GAN必须要读