#はじめに
以前、日本語のBERT事前学習済モデルとELMo学習モデルの紹介記事を投稿しましたストックマークの森長です。
モデル公開の記事を多くの皆様に読んでいただき、ありがとうございます。
昨今の自然言語処理界?では、事前学習モデルであるBERTの登場を皮切りに、XLNet、RoBERTa、ALBERTと多数のモデルが提案され、SOTAを競いあい、大いに盛り上がっています!
ですが、最先端のモデルは英語や中国語で事前学習されたモデルが多く、日本語で試すにはハードルがかなり高いと感じています。
そこで、今回はBERT、ELMoに続いて、XLNetの日本語事前学習済モデルを公開いたします。
#XLNetとは
XLNetとは、自己符号化ベースであるBERTの以下懸念点を解消するために作られた、自己回帰ベースのモデルです。
- BERTの[MASK]トークンは、fine-tuningの時に使用しないためpre-trainingとfine-tuningの学習に差異が生じる
- 予測対象の単語が複数あった場合、BERTは、自己回帰モデルのように予測対象の単語間の依存関係を考慮できない。
- 【原文】: New York is A city.
- 【BERTのMLM】:[MASK] [MASK] is A city. (NewとYorkの依存関係を学習できない)
XLNetの論文やアルゴリズム等の紹介はとても丁寧に解説していただいている記事が多数ありますので、それらの記事を読んでいたただけると良いと思います。私も大変お世話になっています。
XLNetは、通常の自己回帰モデルとは異なり、単語の予測順序の入れ替えを行い、順方向・逆方向両方の依存関係を学習できるようにしたことがとても注目すべき点だと思います。
弊社のXLNet事前学習済モデルの特徴
学習元データ
以前公開しましたBERTの事前学習済モデルと同様に学習用データを日本語ビジネスニュース記事としています。そのため、本モデルは、主にビジネスに関するドメインで効果を発揮します。
tokenizer
弊社では、tokenizerにMeCab + NEologd及びSentencepieceを利用して、文章をトークン化しています。
まずMeCabを利用することで形態素として正しく分割し、その上でSentencepieceを行うことで、語彙のカバー範囲を広げています。
文字コード
XLNetの公式githubでは、正規化手法としてNFKDを採用しています。そのため、公式githubのライブラリをそのまま使用すると、日本語の濁点・半濁点がロストしてしまいます。
日本語では、濁点・半濁点の有無で意味が変わる可能性もありますので、弊社ではNFKD及びNFKCで正規化した2つのモデルを作成しています。
例)
[原文]ストックマーク社が新サービスを発表した
→[NFKDで正規化すると]ストックマーク社か新サーヒスを発表した (公式ライブラリを利用)
→[NFKCで正規化すると]ストックマーク社が新サービスを発表した (公式ライブラリの正規化をNFKCに変更)
事前学習済モデルの詳細
事前学習用データ | トークナイザー | 語彙数 | 正規化 | シーケンス長 |
---|---|---|---|---|
日本語ビジネスニュース記事(300万記事) | MeCab + NEologd 及び Sentencepiece | 32,000語 | NFKD(公式の正規化) | 128 |
日本語ビジネスニュース記事(300万記事) | MeCab + NEologd 及び Sentencepiece | 32,000語 | NFKC | 128 |
#ダウンロード
公式(TensorFlow)とPyTorch版で利用可能なモデルを公開します。
ダウンロードリンク
モデルの内訳は以下の通りです。(NFKD及びNFKCのディレクトリ構成は同様です)
- TensorFLow版
- model.ckpt.meta、 model.ckpt.index、 model.ckpt.data-00000-of-00001
- config.json
- spiece.model (Sentencepieceのモデル)
- PyTorch版
- pytorch_model.bin
- config.json
- spiece.model (Sentencepieceのモデル)
#利用方法
事前学習済モデルの使用にあたっては、TensorFlow版及びPyTorch版で公開されているサンプルスクリプトで動作しますが、以下のようにスクリプト及びライブラリを修正してください。
- 入力データ(入力文章)をMeCab+NEologdでわかち書きしてください。
- NFKC版を利用する場合は、各ライブラリ(TensorFlow版及びPyTorch版)のnomalizeをNFKDからNFKCに変更してください。(ライブラリのコードの位置はバージョンによって変わってしまうので、grepでNFKDを検索して場所を特定したほうが良いかもです)
XLNetの日本語事前学習済モデルを利用した所感
BERTとの比較
弊社の検証用タスク(記事の分類)においてはBERTを1%程度下回る性能となっていました。
また、自己回帰モデルの特性上、BERTと比較して計算時間も増加しており、利便性も低下しています。
とはいえ、単語間の関係性が重要になるタスク(固有表現抽出等)に対して適応した場合は違った結果が期待できるため、今後はそれらのタスクで検証を行っていきます。
NFKDとNFKCの比較
NFKD版とNFKC版の精度を比較しましたが、精度に大きな差はありませんでした。
濁点・半濁点がロストしても以下の理由で精度が変わらないのでは無いかと考えていますので、今後検証していきます。
が→か 、で→て 等の助詞でのロスト
助詞のため、タスクの精度向上に大きく寄与しない可能性がある。
サービス→サーヒス 等の一般名詞や固有名詞でのロスト
濁点・半濁点がロストしても、ほとんどの単語で、単語としては一意のままなので影響がない。濁点・半濁点がロストして違う意味になる単語ならば影響があると考えられる。
#まとめ
検証中の内容が多い中、最後までお読みいただき、ありがとうございました。
BERT、ELMoと同様に公開したXLNet事前学習済モデルが、自然言語処理の盛り上がりに少しでも貢献ができると大変嬉しいです。