非固有表現タグを学習に用いない固有表現抽出モデル: Better Modeling of Incomplete Annotations for Named Entity Recognitionを読んで実装しました

前回に引き続き,部分的アノテーションコーパスが使える固有表現抽出手法の紹介と実装です.

概要

Better Modeling of Incomplete Annotations for Named Entity Recognitionが読んだ論文になります.著者実装はこちら

この論文では部分的アノテーションコーパスに対して,学習を行えるモデルの提案を行っています.

タグ欠損における問題

固有表現抽出のタスクにおいて,ラベルが欠損している教師データを用いて学習を行う手法はいくつか提案されていますが,今までの研究でのラベル欠損の仮定には2つ問題があると主張しています.

問題1

アノテータは基本的に固有表現の一部にだけアノテーションを行うことはない. 例えば「田中太郎」という人名に対して「田中」にだけアノテーションされることはなく,必ず「田中太郎」としてアノテーションされると主張しています.

つまり下図のA.1のようにラベルが欠損することは無いということです.

問題2

アノテータは固有表現にアノテーションするようにだけ指示されていることが多く,Oタグ(固有表現で無いことを示すタグ)を能動的に付けないということ. つまり著者はOタグは学習に使うことが出来ないと考えています.

f:id:kajyuuen:20190818163937p:plain Better Modeling of Incomplete Annotations for Named Entity Recognitionより引用

これらの問題を踏まえた上で著者はA.3のようにラベルが欠損すると仮定し,このような教師データに対するアプローチを示しています.

ちなみに後の性能評価でも分かりますがA.3のような欠損をしている場合,前回紹介したFuzzy-LSTM-CRFではOタグを学習時に考慮出来なくなるため性能がとても悪くなります.

手法

一般的なCRFの損失関数は以下のように定義されます.

f:id:kajyuuen:20190818183543p:plain

ここで欠損が無いラベル列の集合を\boldsymbol{D},欠損があるラベル列を \boldsymbol{y}^{(i)} _ p と定義し,\boldsymbol{y}^{(i)} _ pを何らかの方法で欠損を埋めたラベル列の集合をC(\boldsymbol{y}^{(i)} _ p)とします.

すると先程のCRFの損失関数は以下のように書き換えることが出来ます.

f:id:kajyuuen:20190818182021p:plain

この確率分布qを求める方法として著者はHardとSoftの2種類の手法を提案しています. Hardでは最も通る可能性が高いラベル列に対してのみ確率を割り当て,Softでは取りうる全てのラベル列に対して確率を計算し割り当てを行います.

Hardの具体的な動きについては以下の通りです.

  1. 教師データをk分割する
  2. k分割した教師データの欠損ラベルにOタグを割り当て,分割したデータ毎にモデルを学習する
  3. k-1番目の教師データを学習したモデルを用いて,k番目の教師データのラベルを予測し付与する.この際最初から付与されていたラベルは必ず通るようにビタビアルゴリズムを適用する
  4. ラベリングしたデータを元にk個のモデルを再び同じように学習する
  5. 3と4を複数回繰り返した後,ラベル付けが終わった教師データを全て用いて新しくモデルを学習する

ちなみに定義した損失関数においてq=1とすると,Fuzzy-LSTM-CRFの損失関数と一致します.

実装

著者が論文中で提案したHard methodと比較対象であるSimple(LSTM-CRF), Fuzzy-LSTM-CRFを以下のリポジトリにて実装しました.

github.com

(リポジトリ名と内容に違いが出てきたのでどうにかしたいですね)

評価

データセットにはCoNLL-2003を用い,論文と同じように固有表現の五割をランダムに,全てのOタグを欠損させた状態で学習を行いました. ハイパーパラメータも論文に沿ってエポック数30回, k分割した教師データに対する学習とラベル付与(3と4の部分)は10回繰り返しました.

Hard method

           precision    recall  f1-score   support

      PER    0.84393   0.90291   0.87242      1617
      LOC    0.82902   0.86331   0.84581      1668
     MISC    0.78840   0.65812   0.71739       702
      ORG    0.76605   0.74714   0.75648      1661

micro avg    0.81139   0.81498   0.81318      5648
macro avg    0.80972   0.81498   0.81120      5648

Simple

欠損しているタグをOタグと仮定し,LSTM-CRFにて学習したモデルです.論文中で提案されています.

           precision    recall  f1-score   support

      LOC    0.93319   0.78717   0.85398      1668
      PER    0.98507   0.16327   0.28011      1617
      ORG    0.94824   0.48525   0.64198      1661
     MISC    0.89098   0.33761   0.48967       702

micro avg    0.93873   0.46388   0.62093      5648
macro avg    0.94722   0.46388   0.58205      5648

Fuzzy-LSTM-CRF

論文中ではLSTM-M-CRFとして紹介されています.

           precision    recall  f1-score   support

      ORG    0.22550   0.86033   0.35734      1661
     MISC    0.05517   0.82336   0.10341       702
      PER    0.87629   0.94187   0.90790      1617
      LOC    0.06072   0.91547   0.11389      1668

micro avg    0.11572   0.89536   0.20496      5648
macro avg    0.34199   0.89536   0.41150      5648

他の手法に比べてHard methodが圧倒的に性能が高いことが実験から分かりました.

感想

論文の提案手法,学習にとても時間がかかります. 最小のデータ分割数であるk=2でも合計エポック数は2(k)x30(epoch)x10=600回ほどで,これに制約付きビタビによるラベル付け等の時間も加わるので大体一日半くらい学習にはかかりました.Softだと多分更に学習時間が増えるはずです. ただ,Oタグ無しかつ5割の固有表現が欠損していてもF値が81%を超えるというのは凄いと思いました.(加えてHardは殆どLSTM-CRFを使い回せるので実装が意外と楽です.)

また論文やブログではCoNLL-2003のデータセットに対して固有表現をランダムに欠損を生じさせましたが,これが大きく性能を左右させるのでモデルのパラメータ等を揃えて実験を行っても性能を再現させるのが難しいような気がします.