ナード戦隊データマン

機械学習と自然言語処理についてのブログ

deeppavlov: BERTによる固有表現抽出の多言語モデル

deeppavlov1は、ダイアログシステムやチャットボットのための、ディープラーニングを使ったエンドツーエンドのオープンソースライブラリです。

NERコンポーネント

deeppavlovはチャットボットなどのためのライブラリですが、様々なコンポーネントを公開しており、その一つとして固有表現抽出のモデル2があります。 http://docs.deeppavlov.ai/en/master/components/ner.html#ner-multi-bert

モデルのいくつかはBERTが使われており、特にマルチリンガルのner_ontonotes_bert_multモデルは、polyglot3などとは違って一つのモデルだけであらゆる言語に対応しているようです。

実行方法

公式通りの方法だと、まずvirtualenv内で実行・インストールします。

virtualenv env
source ./env/bin/activate
pip install deeppavlov
python -m deeppavlov install ner_ontonotes_bert

次に、ipythonでもなんでも開いて、nerモデルをダウンロードして使います。

from deeppavlov import configs, build_model

ner_model = build_model(configs.ner.ner_ontonotes_bert_mult, download=True)

ner_modelに対して、単語をスペースで区切った入力を渡せば、NERの出力が得られます。

ner_model(["安倍 晋三 さん は 総理大臣 だから 1億円 ぐらい 持っ て いる"])

[結果]

[[['安倍', '晋三', 'さん', 'は', '総理大臣', 'だから', '1億円', 'ぐらい', '持っ', 'て', 'いる']],
 [['B-PERSON', 'I-PERSON', 'O', 'O', 'O', 'O', 'B-MONEY', 'O', 'O', 'O', 'O']]]

訓練方法

データの準備

以下の形式のデータを用意します。

EU B-ORG
rejects O
the O
call O
of O
Germany B-LOC
to O
boycott O
lamb O
from O
Great B-LOC
Britain I-LOC
. O

China B-LOC
says O
time O
right O
for O
Taiwan B-LOC
talks O
. O

...

各単語一行で、スペースで区切って、NERのタグを付与します。Bは先頭、IはBに続くもの、Oは固有表現以外を意味します。

訓練コード

訓練のために、設定情報とデータへのパスが必要です。

from deeppavlov import configs, train_model
ner_model = train_model(configs.ner.ner_ontonotes_bert_mult)

データパスの中には、train.txtとvalid.txt, test.txtという3つのデータが必要です。データの形式は前述のとおりです。

精度

評価セットはRussian corpus Collection 34と呼ばれるものを使っているようです。その精度は以下です:

TOTAL 79.39
PER 95.74
LOC 82.62
ORG 55.68

参考


  1. https://github.com/deepmipt/DeepPavlov

  2. http://docs.deeppavlov.ai/en/master/components/ner.html

  3. https://polyglot.readthedocs.io/en/latest/NamedEntityRecognition.html

  4. Mozharova V., Loukachevitch N., Two-stage approach in Russian named entity recognition // International FRUCT Conference on Intelligence, Social Media and Web, ISMW FRUCT 2016. Saint-Petersburg; Russian Federation, DOI 10.1109/FRUCT.2016.7584769