NLPを学ぶ - 9
はじめに
前回まではtransformerモデルについて調査・検証してきた。
これまで検証してきたデータセットは基本的に英語であったが、
最終的には日本語での文章生成にtransformerを使いたい。
そのため今回は日本語のテキスト生成にtransformerを使うためにどうすればいいかを調査した。
公開されているTransformerモデル
個人で十分なデータに対してtransformerを学習することは計算リソース的に難しい。
学習済みのTransformerモデルを公開してくださっている機関がいくつかあるので
それを利用することで個人でもtransformerを使うことができる。
一般公開されている日本語のtransformer
作成者 | モデル | 学習データ |
---|---|---|
京都大学 黒橋・村脇(旧黒橋・河原)研究室 | BERT | 日本語wikipedia |
ホットリンク | BERT | |日本語twitterデータ |
mkt3様 | BERT | 日本語ビジネスニュース記事 |
transformers | BERT | 日本語Wikipedia |
tanreinama様 | GPT-2 (small) | 日本語Wikipedia |
現状公開されているtransformerの多くがBERTである。
BERTはmasked language modelingにより事前学習されているため、
そのままでは文章生成はできない。
そのためtransformerを使った日本語生成を行うためには以下の2つのアプローチが考えられる。
- BERTで強引に文章生成を行う
- 文章生成系のtransformerを自力で学習する
BERTを使った文章生成
Zhang et al. 20191ではBERTをEncoderにしてDecoderを2-stageに分けて要約モデルを構築している。
解説 : https://www.slideshare.net/DeepLearningJP2016/dl-hackspretrainingbased-natural-language-generation-for-text-summarization-bert-141527380
Chen et al. 20192 ではfint-tuningしたBERTを従来のSeq2Seqモデルへdistilationしている。
Chan & Fan 20193 ではQuestion generationタスクにBERTの学習済みモデルを適用している。
どの手法もBERTのbi-directionalなtransformerをencoderとしてタスクに合わせたdecoderを構築しているようである。
文章生成系のtransformerを自力で学習させる
BERTによる文章生成はタスクに依存しているようであり、自然な文章を生成するには
1からauto regression系のTransformerを学習したほうが良さそうである。
前回検証して面白かったCTRLを日本語用に学習することを考える。
日本語で文章生成系のtransformerを学習させるために必要なことは
- データセットをどうするか
- 前処理をどうするか
- 計算リソースをどうするか
以下それぞれについてまとめる
データセット
汎用的な文章生成モデルを構築するためには大規模なデータセットが必要である。
現在公開されているBERTは日本語Wikipediaのデータセットで学習されているものが多い。
一方でCTRLは複数のデータセットで学習されており、制御コードも学習データセットに対応している。
元のCTRL論文では
など多様な分野のデータセットから文章を学習しているので日本語でも多様なデータセットを学習に利用したほうがよい。
前処理について
単語がスペースで分かれている英語でさえも未知語への対応のためには wordpieceなどでサブワードに対処する必要がある。
日本語の自然言語処理の場合は
- 形態素解析によって文章を単語に分けてから英語と同様に処理する
- sentence pieceによる単語分割を行う
などのアプローチがとられている。
sentence pieceについての解説は以下の記事が分かりやすかった。
https://qiita.com/taku910/items/7e52f1e58d0ea6e7859c
計算リソースについて
計算リソースについても大きな問題である。
京都大学 黒橋・村脇(旧黒橋・河原)研究室によるとWikipediaデータのみによるBERTの学習で
1ヶ月(1-GPU)程度かかるらしい。
CTRLはBERTよりも大きなモデルであるためサイズの調整などは必要と思われる。
データ収集、保管なども考えるとAWS, Azuru, GCPなどのクラウドプラットフォームで学習するしかない。
また、学習速度向上のためのチューニングなども必要となる。
まとめと今後
現時点でTransformer(CTRL)を1から学習するために調査すべきことを以下にまとめる
これまでクラウドプラットフォームを使った大規模な機械学習の経験がないため
それらの調査は行いたいが、実際にやるかどうかはどの程度の費用がかかるか次第である。
とりあえず1週間程度検討してみてやるかやらないか決めたい。