部分的アノテーションが利用可能な固有表現抽出モデル Fuzzy-LSTM-CRFの実装

概要

固有表現タスクにおいて重要な役割を持つCRF(条件付き確率場)ですが,CRFでは全ての単語に対してラベルが付けられている必要があるため,アノテーションコストが高くなる傾向があります.そこで,今回は部分的アノテーションコーパスを利用可能な固有表現抽出モデルFuzzy-LSTM-CRFを実装し,その性能について実験してみました.

CRFとFuzzy CRF

まず通常のCRFとFuzzy CRF(Partial CRF)の違いについて説明します.

通常のCRFでは,系列\boldsymbol{X}=(x_1, \cdots, x_n)に対応するラベル列\boldsymbol{y}=(y_1, \cdots, y_n)の確率p(\boldsymbol{y} | \boldsymbol{x})が最大になるように学習を行います.

この確率は系列\boldsymbol{X}に対応するラベル列\boldsymbol{y}のスコアをs(\boldsymbol{X},\boldsymbol{y})と定義すると以下のように定義されます.

f:id:kajyuuen:20190714204241p:plain

損失関数は上式から対数を取った

f:id:kajyuuen:20190714204618p:plain

となり,これが最大になるように学習を行うのが通常のCRFです.

しかし,この損失関数ではラベル列\boldsymbol{y}=(y_1, \cdots, y_n)に少しでも欠損があると学習を行うことが出来ません.そこでFuzzy CRFでは欠損しているラベルに対して取りうる全ての経路\boldsymbol{Y_{possible}}について計算をすることで学習を行います.

f:id:kajyuuen:20190714204721p:plain

以上のように損失関数を定義することでラベル列が不完全であっても学習を行うことが可能になります.ちなみにラベル列が完全のときはCRFと同じ損失関数を持ちます.

下の論文にて解説,定義されています.

BiLSTM-CRF

Word embeddingsとCharacters embeddingsをBi-LSTMに投入します.その出力を更にCRFに投入し最適なラベル列を探索することで固有表現抽出を行うモデルです.

f:id:kajyuuen:20190714220608p:plain

Neural Architectures for Named Entity Recognitionより引用

今回はこのモデルをベースとし,欠損したデータを学習出来るようにCRFの代わりにFuzzy CRFを適用させました.

実装

PyTorchにてFuzzy-LSTM-CRFとLSTM-CRFの実装を行っています.

github.com

評価

データセット

今回はCoNLL2003の英語コーパスから各タグについて50%づつラベルを欠損させて学習を行いました.欠損させた結果は以下の通りです.

TYPE:O,             before 169578,      after 84790
TYPE:ORG,           before 6321,        after 3161
TYPE:MISC,          before 3438,        after 1720
TYPE:PER,           before 6600,        after 3301
TYPE:LOC,           before 7140,        after 3571

結果

  • Word embedding dim: 100
  • Character embedding dim: 25
  • エポック数: 50

以上のハイパーパラメータにて学習を行いました.

           precision    recall  f1-score   support

      PER    0.93029   0.88312   0.90609      1617
      LOC    0.89381   0.88309   0.88842      1668
      ORG    0.84442   0.81036   0.82704      1661
     MISC    0.68154   0.80484   0.73808       702

micro avg    0.85837   0.85198   0.85516      5648
macro avg    0.86335   0.85198   0.85674      5648

欠損ラベルなしでLSTM-CRFを学習した場合は以下の通りになりました.

           precision    recall  f1-score   support

      PER    0.95997   0.94929   0.95460      1617
      LOC    0.90504   0.93705   0.92077      1668
      ORG    0.89223   0.85731   0.87442      1661
     MISC    0.80056   0.81197   0.80622       702

micro avg    0.90380   0.90156   0.90268      5648
macro avg    0.90401   0.90156   0.90259      5648

フルアノテーションと比べても,そこまで抽出性能が劣化していないことがわかります.

参考

実装の際には以下の論文とリポジトリを参考にさせていただきました.