天天看點

中文實體抽取(NER)論文筆記《Chinese NER Using Lattice LSTM》

原文連結

本文發表于自然語言處理領域頂級會議ACL 2018

原文代碼實作

摘要

本文提出了一種用于中文NER的LSTM的格子模型,與傳統使用字向量的模型相比,本文提出的模型顯式地利用了字序列之間的關系。與傳統使用詞向量的模型相比,本文提出的模型能夠很好的避免分詞錯誤帶來的影響。

介紹:

作為資訊抽取任務的基本步驟,NER一直受到NLP學界的廣泛關注。傳統方法一般把NER看作是一個序列标記問題,同時預測序列中的實體邊界以及實體所屬的類别。

中文NER問題很大程度上取決于分詞的效果,比如實體邊界和單詞的邊界在中文NER問題中經常是一樣的。是以在中文NER問題中,學者們通常先對文本進行分詞然後再預測序列中單詞的類别。這樣一來會導緻一個問題,即在分詞中造成的錯誤會影響到NER的結果。

那麼基于字向量的模型是不是就完美解決上述問題了呢?顯然不會,因為如果單純采用字向量的話會導緻我們拆開了很多并不應該拆開的詞語,進而丢失了它們本身的内在資訊(比如“上海”這個詞如果拆成字向量就成了“上”和“海”,這兩個字的單獨含義明顯與它們組合起來的詞的含義大相庭徑)。

為了解決這個問題,本文提出了一種新型的格子結構(lattice structure),它能夠将單詞本身的含義加入基于字向量的模型中(比如LSTM-CRF)。

中文實體抽取(NER)論文筆記《Chinese NER Using Lattice LSTM》

如上圖所示,格子結構最終會包含一個我們自動學出來的詞典裡的詞(比如圖中的“南京”,“市長”,“長江”,“大橋”,“南京市”,“長江大橋”),這樣一來,我們的模型就會避免一些使用字向量造成的歧義,比如上圖如果按照一個個字來組合的話還能組成“南京”,“市長”,“江大橋”這樣的組合,由于“江大橋”不在詞格中,我們的模型就很好的避免了這種歧義。

如上圖所示,如果圖中每條路徑都去考慮的話,那麼路徑的個數是指數級增長的,是以我們利用模型來控制從頭到尾的資訊流。

中文實體抽取(NER)論文筆記《Chinese NER Using Lattice LSTM》

如上圖所示,模型中的LSTM門結構會控制每條路徑到其它路徑的資訊流。

與其它模型相比,本文提出的模型老牛逼了。

模型

本文提出的模型是基于在英文NER領域取得了最佳效果的LSTM-CRF模型改進的。

首先,我們以字為基本機關定義一個輸入句子s為:

s=c1,c2,...,cm s = c 1 , c 2 , . . . , c m

其中 cj c j 為s的第 j j 個字

s又可以用詞為基本機關被表示為:

s=w1,w2,...,wns=w1,w2,...,wn

其中 wi w i 為s的第 i i 個詞

我們設t(i,k)t(i,k)為句子的第 i i 個詞的第kk個字在句子中的位置,比如“南京市,長江大橋”這句話中的“大”字,我們就有 t(2,3)=7 t ( 2 , 3 ) = 7 ,即“大”這個字是句子第2個詞的第3個字,并且它在句子中的位置為第7個字。

接下來我們來比較三種模型的特點

  1. 基于字向量的模型
    中文實體抽取(NER)論文筆記《Chinese NER Using Lattice LSTM》

    如上圖所示,是一個基于字序列 c1,c2,...,cm c 1 , c 2 , . . . , c m 的模型,其中每一個字 cj c j 被表示為: xcj=ec(cj) x j c = e c ( c j )

    其中 ec e c 是embedding層的權重矩陣,雙向LSTM中每個方向每個時間點對應輸入 x1,x2,...,xm x 1 , x 2 , . . . , x m 都會有一個隐含層狀态,即 hc1→,hc2→,...,hcm−→ h 1 c → , h 2 c → , . . . , h m c → ,和 hc1←,hc2←,...,hcm←− h 1 c ← , h 2 c ← , . . . , h m c ←

    那麼隐含層的總輸出就可以表示為: hcj=[hcj→;hcj←] h j c = [ h j c → ; h j c ← ]

    上述公式的含義就是将 hcj→ h j c → 和 hcj← h j c ← 給concat(拼接)起來

  2. 基于詞向量的模型
    中文實體抽取(NER)論文筆記《Chinese NER Using Lattice LSTM》
    如上圖所示,原理和字向量的大同小異,就是将輸入由字序列改成了詞序列而已,本文不做贅述。
  3. 詞格模型(Lattice Model)
    中文實體抽取(NER)論文筆記《Chinese NER Using Lattice LSTM》

    如圖所示,和基于字向量的模型有些不同, ccj c j c 的計算考慮到了詞格中的詞語序列 wdb,e w b , e d ,具體而言,每個 wdb,e w b , e d 都會被embedding表示為:

    xwb,e=ew(wdb,e) x b , e w = e w ( w b , e d )

    其中 ew e w 是embedding矩陣。此外,word cell cwb,e c b , e w 被用來表示從句首開始的每一個 xwb,e x b , e w 的遞歸狀态。 cwb,e c b , e w 可以由如下公式計算: ⎡⎣⎢⎢⎢iwb,efwb,ec̃ wb,e⎤⎦⎥⎥⎥=⎡⎣⎢⎢σσtanh⎤⎦⎥⎥(WwT[xwb,ehcb]+bw) [ i b , e w f b , e w c ~ b , e w ] = [ σ σ t a n h ] ( W w T [ x b , e w h b c ] + b w )

    cwb,e=fwb,e⨀ccb+iwb,e⨀c̃ wb,e c b , e w = f b , e w ⨀ c b c + i b , e w ⨀ c ~ b , e w

    其中 iwb,e i b , e w 和 fwb,e f b , e w 是LSTM的輸入和遺忘門的集合。在詞語的粒度上沒有設定輸出門,因為本文的模型本質上是一個基于字向量的模型。

    有了詞格 cwb,e c b , e w 之後,每個隐含層的 ccj c j c 的計算就會受很多路徑上的資訊流的影響,比如途中的 cc3 c 3 c 就受 xc3 x 3 c 和 cw1,3 c 1 , 3 w 以及上一個隐含層輸出的同時影響。

    本文将所有的 cwb,e c b , e w 和cell cce c e c 連接配接起來,我們使用一個額外的門 icb,e i b , e c 來控制 cwb,e c b , e w 到 ccb,e c b , e c 的資訊流:

    中文實體抽取(NER)論文筆記《Chinese NER Using Lattice LSTM》
    于是 ccj c j c 的計算公式可以表示為: (有點看不懂了,混亂中) ( 有 點 看 不 懂 了 , 混 亂 中 )
    中文實體抽取(NER)論文筆記《Chinese NER Using Lattice LSTM》
    上式中 icb,j i b , j c 和 icj i j c 被歸一化成了 αcb,j α b , j c 和 αcj α j c ,故所有 αcb,j α b , j c 的和為1,所有 αcj α j c 的和也為1,歸一化公式如下:
    中文實體抽取(NER)論文筆記《Chinese NER Using Lattice LSTM》
    最後一個隐含層的輸出 hcj h j c 的計算公式為: hcj=ocj⨀tanh(ccj) h j c = o j c ⨀ t a n h ( c j c )

在得到所有隐含層的輸出 h1,h2,...,hτ h 1 , h 2 , . . . , h τ 之後(其中 τ τ 為一句話中字的個數),預測的label序列的機率 y=l1,l2,...,lτ y = l 1 , l 2 , . . . , l τ 可以表示為:

中文實體抽取(NER)論文筆記《Chinese NER Using Lattice LSTM》

其中 y′ y ′ 代表任意的label序列, Wl′iCRF W C R F l i ′ 是模型中針對每個 li l i 的參數, b(li−1,li)CRF b C R F ( l i − 1 , l i ) 是從 li−1 l i − 1 到 li l i 的bias

最後再使用first-order Viterbi算法找到機率最大的序列,就是最終的輸出。

在給定人工标記的訓練資料 {(si,yi)}∣∣Ni=1 { ( s i , y i ) } | i = 1 N ,我們在句子粒度上定義的損失函數(使用了L2正則)可以表示為:

中文實體抽取(NER)論文筆記《Chinese NER Using Lattice LSTM》

繼續閱讀