第六课 从词向量到NLP分类问题
文章目錄
- 1 nlp的常見任務
- 2 詞向量表示
- 2.1 離散表示
- 2.2 分布式表示
- 2.3 NNLM(2013年)
- 2.3.1模型
- 2.3.2特點
- 2.4 Word2Vector:CBOW連續詞袋
- 2.4.1 樣本處理
- 2.4.2 結構
- 2.4.3 CBOW:層次softmax
- 2.4.4 CBOW:負例采樣
- 2.4.5 Word2Vec:skip-gram模型
- 2.4.6 word2vec存在的問題
- 2.4.6 word2vec優點
1 nlp的常見任務
分詞
詞性標注
自動摘要
指代消解
機器翻譯
主題識別
文本分類
2 詞向量表示
文本不同于圖片與視頻。圖片與視頻天然是以二進制形式表示的,計算機能夠處理。
文本是人造的,只有人可以懂,怎么讓計算機讀懂,需要使用詞向量
表示方式要能夠解決:
1 需要保證詞的相似性
例如 frog toad rana 相似
2 向量空間分布的相似性
英語中的1 2 3 4 要和西班牙語的 1 2 3 4 分布相似
3 向量空間子結構
向量是可以用于運算的
2.1 離散表示
1 one-hot
2 bag of words
文檔的向量可以直接將各詞的詞向量表示加和。
3 tf-idf
4 bi-gram和n-gram
離散表示的問題:
1 沒有辦法衡量詞向量之間的關系
2 詞表維度隨著語料庫膨脹
3 n-gram 隨著語料庫膨脹更快
4 數據稀疏問題
2.2 分布式表示
用一個詞附近的詞表示這個詞。
局域窗中的word-word共現矩陣可以挖掘語法和語義信息。
例如:
I like deep learning.
I like NLP.
I enjoy flying.
如果窗口為1(一般在5-10之間),那么可以得到這樣的矩陣。
這是一個對角陣。
I和like 出現2次
I和enjoy出現1次…
存在的問題:
?向量維數隨著詞典大小線性增長
? 存儲整個詞典的空間消耗非常大
? 一些模型如文本分類模型會面臨稀疏性問題
? 模型會欠穩定
SVD降維
2.3 NNLM(2013年)
NNLM=Neural Network Language Model
以下內容轉載自CSDN博主「馬飛飛」的原創文章。
NNLM是從語言模型出發(即計算概率角度),構建神經網絡針對目標函數對模型進行最優化,訓練的起點是使用神經網絡去搭建語言模型實現詞的預測任務,并且在優化過程后模型的副產品就是詞向量。
進行神經網絡模型的訓練時,目標是進行詞的概率預測,就是在詞環境下,預測下一個該是什么詞,目標函數如下式, 通過對網絡訓練一定程度后,最后的模型參數就可當成詞向量使用.
2.3.1模型
NNLM的網絡結構(四層神經網絡)如右圖,主要參數有:
[1]詞庫大小(假定有8W個詞) [2]轉化的詞向量大小(假定為300維長度) [3]輸入層神經元數(即詞的滑動窗口容量,假定滑窗大小為4) [4]隱層神經元數量(假定為100個) [5]輸出層神經元數(對應詞容量,有8W個)[6]由輸入層到投影層的矩陣C(一個大的矩陣,大小為8W*300,是最后求解的目的,開始時隨機初始化) [7]從投影層到隱層的權值矩陣H和偏置矩陣B [8]從隱層到輸出層的權值矩陣U和偏置矩陣D
現在咱們針對NNLM模型,由下往上進行分析:
1 每次從語料庫中滑動4個數據,將其中前三個詞轉為one-hot編碼形式,將三個one-hot形式作為輸入喂入網絡。
2 從輸入到映射層所做的事情是(one-hot向量 * 矩陣C),這里詞的one-hot編碼會根據為1的位置去對應C矩陣,去抽出對應位置的300維的詞向量,將此向量作為投影層的輸出。
3 上一步投射層會將詞的one-hot表示表示成300維的稠密向量,從投影層到隱層是一種全連接的連接方式,參數的數量是3*100個,每個隱層神經元有3條線相連接,最后使用tan函數結合H與B獲取激活輸出。
4 從隱層到輸出層也是一直全連接的形式,連接線數量為100*8W,使用softmax函數結合U與D獲取最后的概率輸出。
5 計算交叉熵損失函數值,以梯度下降方式進行反向傳播,在反向傳播過程中對參數矩陣C、H、B、U、D進行更新。(C、H、B、U、D分別指什么?)
通過不斷的喂入批次數據,對網絡進行反向傳播調參,最后訓練出一個進行詞預測任務的模型,并將訓練好模型中的C矩陣里的每一列都作為,對應于one-hot編碼中位置為1詞的詞向量(大小為1*300),這個詞向量就是我們要轉化的結果。
2.3.2特點
優點:使用NNLM模型生成的詞向量是可以自定義維度的,維度并不會因為新擴展詞而發生改變,而且這里生成的詞向量能夠很好的根據特征距離度量詞與詞之間的相似性。例如上面就固定是300維。
缺點:計算復雜度過大,參數較多(word2vec是一種改進)。
每個訓練樣本的計算復雜度:NxD+NxDxH+HxV
這一段的描述還可以參考知乎講得更詳細。
2.4 Word2Vector:CBOW連續詞袋
NNLM太復雜了。
2.4.1 樣本處理
一個滑窗長度n=5。在滑窗范圍內以中間詞為預測對象,左右詞作為上下文。
例如:我|愛|吃|海底撈|火鍋。以我,愛,海底撈,火鍋這4個詞作為上下文,預測中間的詞應該是吃。
2.4.2 結構
輸入是4個 Vx1的向量,上一步中的矩陣C是DxV維度,每一個Cx向量=一個Dx1的向量。將這4個向量相加,作為輸入送入softmax,預估中心詞。
與NNLM的區別就是去掉了隱藏。
2.4.3 CBOW:層次softmax
上面W矩陣(也就是從SUM到輸出層)需要DxV維度。V有點大。
Huffman tree 可以根據詞頻對詞典中的詞做編碼。編碼之后頻率高的詞編碼長度短。這棵樹的深度為log2Vlog_2Vlog2?V
那么輸出層是一個若干次的二分類。
計算:對數似然
2.4.4 CBOW:負例采樣
正確的詞:吃
負利:不是吃的詞,可以取300個左右。取哪些詞?
詞典中的每個詞對應線段的每一小段。
線段長度=counter(w)∑u∈Dcounter(u)\dfrac{counter(w)}{\sum_{u \in D} counter(u)}∑u∈D?counter(u)counter(w)?
將[0,1]劃分為M=10810^8108等分,每次隨機生成[1,M]的一個數,看落在哪個詞對應的部分上。所以出現頻次高的詞更可能被選擇。
2.4.5 Word2Vec:skip-gram模型
用中心詞預測周邊詞
2.4.6 word2vec存在的問題
1 對每個local context window 單獨訓練,沒有用包含在gobal co-currence矩陣中的信息。
2 一詞多義不能表示,每個詞有唯一的向量。
2.4.6 word2vec優點
word2vec可以保證詞的相似性
能夠發現woman-man結果和queue-king相似
工具庫 google word2vec,這是c++版本的。
工具gensim里面集成了word2vec,fast-text等工具。詳見鏈接。
使用word2vec+CNN做文本分類。 詳見鏈接。
總結
以上是生活随笔為你收集整理的第六课 从词向量到NLP分类问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [Leetcode][程序员面试金典][
- 下一篇: Mybatis-代码走查问题整理