【NLP-NER】命名實體識別中最常用的兩種深度學習模型
- 2019 年 10 月 6 日
- 筆記
命名實體識別(Named Entity Recognition,NER)是NLP中一項非常基礎的任務。NER是資訊提取、問答系統、句法分析、機器翻譯等眾多NLP任務的重要基礎工具。
上一期我們介紹了NER的基本概念,大致介紹了NER常用的模型。本期我們詳細介紹目前NER最常用的兩種深度學習模型,LSTM+CRF和Dilated-CNN。
作者&編輯 | 小Dream哥
1 LSTM+CRF
在NLP領域,有那麼一段時間,LSTM是「最紅」的特徵抽取器,自然,NER中也開始引入LSTM來進行特徵抽取。
LSTM我就不再做過多的介紹,其原理在我的一篇文章中有詳細的介紹,讀者可以點擊如下的鏈接回顧:

如上圖所示,是用雙向LSTM+CRF進行命名實體識別的模型結構圖。
我們來好好分析一下這個模型,看數據的流轉和各層的作用。
1.embedding layer 將中文轉化為字向量,獲得輸入embedding
2.將embedding輸入到BiLSTM層,進行特徵提取(編碼),得到序列的特徵表徵,logits。
3.logits需要解碼,得到標註序列。將其輸入到解碼CRF層,獲得每個字的序列。
總結一下,該模型的重點其實有兩個:
1. 引入雙向LSTM層作為特徵提取工具,LSTM擁有較強的長序列特徵提取能力,是個不錯的選擇。雙向LSTM,在提取某個時刻特徵時,能夠利用該時刻之後的序列的資訊,無疑能夠提高模型的特徵提取能力。
2. 引入CRF作為解碼工具。中文輸入經過雙向LSTM層的編碼之後,需要能夠利用編碼到的豐富的資訊,將其轉化成NER標註序列。通過觀察序列,預測隱藏狀態序列,CRF無疑是首選。
2 ID-CNN+CRF
膨脹卷積可能有很多朋友還不是很熟悉,這裡先做一個簡單的介紹。
Dilated/Atrous Convolution(中文叫做空洞卷積或者膨脹卷積))或者是Convolution with holes。從字面上就很好理解,就是在標準的卷積里注入空洞,以此來增加感受野。

Convolution with 3*3 kernel

Dilated Convolution with 3*3 kernel
如上圖所示,相比原來的正常卷積,膨脹卷積多了一個超參數,稱之為膨脹率(dilation rate),指的是kernel的間隔數量(例如,正常的卷積是膨脹率是1)。
「膨脹」的好處是,不做池化,不損失資訊的情況下,增大了感受野,讓每個卷積輸出都包含較大範圍的資訊。
《Fast and Accurate Entity Recognition with Iterated Dilated Convolutions》一文中提出在NER任務中,引入膨脹卷積,一方面可以引入CNN並行計算的優勢,提高訓練和預測時的速度;另一方面,可以減輕CNN在長序列輸入上特徵提取能力弱的劣勢。
具體使用時,dilated width會隨著層數的增加而指數增加。這樣隨著層數的增加,參數數量是線性增加的,而感受野卻是指數增加的,這樣就可以很快覆蓋到全部的輸入數據。

如上圖所示,模型是4個大的相同結構的Dilated CNN block拼在一起,每個block裡面是dilation width為1, 1, 2的三層Dilated卷積層,所以叫做 Iterated Dilated CNN。
IDCNN對輸入句子的每一個字生成一個logits,這裡就和BiLSTM模型輸出logits之後完全一樣,再放入CRF Layer解碼出標註結果。
總結
LSTM+CRF和ID-CNN+CRF兩種模型其實都是同一個架構:深度學習特徵提取+CRF解碼。現在絕大部分的NER任務都是採用這樣的一套框架。本文詳細的介紹了上述兩種方法的模型結構和本質,具體的實現和程式碼,包括數據預處理,模型搭建,訓練,部署等在我們的知識星球里都有詳細的介紹