一 NLP常見任務
1 自動摘要
2 指代消解 小明放學了,他媽媽去接他
3 機器翻譯 小心 ---> care
4 詞性標註 heat(n)
5 分詞(中文,日文等) 大水溝/很/難/過
6 主題識別
7 文本分類
二 NLP處理方法
傳統: 基於規則
p現代: 基於統計機器學習
HMM, CRF, SVM, LDA, CNN…
“規則”隱含在模型參數裡
詞編碼需要保證詞的相似性:
簡單 詞/短語 翻譯:
向量空間子結構:
VKing - VQueen + VWomen = VMan
VParis - VFrance + VGerman = VBerlin
最終目標: 詞向量表示作為機器學習、 特別是深度學習的輸入和表示空間。
在計算機中表示一個詞:
貓 美麗
❖動物 ❖多姿
❖胎生 ❖靚麗
❖有毛 ❖好看
❖彈跳性好 ❖俊俏
❖體型小 ❖迷人
❖寵物 ❖標誌
❖吃肉 ❖端莊
問題:
1.不能分辨細節的差別 2.需要大量人為勞動 3.主觀 4.無法發現新詞 5.難以精確計算詞之間的相似度。
離散表示: One-hot表示:
語料庫
John likes to watch movies. Mary likes too.
John also likes to watch football games.
詞典
{"John": 1, "likes": 2, "to": 3, "watch": 4, "movies": 5, "also":
6, "football": 7, "games": 8, "Mary": 9, "too": 10}
One-hot表示
John: [1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
likes: [0, 1, 0, 0, 0, 0, 0, 0, 0, 0]
too : [0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
…
❖詞典包含10個單詞, 每個單詞有唯一索引
❖在詞典中的順序和在句子中的順序沒有關聯
三 語言模型:
一句話 (詞組合) 出現的概率:
Unigram/1-gram
Bi-gram/2-gram
無法衡量詞向量之間的關係
酒店 [0, 1, 0, 0, 0, 0, 0, 0, 0, 0]
賓館 [0, 0, 0, 0, 1, 0, 0, 0, 0, 0] 各種度量(與或非、 距離都不合適
旅舍 [0, 0, 0, 0, 0, 0, 0, 0, 1, 0] 太稀疏, 很難捕捉文本的含義
Ø詞表維度隨著語料庫增長膨脹
Øn-gram詞序列隨語料庫膨脹更快
Ø數據稀疏問題
分佈式表示 (Distributed representation):
用一個詞附近的其他詞來表示該詞 :
“Youshallknowawordbythecompanyitkeeps”
(J.R.Firth1957:11)
現代統計自然語言處理中最有創見的想法之一。
共現矩陣 (Cocurrence matrix):
Word - Document 的共現矩陣主要用於發現主題(topic), 用於主題模型, 如LSA (Latent Semantic Analysis)局域窗中的Word - Word 共現矩陣可以挖掘語法和語義信息。
•Ilikedeeplearning.
• IlikeNLP.
• Ienjoyflying.
windowlength設為1(一般設為5~10)
使用對稱的窗函數(左右windowlength都為1)
將共現矩陣行(列)作為詞向量存在的問題:
•向量維數隨著詞典大小線性增長
•存儲整個詞典的空間消耗非常大
•一些模型如文本分類模型會面臨稀疏性問題
構造低維稠密向量作為詞的分佈式表示 (25~1000維)!
SVD降維:
Ø最直接的想法: 用SVD對共現矩陣向量做降維。
SVD存在的問題:
Ø計算量隨語料庫和詞典增長膨脹太快, 對X(n,n)維的矩陣, 計算量O(n^3)。 而對大型的語料庫,n~400k, 語料庫大小1~60B token。
Ø難以為詞典中新加入的詞分配詞向量
Ø與其他深度學習模型框架差異大
NNLM (Neural Network Language model):
結構:
word2vec: CBOW(連續詞袋):
CBOW: 層次Softmax:
Sigmoid函數
Ø[[n(w,j+1)=ch(n(w,j)]] 是選擇函數, 表明只選擇從根節點到目
標葉節點路徑上的內部節點
Øn(w,j): Huffman數內部第j層的節點
Øch(n(w,j)): n節點的child節點
CBOW: 負例採樣:
P(w|context(w)): 一個正樣本, V-1個負樣本, 對負樣本做採樣
損失函數: 對語料庫中所有詞w求和:
Word2Vec: Skip-Gram模型:
Word2Vec: 存在的問題:
Ø對每個local context window單獨訓練, 沒有利用包含在global co-currence矩陣中的統計信息。
Ø對多義詞無法很好的表示和處理, 因為使用了唯一的詞向量。
詞嵌入可視化: 公司 — CEO:
詞嵌入可視化: 詞向
詞嵌入可視化: 比較級和最高級:
詞嵌入效果評估: 詞類比任務:
GloVe與Word2Vec對比:
GloVe隨著迭代次數增加, 精度提升。
Word2Vec未使用類似迭代次數的Epoch, 用Negative Samples模擬。
五 總結
離散表示
•One-hot representation, Bag Of Words Unigram語言模型
•N-gram詞向量表示和語言模型
•Co-currence矩陣的行(列)向量作為詞向量
❖分佈式連續表示
•Co-currence矩陣的SVD降維的低維詞向量表示
•Word2Vec: Continuous Bag of Words Model
•Word2Vec: Skip-Gram Model
工具google word2vec:
工具gensim:
工具gensim中文處理案例:
Word2vec+CNN做文本分類:
論文詳見《Convolutional Neural Networks for Sentence Classification》
http://arxiv.org/abs/1408.5882
Theano完成的代碼版本:
https://github.com/yoonkim/CNN_sentence
TensorFlow改寫的代碼版本:
https://github.com/dennybritz/cnn-text-classification-tf
添加分詞和中文詞向量映射之後, 可用於中文文本分類(情感分析)
關注機器學習,深度學習,自然語言處理等方面的知識。 有什麼問題隨時和我交流。
閱讀更多 機器學習與數據挖掘 的文章