投稿日
データ拡張と言語的特徴を用いた固有表現認識の性能改善
概要
こんにちは。戦略技術センターで自然言語処理関係の研究開発をしている中山です。普段はアノテーションツールdoccanoの開発をしています。過去には研究成果の発信の一環として機械学習や自然言語処理の書籍の執筆も行っています。
- 【訳書】直感 Deep Learning
- 【単著】機械学習・深層学習による自然言語処理入門
- 【寄稿】生成 Deep Learning
本記事では、データ拡張と言語的特徴を用いた固有表現認識の性能改善(とくに少数データ時)について紹介します。固有表現認識は、テキスト中で使われている人名や地名などの固有表現を自動的に認識する技術です。情報抽出や質問応答などの高度なタスクに不可欠な基礎技術として認識されています。ルールベースや辞書ベースなどの手法も使われますが、近年では教師あり学習を用いた手法が高い性能をあげています。
固有表現認識に限らず、教師あり学習を用いた手法では、汎化性能の高いモデルを作成するためには十分な量のデータを用意しなければならないという課題があります。しかし、単純な分類問題と比べると、固有表現認識のデータセットはラベル付けに時間がかかり、十分な量を用意するのは困難です。
少量のデータしか存在しない場合、学習データセットだけから汎化するのは難しいと考えました。そこで、以下のような学習データ外部の知識を入れることで、学習データが少ない場合の認識性能を改善できるのではないかと考え実験しました。なお、特徴エンジニアリングで決めた言語的特徴については、人間の知識を使って決めているため、学習データ外部の知識とみなしています。
- 言語的特徴(形態素、品詞、文字種、形態素の長さなど)
- 単語埋め込み
- 固有表現辞書を用いたデータ拡張
実験
データセット
今回は、固有表現認識用のデータセットとしてMegagon Labs様が公開しているja_GSD-UD_NE_2.8を用いて検証を行います[1][2]。このデータセットは、日本語のテキストに対してOntoNotes5の固有表現ラベル体系をベースにラベル付けされています。学習データは7050件、検証データは507件、テストデータは543件の事例から構成されています。データセットに含まれる固有表現ラベルの統計量は以下の通りです。
固有表現ラベル | 学習 | 検証 | 評価 |
---|---|---|---|
CARDINAL | 14 | 2 | 0 |
DATE | 1469 | 109 | 84 |
EVENT | 248 | 26 | 14 |
FAC | 460 | 37 | 20 |
GPE | 1341 | 94 | 82 |
LANGUAGE | 45 | 6 | 6 |
LAW | 32 | 3 | 3 |
LOC | 313 | 10 | 25 |
MONEY | 136 | 7 | 7 |
MOVEMENT | 56 | 5 | 4 |
NORP | 373 | 32 | 28 |
ORDINAL | 489 | 22 | 13 |
ORG | 1439 | 137 | 75 |
PERCENT | 104 | 7 | 7 |
PERSON | 1935 | 139 | 89 |
PET_NAME | 18 | 0 | 0 |
PHONE | 2 | 0 | 0 |
PRODUCT | 551 | 42 | 23 |
QUANTITY | 1170 | 66 | 78 |
TIME | 113 | 4 | 13 |
TITLE_AFFIX | 272 | 30 | 20 |
WORK_OF_ART | 344 | 17 | 18 |
実験1: データセットをフルに使った各モデルの性能の検証
データセット外部の知識のうち、言語的特徴と単語埋め込みが固有表現認識にどの程度有効なのかを確認するため、異なるモデルを用いて検証します。今回、検証に用いたモデルは以下の5つです。
- BiLSTM
- BiLSTM(fastText)
- BiLSTM-CRF(fastText)[3]
- CRF
- Flair embeddings[4]
BiLSTMでは、前向きと後ろ向きのLSTMを1層ずつ用いています。ユニット数については、それぞれ64に設定しています。事前学習済みの埋め込みには、CommonCrawlを基に学習した300次元のfastTextのベクトルを用いています。なお、この埋め込みは学習時にファインチューニングしています。また、CRFの特徴としては、前後1単語を含む形態素、文字種、品詞、品詞細分類、形態素の長さを用いています。これらのモデルの実装には、TensorFlow v2.5.0、sklearn-crfsuite v0.3.6、Flair v0.8を利用しています。
学習には、ja_GSD-UD_NE_2.8で公開されている学習・検証・評価用データのうち、学習データのみを用いています。また、評価には評価用データを用いています。今回は、検証用データを用いたハイパーパラメータチューニングなどは行っていません。
実験結果を以下の表に示します。
モデル | 適合率 | 再現率 | F1 |
---|---|---|---|
BiLSTM | 64.74 | 42.20 | 51.09 |
BiLSTM(fastText) | 81.67 | 65.85 | 72.91 |
BiLSTM-CRF(fastText) | 82.04 | 76.52 | 79.18 |
CRF | 85.31 | 79.15 | 82.11 |
Flair embeddings | 82.04 | 81.77 | 81.91 |
BERT[5] | 84.96 | 83.14 | 84.04 |
以下に考察をまとめます。
- BiLSTMとBiLSTM(fastText)の比較から、事前学習済み単語埋め込みが認識性能の向上にかなり効果的であることがわかる。限られた学習データからモデルを学習するには、形態素などの表層の特徴だけでは限界があるが、埋め込みを使うことで単語の意味を考慮できたからだと考えられる。例:学習データに「東京」しか出てこなくても、事前学習済み埋め込みを使うと、似た埋め込みになるテストデータの「大阪」を正しく認識可能。
- BiLSTMとBiLSTM-CRFの比較から、CRFが性能の向上に効果的であることがわかる。固有表現認識のような出力ラベル間に強い依存関係のあるタスクの場合、ラベル間の遷移確率を考慮することで、ありえないラベルの接続(例:B-ORG→I-LOC)を排除できるからだと考えられる。同様の傾向は[3]でも報告されている。
- BiLSTM-CRF(fastText)とFlair embeddingsの比較から、言語モデルが性能の向上に効果的であることがわかる。言語モデルを用いることで、事前学習済み埋め込みでは考慮できない、文脈を捉えた単語表現を得られるからだと考えられる。
- 言語的特徴を用いたCRFの性能を単語埋め込みを用いたニューラルモデルの性能と比較すると、BERTには劣るものの、Flair embeddingsと遜色ない性能が出ていることがわかる。このことから、言語的特徴も認識に効果的であることがわかる。
- 言語的特徴を用いたCRFでは重みの分析が可能である。以下の表は、各特徴がラベルを出力する上でどの程度効いているかを重みという形で示している。つまり、重みが大きいほど、その特徴がラベルを決定するのに役立つという意味になる。表の一番上のデータを例に見方を説明すると、1単語後に料理という単語が出現する場合、その単語はU-NORPというラベルが付与される可能性が高いという意味になる。±1で前後の単語を、postagで品詞を表している。
重み | ラベル | 特徴 |
---|---|---|
9.017411 | U-NORP | +1:word.lower():料理 |
8.896396 | O | word.lower():サックス |
8.645470 | U-NORP | word.lower():カトリック |
8.376767 | U-PRODUCT | word.lower():カール |
8.245090 | U-LOC | word.lower():ハートランド |
8.243241 | U-PERSON | word.lower():デュークス |
8.243235 | U-PRODUCT | word.lower():ダーター |
7.994673 | U-PERSON | postag:名詞-固有名詞-人名-名 |
7.727044 | U-ORG | word.lower():グラディエーター |
7.638142 | O | word.lower():プホルス |
7.545244 | U-ORG | word.lower():ネクスト |
7.457971 | U-NORP | word.lower():イスラーム |
7.366422 | U-ORG | word.lower():ビルボード |
7.181221 | U-ORG | word.lower():インディアンス |
7.146191 | U-PERSON | postag:名詞-固有名詞-人名-姓 |
7.137871 | U-NORP | word.lower():プロテスタント |
7.133055 | U-PRODUCT | word.lower():ヒーリー |
7.113801 | U-ORG | word.lower():クラン |
7.025545 | U-ORG | word.lower():ディセプティコン |
6.933849 | U-NORP | word.lower():アーミッシュ |
6.879381 | O | +1:word.lower():酒 |
6.864590 | O | word.lower():ナックルズ |
6.765443 | U-GPE | word.lower():都内 |
6.647483 | U-ORG | word.lower():ジャール |
6.610493 | U-PRODUCT | word.lower():ルクレール |
6.567115 | U-PRODUCT | word.lower():ソユーズ |
6.560303 | U-PERSON | postag:名詞-固有名詞-人名-一般 |
6.528737 | U-FAC | word.lower():プラネタリウム |
6.528064 | U-ORG | word.lower():パイレーツ |
- 上記の重みを分析すると、「カトリック」や「カール」など固有表現そのものに大きな重みを割り当てている傾向がわかる。また、適合率と再現率をFlair embeddingsと比較すると、適合率が高く、再現率が低い。以上から、学習データに出現する既知の固有表現の認識は暗記していて得意だが、未知の場合は苦手な可能性がある。それ以外では、「名詞-固有名詞-人名-名」のような品詞に大きな重みを割り当てている。今回のデータセットでは、人名(PERSON)ラベルが含まれているため、形態素解析辞書に登録された情報を活用した認識をしていると言える。
- 言語的特徴を用いたCRFはニューラルモデルと比較すると、バリエーションの多いGPEやORG、WORK_OF_ARTの認識が苦手な傾向にあった。バリエーションの多さから、学習データに出現しないデータを認識できないのだと考えられる。逆に、事前学習済み埋め込みや言語モデルを使ったモデルは、言語的特徴のみを使用したモデルと比べて、バリエーションの多いクラスの認識性能が高い傾向にあった。事前学習した知識を用いて、限られた学習データから効果的に学習しているからだと考えられる。
- 言語的特徴を用いたCRFは長い文脈を考慮しにくい。エラー分析をすると、”ストイコビッチ監督は「浦和は最後まで目を覚ますことがなかった」”という文の「浦和」をGPEと出力している(正解はORG)。考慮する文脈を長くするのには限界があるので、その点はニューラルモデルのほうが優れていると言える。
実験2: 固有表現辞書を用いたデータ拡張の検証
実験2では、データ数が少ない場合に、データ拡張が認識性能の向上にどの程度効くのかを確認します。固有表現認識に対するデータ拡張の手法は[6]でいくつか提案されています。今回は、先行研究の手法からMention Replacement(MR)を選び、固有表現辞書を用いたデータ拡張と比較します。MRによる手法では、固有表現のバリエーションが増えないという課題がありますが、その問題を固有表現辞書を用いて解決することを目指しています。
実験に用いるデータ拡張の手法について簡単に説明します。MRによる手法では、学習データ中の固有表現を、学習データに出現する固有表現のうち、固有表現タイプが一致するものとランダムに入れ替えます。下の例で言うと、Problemというタイプがついた「headache」という固有表現を、学習データ中に出現する同じタイプの「neuropathic pain syndrome」に入れ替えます。
MRによる手法では、学習データ中の固有表現を入れ替えるだけなので、固有表現のバリエーション自体は増えません。そこで、あらかじめ固有表現とその固有表現タイプを格納した固有表現辞書を用意し、その辞書を用いてデータを拡張することを考えます。手法的には、MRでは入れ替える先の固有表現を学習データ中から選ぶのに対し、辞書を用いた手法では固有表現辞書から選ぶ点が異なります。以下に固有表現辞書の例を示します。
PERSON 大谷
PERSON 澤村
PERSON 菊池
ORG エンゼルス
ORG レッドソックス
ORG マリナーズ
...
実験にはFlair embeddingsを用いたモデルを使います。事前の検証で言語的特徴を用いたCRFでデータ拡張の実験を行いましたが、データ量の多寡にかかわらず、性能の向上は見られませんでした。実験1の考察にも挙げたように、言語的特徴を用いたモデルは形態素を暗記している傾向があります。そのため、たとえ固有表現辞書を用いて固有表現のバリエーションを増やしても、辞書のカバレッジの低さから、性能向上に寄与しなかったのだと考えています。
今回の学習には、ja_GSD-UD_NE_2.8で公開されている学習・検証・評価用データのうち、検証データを用いています。また、学習中の性能評価には学習データを用いています。評価には、実験1と同様に評価用データを用いています。今回もハイパーパラメータチューニングはしていません。データ拡張では、データ数を2倍の約1000件に増やしています。
実験結果は以下の通りです。実験結果を見ると、データ拡張をすることで、F1で10ポイント弱の性能向上が見られます。また、MRによるデータ拡張と比べて、固有表現辞書によるデータ拡張のほうが若干ながら性能が良いこともわかります。増やしたデータ数に差はないので、固有表現のバリエーションの増加が性能差につながっているのではないかと見ています。
モデル | 適合率 | 再現率 | F1 |
---|---|---|---|
Flair embeddings(拡張なし) | 59.58 | 55.67 | 57.56 |
Flair embeddings + MRによる拡張[5] | 67.86 | 65.19 | 66.50 |
Flair embeddings + 固有表現辞書による拡張 | 67.55 | 67.00 | 67.27 |
実験3: 3つの知識の組み合わせ
これまでに、言語的特徴、単語埋め込み、データ拡張の効果を確認してきました。実験1では、言語的特徴を用いたCRFモデルや単語埋め込み(言語モデルを含む)を用いたモデルの有効性を確かめ、実験2では、データが少ないときにデータ拡張が有効であることを確かめました。
本節では、これまでの実験で有効性を確かめられたものをすべて組み合わせて性能を確認してみます。設定としては、Flair embeddingsに言語的特徴を組み合わせたモデルを構築し、その性能を少量のデータを拡張して検証します。検証するモデルは以下の4つです。
- Flair embeddingsのみ(FE)
- 言語的特徴との組み合わせ(FE+LF)
- データ拡張との組み合わせ(FE+DA)
- すべての組み合わせ(FE+DA+LF)
実験結果は以下の通りです。Flair embeddingsに言語的特徴を加えることで、8ポイントほどの性能向上を確認できました。また、言語的特徴とデータ拡張を組み合わせることで、10ポイントほどの性能向上を確認できました。言語的特徴とデータ拡張のそれぞれが性能向上に有効でありながら、組み合わせることでさらに性能が向上するという結果になりました。
モデル | 適合率 | 再現率 | F1 |
---|---|---|---|
FE | 59.58 | 55.67 | 57.56 |
FE+LF | 67.77 | 63.88 | 65.77 |
FE+DA | 67.55 | 67.00 | 67.27 |
FE+DA+LF | 68.94 | 66.34 | 67.62 |
次に、学習データ数を変化させたときの各モデルの性能変化を以下の表とグラフに示します。結果を見ると、言語モデルだけの場合と比べて、データ拡張や言語的特徴を入れると、データ数が少ない場合にはとくに効果的であることがわかります。データ数が増えるにつれ、データ拡張の効果が落ちるのに対し、言語的特徴はデータ数とは関係なく有効であることがわかります。データ数が増えるにつれてデータ拡張の効果が落ちるのは[6]と同様の傾向ですが、これはデータが増えたことにより、データ拡張をせずとも学習データから十分に学習できるからだと考えられます。
データ数 | FE | FE+LF | FE+DA | FE+DA+LF |
---|---|---|---|---|
50 | 23.75 ± 13.04 | 25.60 ± 13.54 | 34.98 ± 4.34 | 37.78 ± 4.70 |
100 | 39.48 ± 4.46 | 40.65 ± 2.60 | 44.40 ± 2.92 | 46.02 ± 3.29 |
250 | 54.45 ± 1.29 | 55.74 ± 1.43 | 56.68 ± 3.15 | 58.66 ± 3.14 |
500 | 60.27 ± 1.19 | 62.96 ± 1.00 | 63.64 ± 0.82 | 65.92 ± 1.36 |
1000 | 69.17 ± 1.33 | 72.08 ± 0.74 | 72.19 ± 1.38 | 73.76 ± 0.28 |
2000 | 74.80 ± 1.60 | 77.01 ± 1.63 | 75.64 ± 0.83 | 78.61 ± 1.08 |
4000 | 80.73 ± 0.43 | 83.36 ± 0.62 | 80.40 ± 0.66 | 82.95 ± 0.79 |
7050 | 82.47 ± 0.92 | 85.10 ± 0.35 | 81.96 ± 0.40 | 85.20 ± 0.71 |
最後に、得られた教訓をまとめておきます。
- データが少ないときは、データ拡張は効果的
- データ数が少ないときは、データ拡張と言語的特徴の組み合わせは効果的
- ニューラルモデルであっても、言語的特徴は効果的な場合がある
- データ数が十分にある場合、学習時間が延びるデータ拡張を入れる必要はない(今回の場合)
おわりに
本記事では、データ数が少ない場合の固有表現認識の性能を改善する方法に焦点を当てた実験を紹介しました。上記で紹介した内容は少数データに対する対策のすべてではありません。実用的には、DATEやTIMEのようにバリエーションが少ない固有表現タイプは、ルールとのハイブリッドで構築したほうが良いでしょう。いずれにせよ、学習データが十分に存在しない場合にできることについて知っておくことは価値があるはずです。本記事の内容が皆様の仕事のお役に立てば幸いです。
参考文献
- UD Japanese GSD の再整備と固有表現情報付与
- megagonlabs/UD_Japanese-GSD
- Neural Architectures for Named Entity Recognition
- Contextual String Embeddings for Sequence Labeling
- hiroshi-matsuda-rit/ja_gsd_bert_wwm_unidic_lite
- An Analysis of Simple Data Augmentation for Named Entity Recognition
本コンテンツはクリエイティブコモンズ(Creative Commons) 4.0 の「表示—継承」に準拠しています。