用IDCNN和CRF做端到端的中文實體識別
實體識別和關系抽取是例如構建知識圖譜等上層自然語言處理應用的基礎。實體識別可以簡單理解為一個序列標註問題:給定一個句子,為句子序列中的每一個字做標註。因為同是序列標註問題,除去實體識別之外,相同的技術也可以去解決諸如分詞、詞性標註等不同的自然語言處理問題。
說到序列標註直覺是會想到RNN的結構。現在大部分表現最好的實體識別或者詞性標註算法基本都是biLSTM的套路。就像Ruder在他的博客 Deep Learning for NLP Best Practices 裏面說的,There has been a running joke in the NLP community that an LSTM with attention will yield state-of-the-art performance on any task.
對於序列標註來講,普通CNN有一個劣勢,就是卷積之後,末層神經元可能只是得到了原始輸入數據中一小塊的信息。而對NER來講,整個句子的每個字都有可能都會對當前需要標註的字做出影響。為了覆蓋到輸入的全部信息就需要加入更多的卷積層, 導致層數越來越深,參數越來越多,而為了防止過擬合又要加入更多的Dropout之類的正則化,帶來更多的超參數,整個模型變得龐大和難以訓練。因為CNN這樣的劣勢,大部分序列標註問題人們還是使用biLSTM之類的網絡結構,盡可能使用網絡的記憶力記住全句的信息來對單個字做標註。
Fisher Yu and Vladlen Koltun 2015 提出了一個dilated CNN的模型,意思是“膨脹的”CNN。想法其實很簡單:正常CNN的filter,都是作用在輸入矩陣一片連續的位置上,不斷sliding做卷積。dilated CNN為這片filter增加了一個dilation width,作用在輸入矩陣的時候,會skip掉所有dilation width中間的輸入數據;而filter矩陣本身的大小仍然不變,這樣filter獲取到了更廣闊的輸入矩陣上的數據,看上去就像是“膨脹”了一般。
具體使用時,dilated width會隨著層數的增加而指數增加。這樣隨著層數的增加,參數數量是線性增加的,而receptive field卻是指數增加的,可以很快覆蓋到全部的輸入數據。
我們的模型是4個大的相同結構的Dilated CNN block拼在一起,每個block裏面是dilation width為1, 1, 2的三層Dilated卷積層,所以叫做 Iterated Dilated CNN。
IDCNN對輸入句子的每一個字生成一個logits,這裏就和biLSTM模型輸出logits之後完全一樣,放入CRF Layer,用Viterbi算法解碼出標註結果。
在biLSTM或者IDCNN這樣的深度網絡模型後面接上CRF層是一個序列標註很常見的方法。biLSTM或者IDCNN計算出的是每個詞分類的概率,而CRF層引入序列的轉移概率,最終計算出loss反饋回網絡。網上有不少相關帖子,如這裏
用IDCNN和CRF做端到端的中文實體識別