Ahogrammer

Deep Dive Into NLP, ML and Cloud

多言語BERTを言語ごとにチューニングして固有表現認識の性能を向上させる

ACL 2019より以下の論文を紹介。

この論文は、ロシア語、チェコ語ブルガリア語、ポーランド語に対する固有表現認識をBERTを使って解いた論文。Googleの公開している多言語BERTを各言語のデータセットを使ってチューニングしたところ、多言語BERTをそのまま使うより良い結果となった。バルト系・スラブ系言語の自然言語処理を行うシェアドタスクであるBSNLP 2019の固有表現認識で1位だったとのこと。

BERTを使った固有表現認識の研究は多数あるが、ここで課題としているのは2点ある。一つは、オリジナルのBERTには今回対象とするスラブ系言語固有のサブトークンが欠けていることがある点。サブトークンが欠けているとテキストの分割に影響を与えるので性能にも影響する。もう一つは、トークンが欠けているからといって、スクラッチでBERTを学習させると計算時間とお金が非常にかかる点を挙げている。

これらの問題に対し、この論文では公開されている多言語BERTの再学習を工夫することで対応している。まず、計算時間の問題については再学習させることで、スクラッチで学習させるより収束が早くなることを利用して解決している。もう一つのサブトークンの問題については、ボキャブラリを再構成して解決している。たとえば、あるスラブ系言語固有のサブトークンが多言語BERTの複数のサブトークンから構成される場合、それらのベクトルの平均を使ってモデルを初期化している。

モデルとしてはオーソドックスにBERTの上に全結合層を載せたモデルを作成している。それに加えて、全結合層では出力ラベル間の一貫性が出ないので、CRF層を載せたモデルも作成して実験を行っている。

f:id:Hironsan:20190828074940p:plain
固有表現認識を行うモデル

以下に実験結果を示す。実験に使ったモデルはLampleのBiLSTM-CRF、多言語BERT(Dense)、多言語BERT(CRF)、チューニングしたBERT(Dense)、チューニングしたBERT(CRF)の5つ。データセットとしてはBSNLP 2019で公開されているデータセットを使っている。

f:id:Hironsan:20190828075542p:plain
実験結果

結果を見ると、多言語BERTをそのまま使うより、チューニングした方が大きく性能が向上していることがわかる。また、CRFを使うことでも性能が大きく向上していることがわかる。CRFに関しては従来から使うと性能が向上することが示されているので驚きはない。

思ったのは意外と日本語でも使えるかもしれないなということ。日本語のBERTといえば、京大の黒橋・河原研で公開されているものと、BERT with SentencePiece、また日本語専用ではないがGoogleから多言語BERTが公開されている。ただ、京大のは分かち書きがJuman++、BERT with SentencePieceはSentencePiece、Googleの多言語BERTはほぼ文字レベルで分割されているのでNERで使いにくい場面がある。そんなときにGoogleの多言語BERTを基にチューニングをすると学習時間を抑えつつ高性能を出せるかもしれない。

以下に公開されているソースコードのリンクを示す。 github.com