欧美精品123_精品露脸国产偷人在视频_日韩美女免费线视频_成人av三级

自然語言處理:使用word2vec提取詞向量(自然語言處理的應用)

本文的標題是《自然語言處理:使用word2vec提取詞向量》來源于:由作者:陳文清采編而成,主要講述了一、 背景介紹
深度學習已經在圖像、語音等多個領域取得了重大突破,但在自然語言處理領域很長一段時間


自然語言處理:使用word2vec提取詞向量(自然語言處理的應用)

一、 背景介紹

深度學習已經在圖像、語音等多個領域取得了重大突破,但在自然語言處理領域很長一段時間內,一直沒有取得激動人心的成果,很大一部分原因是因為文本不像圖像自帶天然的網格,能夠直接的轉換成數值型數據,從而提取特征(如向量或者矩陣表示)。

于是,如何從文本中提取特征成為了一個熱點問題。從2013年google
研究員Tomas Mikolov 發表兩篇論文(《Efficient Estimation of Word Representations
in Vector Space》、《Distributed Representations of Words and Phrases and
their
Compositionality》)提出Word2Vec工具提取詞向量,讓自然語言處理向前邁了一大步,本文從原理上闡述Word2Vec的實現。

二、 詞向量

1.詞向量表示

詞向量是將文本分詞后,以向量的形式表示每一個詞語,這種轉換方式成為embedding,中文稱之為詞嵌入,早期使用一種叫one-hot Representation的表示詞向量,例如:

“今天上午上完體育課,下午放假。”

分詞后用向量表示每一個單詞,其中每個單詞維度為單詞數,每一個單詞所在位置為1,其他為0,如今天=[1,0,0,0,0,0,0],上午=[0,1,0,0,0,0,0]

這種表達詞語的向量空間為系數矩陣,便于做計算,但是這種表示詞語的方法有兩個缺點:一是在做一些深度學習的運算時,會造成維災難;二是這樣表示詞語沒有體現詞語之間的關聯性。

另一種Distributed Representation是Hinton在1986年提出通過訓練將每個詞映射為K維實數向量,通過詞之間的距離判斷詞語之間的語義相似度。Word2Vec就是用這種詞向量表示方式,下面會講到如何生成k維實數詞向量。

2.神經網絡語言模型(Neural Network Language Model)

看過大部分的獲取詞向量的方法,基本都是在訓練模型的同時,得到詞向量的,其中最經典的應該是Bengio在NIPS上發表的《Can
Artificial Neural Networks Learn Language
Models?》,文中提出以三層神經網絡構建語言模型的方法,如圖:

圖中最下方的wt-n+1,…,wt-2,wt-1為前n-1個詞,現在需要根據這已知的n-1個詞語去預測下一個詞wt。C(w)表示為詞語w的詞向量,這里要注意的是,C(w)開始是未知的。將前n-1個單詞拼接成一個矩陣放入到隱藏層(第二層),輸入Hx+d通過tanh函數輸出,最后以一個softmax函數歸一化輸出,計算公式為:

其中U是隱藏層到輸出層的參數,整個模型后半部分就是一個標準的三層神經網絡模型,而前面的wx為直接輸入層到輸出層的一個線性變換,這個模型中大部分的計算都在U和隱層的計算上。最后再用隨機梯度下降的方法求解模型參數。這樣就得到了一個語言模型和每個詞的詞向量了。

我們從概率分布的角度去理解:

一個文本s=w1,w2,w3,…,wt,概率表示為:


自然語言處理:使用word2vec提取詞向量(自然語言處理的應用)

由于當文本比較大時,參數過多,一般用簡化模型Ngram模型:


自然語言處理:使用word2vec提取詞向量(自然語言處理的應用)

利用一個簡單的前向反饋神經網絡g,由一個tanh和一個softmax輸出層組成,通過將embedding層輸出的N-1個詞向量映射為一個長度為V的概率分布向量,從而對詞典中的word在輸出context下條件概率做出預估:


自然語言處理:使用word2vec提取詞向量(自然語言處理的應用)

通過最小化一個cross-entropy的正則化損失函數來調整模型的參數θ:


自然語言處理:使用word2vec提取詞向量(自然語言處理的應用)

3.Word2vec

由于NNLM存在一些問題(如NNLM只能處理定長的序列、NNLM訓練太慢等等),Mikolov在2013年發表兩篇文章并推出Word2Vec工具計算詞向量。讓我們來看看,它是怎么實現算法的。

對原始的NNLM模型作如下改造:

1.移除前向反饋神經網絡中非線性的hidden layer,直接將中間層的embedding layer與輸出層的softmax layer連接;

2.忽略上下文環境的序列信息,輸入的所有詞向量均匯總到同一個embedding layer;

3.將詞語加入到上下文環境、得到的CBow模型如下圖所示:


自然語言處理:使用word2vec提取詞向量(自然語言處理的應用)

從數學上看,CBow模型等價于一個詞袋模型的向量乘以一個embedding矩陣,然后得到一個連續的embedding向量,從形式上看,CBow模型是由前n個詞語和后n個詞語去預測當前詞的模型。反過來用目標詞語對前后n個詞語的預測過程中得到的模型叫Skip-gram模型:


自然語言處理:使用word2vec提取詞向量(自然語言處理的應用)

計算過程如下:


自然語言處理:使用word2vec提取詞向量(自然語言處理的應用)

其中,Vi為wi的輸入向量,Uj為wj的輸出向量。由此可見Skip-gram是輸入向量和輸出向量之間的余弦相似度。然后進行softmax歸一化。

為了減少訓練過程中的計算時間,作者使用了一些tricks如隨機抽樣、高頻詞亞采樣、huffman編碼等等去優化訓練過程。有興趣的朋友可以看看源代碼和實現。

下面貼一下自己根據作者提供的C++實現版本訓練上百萬財經**得出結果:


自然語言處理:使用word2vec提取詞向量(自然語言處理的應用)

其中第一行是輸入詞語(這里是農業),下面列出來的是與輸入詞相關度最高的詞語。

三、 總結與展望

Word2Vec是谷歌實現詞向量的一個很好的工具實現,它對序列局部數據有著很好的解釋,我們可以用來進行文本分類、**推薦、情感分析等工作。也為后期能將文本數據放入到CNN、RNN以及變體對語言進行各種語義組合模型提供了很大幫助。同時也引出思考,既然詞語能夠用向量表示,那么句子和文檔是否也能用向量表示,也能不能用矩陣、隊列、棧表示。這也值得更進一步的去探討與研究。

自然語言處理:使用word2vec提取詞向量(自然語言處理的應用)
本文原作者為**,轉載請注明:出處!如該文有不妥之處,請聯系站長刪除,謝謝合作~

原創文章,作者:陳文清,如若轉載,請注明出處:http://www.uuuxu.com/20220512316364.html

主站蜘蛛池模板: 赤峰市| 若尔盖县| 忻城县| 菏泽市| 合川市| 泰兴市| 彩票| 霞浦县| 饶平县| 山东| 石楼县| 天峨县| 淮南市| 东至县| 成安县| 宁蒗| 常州市| 梁河县| 南皮县| 固原市| 当阳市| 花莲县| 长汀县| 邳州市| 武乡县| 隆回县| 阆中市| 巴中市| 驻马店市| 资中县| 金溪县| 贵溪市| 海宁市| 乌鲁木齐市| 重庆市| 上高县| 临桂县| 宁德市| 唐河县| 和平区| 新乡县|