詞
詞是自然語言處理的基本單位,自動詞法分析就是利用計算機對詞的形態進行分析,判斷詞的結構和類別。
詞性(Part of Speech)是詞匯最重要的特性,鏈接詞匯和句法
詞的分類
屈折語:形態分析
分析語:分詞
黏著語:分詞+形態分析
基本任務
單詞識別&形態還原
考慮特殊的單詞:prof. 縮寫 不規則變形
形態還原:時態 年代 序數詞 貨幣符號 百分號
合成詞還原 seven-year-old
形態分析的一般方法
- 查詞典
- 根據不同的情況查找相對應的規則對單詞進行處理,如果在字典找得到該單詞的原型,則結束,如果找不到,就按照未登錄詞處理
- 完全陌生的詞,按照未登錄詞處理
漢語自動分詞
漢語分詞問題
單字詞與詞素的區分
詞與短語的區分
切分歧義
交集型歧義
中國人/為了/勝利
中國/人為/了/勝利
交集串的集合稱為叫交集串鏈,交集串個數稱為鏈長
e.g. 中國產品質量:中國/國產/產品/品質/質量 交集串為:國,產,品,質 ,交集串鏈為{國,產,品,質},鏈長為 4
組合型歧義
門/把/手/弄/壞/了
門/把手/弄/壞/了
未登錄詞的識別
- 人名,地名,組織名
- 新出現的詞匯
漢語分詞的基本規則:合并
成語:馬馬虎虎
定量結構:十三區
定名組合:六點
副詞片語:或多或少
重疊結構:高高低低
不可拆分詞:進出口
輔助規則:切分
- 有明顯間隔符或語義分隔的
- 太過復雜,正反問句,動詞帶雙音節補語:石油/化工/業,討論/清楚,喜歡/不/喜歡
- 專有名詞帶普通名詞:京滬/鐵路
分詞,標注的評價方法
測試:封閉測試/開放測試
評價指標:
正確率:測試結果中正確的切分占系統總輸出的比例: P = n N × 100 % P= \frac{n}{N}\times100\% P=Nn?×100%
召回率:系統輸出的答案里面正確的個數 5 占總正確的個數,與文本分類里的 Recall 一樣: R = n N × 100 R= \frac{n}{N}\times 100% R=Nn?×100
F 測度:同上一章
漢語分詞的基本算法
有詞典切分/無詞典切分
基于規則/基于統計
最大匹配法
-有詞典切分,機械切分
正向最大匹配/逆向最大匹配/雙向最大匹配
e.g.他是研究生物的一位科學家,假設詞典當中的最長詞匯長度為 7
正向最大匹配:
先進行最大長度的切分:他是研究生物的/一位化學家
隨后逐漸縮小確定第一個切分詞:他/是研究生物的一位化學家
然后接著上一個切分的詞繼續:他/是/研究生物的一位化學家
不斷循環,可以得到:他/是/研究生/物/的/一/位/化學家
逆向最大匹配:
他/是/研究/生物/的/一/位/化學家
可以看出來正向匹配和逆向匹配之間存在著差別
優缺點
程序簡單,但歧義的消解能力弱,切分準確率在 95% 左右。
最少分詞法(最短路徑法)
記待切分詞串為 S = c 1 c 2 . . . c n S=c_1c_2...c_n S=c1?c2?...cn?,其中 c 均為單個的字,n 為串的長度且大于等于 1,建立一個節點數為 n+1 的切分有向無環圖:
在相鄰節點間創建有向邊,邊對應詞,如果 w = c i . . . c j w = c_i...c_j w=ci?...cj?為一個單詞,則建立有向邊(Vi-1,Vj),重復建立并查看是否新詞,最后直到考慮單詞的長度上限停止,從所有路徑中選覆蓋了所有節點的盡可能長的路徑作為分詞結果
e.g. 他說的確實對 可以分為
他/說的/確實/對
他/說/的確/實/對
seg=4<seg=5,選擇第一個分詞
優缺點
簡單方便,需要的資源少,但是對于多條最短路徑和長句子時的復雜度表現并不好
基于語言模型的分詞方式
對于一個待切分的句子 S,W 是一種可能的切分: W ? = arg ? w max ? p ( W ∣ S ) = arg ? w max ? p ( W ) P ( S ∣ W ) W^* = \arg\limits_w \max p(W|S) = \arg\limits_w \max p(W)P(S|W) W?=warg?maxp(W∣S)=warg?maxp(W)P(S∣W),其中 pW 為語言模型,另一個則為生成模型,用了樸素貝葉斯的理論
基于 HMM 的分詞方式
基于字標注的分詞方式
將分詞過程看成是字的分類問題,每個字具有自己固定的詞位:如詞首(B)詞中(M)詞尾(E)或單獨成詞(S),使得處理未登錄詞也可以按照字的方向去看待
生成式與判別式
總的來說,通過大量數據構建樣本的概率密度模型,并以此推理,就是生成式,建立在貝葉斯與統計基礎上;如果直接使用觀測值判斷模型,而不考慮樣本如何,那么就屬于對后驗概率建模的判別式
未登錄詞的識別
困難
未登錄詞的識別與描述規則太多;新出現的詞速度太快
對于姓名的識別
- 名字用字范圍廣,分布松散,規律不明顯
- 姓氏和名字可以拆開使用
- 許多名字中的字可以與其他字關聯形成交集串
- 缺少文義分隔
e.g. 祝/賀老板/生意/興隆 or 祝賀/老板/生意/興隆
主要采用姓名庫進行識別,并在一句中對可能出現姓名的概率估值進行計算,完成對姓名存在性的判斷
計算概率估值
Cname = Xmn
F ( X ) = X 作為姓氏 X 出現的總次數 F(X) = \frac{X 作為姓氏}{X 出現的總次數} F(X)=X出現的總次數X作為姓氏?
F ( m ) = m 作為名字中的第二個字 m 出現的總次數 F(m) = \frac{m 作為名字中的第二個字}{m 出現的總次數} F(m)=m出現的總次數m作為名字中的第二個字?
F ( n ) = n 作為名字中的第三個字 n 出現的總次數 F(n) = \frac{n 作為名字中的第三個字}{n 出現的總次數} F(n)=n出現的總次數n作為名字中的第三個字?
P ( C n a m e ) = F ( X ) F ( m ) F ( n ) P(Cname) = F(X)F(m)F(n) P(Cname)=F(X)F(m)F(n)
f = ln ? P ( C n a m e ) f = \ln P(Cname) f=lnP(Cname)
確定閾值:
姓氏 X 構成名字的最小閾值:
T m i n ( X ) = F ( X ) × M i n ( F ( m ) × F ( n ) ) T_{min}(X) = F(X)\times Min(F(m)\times F(n)) Tmin?(X)=F(X)×Min(F(m)×F(n))
通過訓練得到 X 的該閾值 T,當 f>T 時,則當前識別的漢字串為中文姓名
使用其他修飾規則
如對于維吾爾族中會出現的點符,可以通過該符號來進一步判斷
對于地名機構名識別——建立對應庫(略)
基于神經網絡的實體識別方法
主要為 RNN(LSTM),此處不展開,詳細請在 RNN 相關章節查看
詞性標注
主要目的:消除詞性兼類的問題
在英文中:flies(動詞三單,名次復數)
在中文中:好(形容詞,副詞,動詞),教育(名次,動詞)
詞性標注的一般原則
標準性:使用普遍認可的分類標準與符號集
兼容性:與已有資源盡量一致
可擴展性:方便擴充與修改
詞性標注的方法
- 基于規則的詞性標注方法
- 基于統計模型(學習)的詞性標注方法:HMM,CRF,NN
- 規則和統計方法相結合的詞性標注方法:TBL
HMM 隱馬爾可夫模型
學習過程
給定訓練數據: ( O i , Q i ) (O_i,Q_i) (Oi?,Qi?),O 為詞序列,Q 為詞性序列
訓練出函數 f(O),從 O 映射到 Q,即為詞序列 O 找到最優的 Q
arg ? max ? Q P ( Q ∣ O ) = arg ? max ? Q P ( O ∣ Q ) P ( Q ) \arg \max\limits_Q P(Q|O) = \arg \max\limits_Q P(O|Q)P(Q) argQmax?P(Q∣O)=argQmax?P(O∣Q)P(Q)
其中 P ( O ∣ Q ) = P ( o 1 , . . . , o n ∣ q 1 , . . . q n ) = ∏ i = 1 n P i ( o i ∣ q i ) P(O|Q) = P(o_1,...,o_n|q_1,...q_n)=\prod\limits_{i=1}^nP_i(o_i|q_i) P(O∣Q)=P(o1?,...,on?∣q1?,...qn?)=i=1∏n?Pi?(oi?∣qi?)
P(Q)則為語言模型,可以使用我們先前提到的 n-gram 計算:
P ( Q ) = P ( q 1 , . . . , q n ) = P ( q 1 ) P ( q 2 ∣ q 1 ) . . . P ( q n ∣ q n ? 1 ) P(Q)=P(q_1,...,q_n)=P(q_1)P(q_2|q_1)...P(q_n|q_{n-1}) P(Q)=P(q1?,...,qn?)=P(q1?)P(q2?∣q1?)...P(qn?∣qn?1?)
這就是隱馬爾可夫模型的原型
詞性的馬爾可夫鏈:
狀態:t 時刻的狀態為 q t q_t qt?
轉移概率: a i j a_{ij} aij?表示從狀態 i 轉移到 j 的轉移概率
a i j = P ( q i = j ∣ q t ? 1 = i ) a_{ij} = P(q_i=j|q_{t-1} = i) aij?=P(qi?=j∣qt?1?=i)
∑ j = 1 N a i j = 1 \sum\limits_{j=1}^Na_{ij}=1 j=1∑N?aij?=1
起始狀態:初始狀態的概率向量 π = ( π 1 , . . . , π n ) \pi = (\pi_1,...,\pi_n) π=(π1?,...,πn?),表示各狀態作為初始狀態的概率
之所以使用隱馬爾可夫,是因為馬爾可夫只能處理表層的詞序列,但是沒法處理隱層的詞性序列,因此拓展出了隱馬爾可夫
隱馬爾可夫的三個基本問題:
估算問題(計算產生觀測序列的概率),解碼問題(計算最優的狀態序列),參數學習
觀測的似然
e.g.已知每天吃冰淇淋的個數與天氣的冷熱程度掛鉤
求解觀測到 ICE CREAM 個數在 3 天里分別為 3-1-3 的概率有多大
P ( O ) = ∑ P ( O ∣ Q ) P ( Q ) P(O) = \sum P(O|Q)P(Q) P(O)=∑P(O∣Q)P(Q)
對于某個給定狀態時觀測的似然 P(O|Q)
如給出天氣序列 H-H-C,即計算 P ( 313 ∣ H H C ) P(313|HHC) P(313∣HHC)
由 P ( O ∣ Q ) = P ( o 1 , . . . , o n ∣ q 1 , . . . q n ) = ∏ i = 1 n P i ( o i ∣ q i ) P(O|Q) = P(o_1,...,o_n|q_1,...q_n)=\prod\limits_{i=1}^nP_i(o_i|q_i) P(O∣Q)=P(o1?,...,on?∣q1?,...qn?)=i=1∏n?Pi?(oi?∣qi?)
可得 P ( 313 ∣ H H C ) = P ( 3 ∣ H ) × P ( 1 ∣ H ) × P ( 3 ∣ C ) P(313|HHC) = P(3|H)\times P(1|H)\times P(3|C) P(313∣HHC)=P(3∣H)×P(1∣H)×P(3∣C)
再計算語言模型 P(Q)
P ( H H C ) = P ( H ∣ S T A R T ) × P ( H ∣ H ) × P ( C ∣ H ) P(HHC)=P(H|START)\times P(H|H)\times P(C|H) P(HHC)=P(H∣START)×P(H∣H)×P(C∣H)
然后綜合到一起:
P ( 313 , H H C ) = P ( 3 ∣ H ) × P ( 1 ∣ H ) × P ( 3 ∣ C ) × P ( H ∣ S T A R T ) × P ( H ∣ H ) × P ( C ∣ H ) P(313,HHC) = P(3|H)\times P(1|H)\times P(3|C)\times P(H|START)\times P(H|H)\times P(C|H) P(313,HHC)=P(3∣H)×P(1∣H)×P(3∣C)×P(H∣START)×P(H∣H)×P(C∣H)
最后對所有天氣狀態序列求和
但是我們可以看到這樣效率非常低,所以我們引入前向算法和后向算法
前向算法:格柵
.
后向算法
β t ( i ) = P ( o t , . . . , o T ∣ q t = i , λ ) \beta_t(i) = P(o_t,...,o_T|q_t = i,\lambda) βt?(i)=P(ot?,...,oT?∣qt?=i,λ)
與前向算法不同之處在于 q t = j q_t = j qt?=j是推導對象還是已知數據,后向算法往前推導
初始化: β T + 1 = 1 , 1 ≤ i ≤ N \beta_{T+1}=1,1\le i\le N βT+1?=1,1≤i≤N
最終得到: P ( O ∣ λ ) = ∑ i = 1 N π i β 1 ( i ) P(O|\lambda) = \sum\limits_{i=1}^N\pi_i\beta_1(i) P(O∣λ)=i=1∑N?πi?β1?(i)
前向算法與后向算法結合可以得到: P ( O ∣ λ ) = ∑ i = 1 N α t ( i ) β t ( i ) , 1 ≤ t ≤ T + 1 P(O|\lambda) = \sum\limits_{i=1}^N\alpha_t(i)\beta_t(i),1 \le t \le T+1 P(O∣λ)=i=1∑N?αt?(i)βt?(i),1≤t≤T+1
解碼
已知 Ice Cream 觀測序列為 313,且擁有 HMM 的參數 A(狀態轉移矩陣)B(概率發射矩陣),找到 313 最可能對應的天氣狀態序列(隱層序列)
一種方法:對于一個觀測序列 O 計算 P(Q|O),選取概率最大值對應的狀態序列
Viterbi Algorithm
參數學習
如何找到 HMM 中最好的 A和 B: arg ? max ? λ P ( O t r a i n i n g ∣ λ ) \arg \max\limits_\lambda P(O_{training}|\lambda) argλmax?P(Otraining?∣λ)
可以分為有監督和無監督兩種
有監督
基于已知的正確答案,統計狀態的轉移,與狀態到觀測的發射
無監督
基于不完全的數據來進行估計,很難得到解析解,但是可以通過 Baum-Welch (Forward-Backward) 局部最大化算法來逼近
前向-后向算法
隨機取一個 lambda,可以計算出似然概率 P(O|lambda)
通過計算,可以看到哪些轉移與發射的使用率最高,相對應的提高他們的概率,可以獲得新的 lambda,就可以得到新的似然概率,不斷逼近局部最優解
(沒看明白)
兩類概率
TAG 之間的轉移概率
e.g.冠詞后面即可以接形容詞,也可以接名詞
極大似然估計法,通過有標記預料估計 P(NN|OT)