命名實體識別(Named Entity Recognition, NER)是NLP領域一個非常非常重要的方向,比如人名舟茶、地名通用性的實體識別柿冲,還有像車型名茬高、車款名這些垂直領域的實體,在這借著實體識別的案例整理下相關的模型以及如何結合這些模型與深度神經網絡實現(xiàn)效果更好的NER假抄。
相關知識梳理(HMM, MEMM, CRF)
NER怎栽、分詞都可以看作是序列的標注問題,而這一類問題比較傳統(tǒng)的方法是以以馬爾科夫模型(HMM)宿饱、條件隨機場(CRF)為代表的概率圖模型熏瞄,還有最大熵隱馬爾可夫模型(MEMM),這三者在之前都取得了非常不錯的結果谬以,近幾年隨著深度學習的興起愧驱,深度神經網絡也加入到NLP的任務中桑滩,跟CV一樣失球,網絡層起到的作用依然是特征提取的過程,深度神經網絡+概率圖模型成為處理NLP任務的一個非常好的解決方案行您。在這粗略的梳理下HMM, MEMM柠座,CRF三個概率圖模型邑雅。(MEMM 需要先理解最大熵模型,在李航老師的《統(tǒng)計學習方法》中妈经,最大熵模型是跟邏輯斯蒂回歸放到了統(tǒng)一章節(jié)中淮野,理解該節(jié)的時候不妨參照著概率圖模型中的條件隨機場一塊理解)
- HMM(generative model)
齊次馬爾科夫性:即某時刻的狀態(tài)只跟前一狀態(tài)有關吹泡;
觀測獨立性假設:t時刻的觀測結果只與該時刻的狀態(tài)有關骤星;
jieba分詞工具,其中對未收錄詞的處理就使用HMM來實現(xiàn)的爆哑,通過viterbi算法洞难,有興趣的可以看下jieba的源碼。
-
MEMM(discriminative model)
最大熵馬爾科夫模型揭朝,是對最大熵模型以及隱馬爾可夫模型的擴展队贱,最大熵模型是在符合所有約束條件下作出最不偏倚的假設,而這些約束條件就是我們所說的特征函數(特征函數的權重w是在通過拉格朗日乘子法求解過程中引入的權重)
最大熵模型潭袱,與CRF極其相似柱嫌,前者特征函數中并沒有狀態(tài)之間的相互關系
MEMM 拋棄了HMM中的觀測獨立性假設屯换,保留了齊次馬爾科夫性编丘,是對HMM的一個改進。
-
CRF(discriminative model)
對比CRF與MEMM兩個模型彤悔,會發(fā)現(xiàn)二者在歸一化存在差異嘉抓,MEMM對每一項進行局部歸一化后連乘,而CRF則是對全局歸一化晕窑,也正因為這一項改進抑片,CRF克服了標注偏移的問題。在這的特征函數f()杨赤,包括轉移特征以及狀態(tài)特征蓝丙,在tensorflow的contrib.crf.crf_log_likelihood中的實現(xiàn)方式跟上邊說的這些不太一致,后邊會有解釋望拖。
NeuroNER 網絡結構分析
假設大家對上邊的內容都已經熟悉了,在這看下NeuroNER的網絡結構
有兩點需要說一下
- 來看下tensorflow中 crf.py目標函數的實現(xiàn)挫鸽,跟《統(tǒng)計學習方法》中介紹的以及crf++中的實現(xiàn)完全不一樣说敏,為什么要這么定義呢?
#crf_sequence_score函數定義:
def crf_log_likelihood(inputs,
tag_indices,
sequence_lengths,
transition_params=None):
num_tags = inputs.get_shape()[2].value
if transition_params is None:
transition_params = vs.get_variable("transitions", [num_tags, num_tags])
sequence_scores = crf_sequence_score(inputs, tag_indices, sequence_lengths,
transition_params)
log_norm = crf_log_norm(inputs, sequence_lengths, transition_params)
# Normalize the scores to get the log-likelihood.
log_likelihood = sequence_scores - log_norm
return log_likelihood, transition_params
#crf_sequence_score函數定義:
def crf_sequence_score(inputs, tag_indices, sequence_lengths,
transition_params):
unary_scores = crf_unary_score(tag_indices, sequence_lengths, inputs)
binary_scores = crf_binary_score(tag_indices, sequence_lengths,
transition_params)
sequence_scores = unary_scores + binary_scores
return sequence_scores
tf中crf的損失函數定義使用了一元損失值丢郊、二元損失值的和盔沫,分別代表了標簽以及跳轉矩陣的誤差值医咨。在論文中有介紹[1]:
- crf 的定義中即有狀態(tài)特征函數,又有轉移特征函數架诞,但是在lstm+crf的模塊中沒有體現(xiàn)出來拟淮? 在看NeuroNER的時候也按照之前的理論去理解,一直不吻合谴忧。其實在項目中的crf layer很泊,并不是完整的crf過程,在前邊的NN網絡中沾谓,包含了特征函數的自學習過程委造!除此外,轉移概率矩陣也是通過模型主動學習得到均驶,屬于模型輸出昏兆,稱之為full-rank NeuroNER。個人感覺NeuroCRF整體的思路更貼近HMM妇穴,最終將模型拆分成為發(fā)射概率以及轉移概率爬虱,區(qū)別,其一是NeuroCRF針對條件概率建模[p(y|x)]腾它,其二是模型的輸出—發(fā)射概率矩陣其實也包含了上下文信息跑筝,而這正好是HMM兩個本質假設之一的觀測獨立性假設!
low-rank NeuroNER: 用NN來學習label emissions[4]
full-rank NeuroNER: 用NN來學習transitions携狭,以及emissions
在這兩篇論文中找到了解釋[2][3]继蜡, 通過一些變換將條件概率轉化為emission function 與 transition function的乘積形式,最終的公式形式中逛腿,G為lstm網絡的outputs, F為狀態(tài)之間的跳轉概率矩陣稀并。這個地方也不難理解,作者通過lstm神經網絡去自動的學習特征函數单默,并且由于引入了循環(huán)神經網絡碘举,發(fā)射概率也充分包含了上下文信息。
結束
NLP不是主要的方向搁廓,最近用到了所以多關注了一下引颈,有一些地方沒有很好的理解,但大致的思路應該就是這樣了境蜕,后邊是以上四篇論文的出處蝙场,感興趣的可以看下。
【1】Lample G, Ballesteros M, Subramanian S, et al. Neural architectures for named entity recognition[J]. arXiv preprint arXiv:1603.01360, 2016.
【2】Rondeau M A, Su Y. Full-rank linear-chain neurocrf for sequence labeling[C]//Acoustics, Speech and Signal Processing (ICASSP), 2015 IEEE International Conference on. IEEE, 2015: 5281-5285.
【3】Rondeau M A, Su Y. LSTM-Based NeuroCRFs for Named Entity Recognition[C]//INTERSPEECH. 2016: 665-669.
【4】Huang Z, Xu W, Yu K. Bidirectional LSTM-CRF models for sequence tagging[J]. arXiv preprint arXiv:1508.01991, 2015.
歡迎一塊交流討論粱年,文中有錯誤的地方售滤,還請指正,謝謝~
email: bidai541@foxmail.com