NLP自然語言處理
- 2020 年 12 月 7 日
- 筆記
NLP
應用例子
- 垃圾郵件過濾 Spam Filtering
- 機器翻譯 Machine Translation
- 信息檢索 Information Retrieval
- 問答系統 Question Answering
- 信息提取 Information Extraction
- 內容摘要 Summarization
- 情感分析 Sentiment Analysis
- 命名實體識別 Entity Recognition
核心技術
-
語言模型 Language modelling
-
分詞 Segmentation
它|是|一隻|老虎
-
詞性標註 Part-of-speech tagging
DT VBX DT JJ NN This is a simple question.
-
句法分析 Syntactic parsing
-
命名實體識別 Name-entity recognition
-
語義角色標註 Word sanseis ambiguation
例子
自然語言處理技術歷史
基於邏輯(集合論)的模型
例子
所有人都會死
蘇格拉底是人
=》
蘇格拉底會死
基本法則
- a is b && b is c => a is c
- a = not (not a)
- a is b => not b is not a
- P->Q => not P || Q =》not (P && not Q)
模糊集合論
集合論的缺陷
羅素悖論:由所有不包含自身的集合構成的集合
例子:理髮師稱只給那些不給自己理髮的人理髮。
基於集合論,理髮師無論給自己理髮還是不給自己理髮都是矛盾的。
因此集合論不是完備的。即使後面馮羅伊德等科學家提出了各種假定條件。
為什麼集合論不能適用於自然語言
- 自然語言不是嚴格的邏輯
- 句子的組成規則鬆散
- 日常用語常常有語法錯誤,但人依然可以正確的交流
- 即使自然語言用規則來描述,但是規則的數量非常龐大,無法完全適用邏輯編程把所有的場景都覆蓋
- 語言的二義性
- apple => computer/phone/fruit
- host => n or v
- I saw a man with a telescope
- 同一個意思可以有很多種表達
基於概率的模型
由於上述的原因,集合率無法很好的描述自然語言,科學家發現通過概率模型可以更好的描述自然語言。
前一百個單詞適用的頻率和排名的曲線
深度學習
深度學習來處理自然語言屬於概率模型
涉及數學的知識
函數
- y=x^2
- y=2x3-14x2+24*x
- y=sin(x)
- 高維函數
- y=e^x
- y=log(x)
- y=1/(1+e^(-z))
- y=max(0, x)
- L1: ||x|| = |x1| + |x2|
- L1正則化解析
證明最小點位於坐標軸上
h = f+c|x|
由於在x = 0處不可導
h-left'(0)*h-right'(0) = (f’+c)*(f’-c)
那麼如果c>|f'(0)|可得,h在0處左右導數異號
0是最值。
那麼在損失函數加入L1正則化後,可以得到某些維度容易為0,從而得到稀疏解
- L2: |x||2 = (|x1|^2 + |x2|2)(1/2)
- L2正則化,類似於L1的證明,容易得到比較平均的w,各個w都比較靠近0,從而得到更光滑的曲線
矩陣
- SVD
-
Jacobian矩陣
矩陣的一階導數
-
Hessian矩陣
矩陣的二階導數
凸包和凸函數
幾乎所有的最優化手段,都將適用凸優化算法來解決
概率
條件概率
P(A|B) = P(A and B) / P(B)
if A and B 獨立
=》P(A and B| C) = P(A|C)*P(B|C)
也可以推出
=>A(A|B and C) = P(A|C) (B交C不為空)
二項分佈
拋9次硬幣,硬幣出現正面的概率是0.5,出現k次的概率分佈如下如
服從正態分佈
期望
x的平均值
E = x*p(x) + …
方差
x相對於期望的偏離
var = (x-E(x))^2
協方差
conv = (x – E(x))*(m – E(m))
描述x,m是否有同分佈
按理協方差為0,並不代表x和m沒有關係
例如下圖
如果點的分佈對稱的分佈,會得到協方差為0,但是其實他們是有關係的。
聯合概率
把每個相關的概率累加,得到聯合概率
多項式分佈
P(x1=m1,x2=m2…) = n!*P1m1/m1!*P2m2/m2!
伽馬函數
T(n) = (n-1)!
T(x)用一條曲線逼近n!,進而可以求得非整數的階乘
beta分佈
由二項式分佈推出
P = T(a+b)*x(a-1)*(1-x)(b-1)/(T(a)*T(b))
泊松分佈
高斯分佈
則正態分佈
對數正態分佈
指數分佈
語言
信息嫡
p分佈越平均,H越大,代表越不確定
交叉嫡
y為0時,不考慮y『。y為1時,y’越接近1,越小,越靠近0,越大
把D最小化,迫使y’逼近y
auto-encoder
語言概率模型
對於一個句子,有若干單詞組成。例如
C1: The dog laughs.
C2: He laughs.
那麼計算P(C1) = P(The, Dog, laughs)的概率和P(C2) = P(He, laughs)的概率。
根據歷史文本的統計學習。
可以得到P(C1)<<P(C2)
詞袋模型
P(‘I love the game’) = P(‘I’)*P(‘love’)*P(‘the’)*P(‘game’)
其中P(
情感分析
計算一篇文章是積極的還是消極的。
P(y|x) = sigmod(wx)
x是文章內每個單詞的頻率
y表示積極和消極情感
n-gram模型
P(x1, x2, x3 ... )
= P(x1)*P(x2|x1)*P(x3|x1, x2)....*P(xn|x1, x2,...xn-1)
其中P(xk|x1, x2,..xk-1) = frequence(x1, x2 ,, xk)/frequence(x1, x2..xk-1)
n一般不能太大,因為n太大,會導致全文無法找到一摸一樣的單詞組合,導致概率為0
2-gram模型例子
P('The dog sleeps')
= P(The)*P(dog|the)*P(sleeps|dog)
Interpolation
把多個gram的模型進行線性整合
語言模型評價
交叉嫡
H越小,Pxn越接近1,模型越好
Perplexity
貝葉斯進行郵件分類
P(y|x1, x2, .. xn) = P(y)*P(x1, x2, … xn|y) / P(x1, x2, … xn)
y代表是否是垃圾郵件
x代表單詞
分詞
廣州市長壽路 -》 廣州市長|壽路
廣州市長壽路 -》 廣州市|長壽路
匹配詞袋:廣州市,廣州市長,長壽路
使用最大匹配發,第二個分詞更優
使用N-gram模型計算分詞
P(結合成分子)
option1: = P(分子|成)P(成|結合)P(結合)
option2: = P(分子|合成)P(合成|結)P(結)
optionn ....
通過統計P(A|B),得出各個option的概率,取最大的概率,則為最後的分詞
詞表示
one-hot encoding
word => [0, 0 , … 1, … 0]
附近詞encoding
word => [0, 1, 0, 1, 0, …]
可以解決詞相似性問題
附近詞帶權重encoding
計算附近詞的頻率
word => [0, 3, 0, 1, 0, …]
C&W
w是附近詞的one-hot encoding
score是詞的one-hot encoding
最後一層通過softmax,取擬合文本
最終中間層則為詞向量
skip-gram
輸入為詞one-hot encoding
輸出為附近此的one-hot encoding
最後通過softmax預測附近詞
最後中間層則為結果詞向量
詞性標註
混合模型
混合模型是一種統計模型,問題中包含若干個子問題,每個子問題是一個概率分佈,那麼總問題就是若干個子問題的組合,也就是若干個子分部的組合,這樣就形成了混合模型。
例子
有紅黑兩種硬幣,把它們放在盒子里,從盒子里隨機抽取一個硬幣並投幣,抽到紅色的概率是p,紅色硬幣正面的概率是q,黑色硬幣正面的概率是m,假設我們沒辦法看到抽取出的硬幣的顏色,只能看到最終是正面或者反面的結果,例如HTTHTTTTHHH (H:正面 T: 反面)。需要估計p,q,m三個參數。
此時可以計算出
w | 紅 | 黑 |
---|---|---|
正 | pq = a | (1-p)m = b |
反 | p(1-q) = c | (1-p)(1-m) = d |
通過EM算法迭代如下:
隨機p q m
迭代以下過程:
計算上面table
p = (aC(正)+cC(反))/total
q = aC(正)/(aC正+cC正)
m = bC(正)/(bC正 + dC正)
高斯混合模型
假設有上述數據,需要用混合模型來逼近,通過分析,紅色和藍色數據分別為高斯正態分佈,N(u, v)
此時可以得到如下表
紅 | 藍 | |
---|---|---|
x | pN紅(u, v) | (1-p)N藍(u, v) |
p = pN紅x/(pN紅x+(1-p)N藍x)
u = pN紅x/n
v = pN紅(x-u)^2/n
隱馬爾可夫模型
詞性轉換概率
V | N | |
---|---|---|
V | P(V|V) | P(N|V) |
N | P(V|N) | P(N|N) |
詞性到單詞的轉換概率
go | home | |
---|---|---|
V | P(go|V) | P(home|V) |
N | P(go|N) | P(home|N) |
通過EM遞歸算法,訓練以上參數,得到隱馬爾可夫模型
PLSA主題模型
主題模型
作用
- 通過抽象出文檔的主題,可以通過比較主題向量的相似性,得到不同文檔之間的相似性
- 得到主題向量,相當於把文檔去掉了噪聲干擾
- 得到文檔向量,可以進行其他模型的輸入,進而對文檔進行分類,回歸等操作,得到更豐富的結果
詞袋模型
只統計詞的頻率,不計算詞的相對位置
LSA模型
計算文檔和單詞頻率的矩陣
w1 | … | wn | |
---|---|---|---|
doc1 | 3 | … | 0 |
doc2 | 1 | … | 5 |
… | … | … | … |
docn | 0 | … | 0 |
進行奇異矩陣分解
得到A矩陣的壓縮U,U中的k則為k個主題
PLSA模型
通過分析,LSA得到的主題是跟現實無法關聯,它只是一個量,而沒有明顯的意義。
PLSA為了解決此問題,引入概率模型,先確定主題個數
然後通過構建Doc->topic的概率table,和topic->word的概率table。
然後通過EM模型,得到這兩個table的所有概率值。
進而得到文檔的主題表示
LDA模型
PLSA的缺陷是,對於預測未知的doc,無法計算此文檔的相關概率。隨着doc數量的增加,PLSA模型的參數會線性增加,從而會造成過擬合。
LDA通過引入先驗概率來克服PLSA的問題。
上下文無關句法
CFG
S -> NP VP |
---|
VP -> Vi VP -> Vt NP VP -> VP PP |
NP -> DT NN NP -> NP PP |
類似於編譯原理的上下文無法句法分析,一顆語法樹
PCFG
通過對CFG引入概率參數
S -> NP VP | 1 |
---|---|
VP -> Vi | P1 |
VP -> Vt NP | P2 |
VP -> VP PP | P3 |
NP -> DT NN | P4 |
NP -> NP PP | P5 |
評估句子
有了概率,可以計算每顆語法樹的極大似然概率,並取最大概率的樹為最終輸出
RNN
上一個狀態中間層的輸出作為下一隱層的輸入
類似於HMM的2-gram模型。t狀態受到t-1時刻輸出的影響,受t-k的輸出的k越大,影響越小
LSTM
由於RNN幾乎只受到上一時刻的影響,而忽略了久遠信息的影響。從而造成了一定的局限性。
LSTM通過引入長短記憶方法,來維持長記憶的信息。
- 遺忘門:上一刻的輸出,會乘以一個sigmod的輸出,sigmod的輸出,決定了上一時刻的輸出會保留多少到下一時刻。
- 輸入門:通過對xt進行tanh處理,並進行輸出,通過一個sigmod函數,決定t時刻有保留多少流向下一時刻
- 輸出門:把遺忘門的輸出和輸入門的輸出進行累加並進行tanh處理,並對輸出進行sigmod處理,得到下一時刻的輸入
- 遺忘門和輸入們的輸出累加後,會直接透傳到下一時刻
通過訓練核內的sigmod函數,使得LSTM可以根據不同的句子,有條件的保留和過濾歷史信息,從而達到長記憶的功能。
GRU
GRU是LSTM的簡化版,它只需要處理兩個sigmod函數的訓練,而LSTM需要三個sigmod函數的訓練,減少了訓練的參數,加快了訓練的速度,但也損失了一部分模型的複雜,在處理較複雜問題時,沒有LSTM那麼好。
Encoder-Decoder
auto-encoder-decoder
Seq2Seq
auto-encoder-decoder的特點是輸出的單元數是固定的。對於一般自然語言處理,例如機器翻譯,輸入的單元個數跟輸出單元的個數並不是一一對應的,此時就需要動態的生成輸出單元。Seq2Seq通過動態的輸出結束符,代表是否輸出完成,達到可以動態的根據輸入輸出不同的單元個數。
Attention Mechanism
seq2seq的缺點是,所有的輸入序列都轉化為單一的單元c,導致很多信息都將消失,對於不同的輸出yi,它可能依賴的輸入xj有可能不一樣,此時通過加入注意力模型,通過對xi進行softmax處理,並加入到y權重的訓練中,可以讓不同的y,有不同的x對它進行影響
softmax的輸入為輸入單元x,和上一個輸出單元y,聯合產生softmax的權重,進而對不同的序列,對於同一個x,會有不同的注意力到輸出
Memory Network 記憶網絡
Transformaer
self attention
參數說明
q = Wq(x)
k = Wk(x)
v = Wv(x)
x為詞向量
原理
通過訓練,得到權重w,從而學習到這一層的softmax注意力參數
multi-head-self-attention
R是前一次encoder的輸出
通過增加w的數量,產生多個z,並進行堆疊,通過前饋網絡,最後產生z
位置編碼
在使用self attention處理句子時,是沒有考慮單詞在句子中的位置信息的。為了讓模型可以加入考慮單詞的位置信息,加入了位置編碼的向量
計算如下:
pos為單詞在句子中的位置
i為詞向量的位置
d為句子的長度
位置編碼加上詞向量形成tranformer的輸入
transformer總體架構
編碼器的內部結構
加入了歸一化和殘差網絡
最終通過softmax,輸出每個單詞的概率,並最終輸出單詞