BERT日本語Pretrainedモデル

近年提案されたBERTが様々なタスクで精度向上を達成しています。BERTの公式サイトでは英語pretrainedモデルや多言語pretrainedモデルが公開されており、そのモデルを使って対象タスク(例: 評判分析)でfinetuningすることによってそのタスクを高精度に解くことができます。

多言語pretrainedモデルには日本語も含まれていますので日本語のタスクに多言語pretrainedモデルを利用することも可能ですが、基本単位がほぼ文字となっていることは適切ではないと考えます。そこで、入力テキストを形態素解析し、形態素をsubwordに分割したものを基本単位とし、日本語テキストのみ(Wikipediaを利用)でpretrainingしました。

2022年1月21日追記: このモデルは古くなっています。RoBERTa-base 日本語モデルの利用を検討してみてください。

ダウンロード

BERTのモデルはBASEとLARGEの2種類があります。また、通常版とWhole Word Masking (WWM)版の2種類があります。BASEよりLARGEの方が、また通常版よりWWM版の方がfinetuningしたタスクの精度が高い傾向にあります。WWMの詳細はBERTの公式サイトをご覧ください。

公式で配布されているpretrainedモデルと同様のファイル形式になっており、

が含まれています。また、pytorch版BERT (pytorch-pretrained-BERT)用に変換したモデル (pytorch_model.bin)も同梱しています。

(更新: 19/11/15) pytorch-pretrained-BERTはtransformersという名前にかわっています。こちらを使う場合は以下のモデルをお使いください。transformersで使う場合、モデルの絶対パスのどこかに「bert」の文字列を含んでいる必要があります。例えば、zipを解凍し、 /somewhere/bert/Japanese_L-12_H-768_A-12_E-30_BPE_transformers/ のように配置してください。

詳細

以下に日本語pretrainedモデルの詳細を示します。

BERTの公式スクリプト (run_classifier.pyなど)を用いてfinetuningする方法は公式で配布されているpretrainedモデルと同様で、以下のようにオプションを指定してください。

export BERT_BASE_DIR=/path/to/Japanese_L-12_H-768_A-12_E-30_BPE

python run_classifier.py \
...
--vocab_file=$BERT_BASE_DIR/vocab.txt \
--bert_config_file=$BERT_BASE_DIR/bert_config.json \
--init_checkpoint=$BERT_BASE_DIR/bert_model.ckpt \
--do_lower_case=False

入力テキストは半角を全角に正規化し、Juman++ (v2.0.0-rc2)で形態素単位に分割してください。(BPEは適用する必要はありません。finetuning時に語彙リストを参照しながら自動的にsubwordに分割されます。)

注意: --do_lower_case=False オプションをつけてください。これをつけないと、濁点が落ちてしまいます。また、tokenization.pyの以下の行をコメントアウトしてください。これを行わないと漢字が全て一文字単位になってしまいます。

# text = self._tokenize_chinese_chars(text)

pytorch-pretrained-BERTでfinetuningする場合 (examples/run_classifier.py)、

python run_classifier.py \
..
--bert_model $BERT_BASE_DIR

のようにしてモデルを指定し、--do_lower_case オプションをつけないでください(つけるとTrueになります)。また、公式スクリプトと同様、pytorch_pretrained_bert/tokenization.pyに対して、上記のコメントアウトをしてください。

(更新: 19/11/15) transformersでfinetuningする場合 (examples/run_glue.py)、

python run_glue.py \
  --model_type bert \
  --model_name_or_path $BERT_BASE_DIR \
 ..

のようにしてモデルを指定してください。transformersではモデルファイルと同じディレクトリに tokenizer_config.json をおいておくと、tokenizerの設定をすることができます。同梱したzipの中に入れていますので解凍すれば自動的に配置されます。上記で説明した _tokenize_chinese_chars の行のコメントアウトを行う必要がありません。

なお、形態素解析を行わず、文に対してSentencepieceを用いてpretrainingしたものが https://github.com/yoheikikuta/bert-japanese (日本語Wikipediaで学習)やhttps://www.hottolink.co.jp/blog/20190311-2 (日本語twitterデータで学習)で公開されています。

各タスクにおける精度

構文解析 (基本句係り受け精度のF1)

モデルニュースウェブ
BASE93.5792.23
BASE WWM93.6292.42
LARGE WWM94.1192.80

※「ニュース」は京都大学テキストコーパス、「ウェブ」は京都大学ウェブ文書リードコーパスでの精度を表しています。精度は3回finetuningした平均値です。

参考文献

柴田 知秀, 河原 大輔, 黒橋 禎夫: BERTによる日本語構文解析の精度向上, 言語処理学会 第25回年次大会, pp.205-208, 名古屋, (2019.3). (pdf, slide)

公開モデルを試していただいたサイト

ライセンス