ネット上で発見したライブラリ。
有名な方が公開している様子ですが、githubのスターも17000個もついてるのでみんな使ってると思われます。
→huggingfaceという企業でした。
As easy to use as pytorch-transformers
As powerful and concise as Keras
High performance on NLU and NLG tasks
Low barrier to entry for educators and practitioners
のとおり、
BERT,GPT,GPT-2,Transformer-XL,XLNet,XLM,RoBERTa,DistliBERTの8つが似たような書き方で実行できます!DistliBERTなど論文でしか見たことないので使い易い形で組み込んでくれていてありがたい。
20200508記載追加:
CTRL,CamemBERT,ALBERT,XLM-RoBERTa,FlauBERT,Bart,T5,ELECTRA,DialoGPT,Reformer と、どんどん追加されている模様。
BERT
!pip install transformers
!git clone https://github.com/huggingface/transformers.git
!mkdir output
と作って
!python /content/transformers/examples/run_lm_finetuning.py \
--output_dir=/content/output \
--model_type=bert \
--model_name_or_path=bert-base-cased \
--do_train \
--train_data_file=****_train.raw \
--do_eval \
--eval_data_file=****_test.raw \
--mlm
とやれば、自分のデータでfinetuningしたBERTモデルを作成できます。
train_data_file、eval_data_fileの場所をいじるのと、model_typeを指定すれば(少しパラメータが変わりますが)他のモデルでもほぼ同じように設定可能です。
GPT-2
昔苦労して実行させたGPT-2も、このtransfomerを使えばわずか3行で。
!python /content/transformers/examples/text-generation/run_generation.py \
--model_type=gpt2 \
--model_name_or_path=gpt2
色々と試せそうなので発見があれば追記していこうと思います。
#RoBERTaを使ったメモ
embedding層を取り出すためのconfigの設定の注意点があったのでメモ。
#@title RoBERTa(モデル読み込み)
from transformers import RobertaTokenizer, RobertaForMaskedLM, RobertaConfig
import torch
#modelが入っているフォルダ指定
folder = '/output'
#embedding層を取り出すため
config = RobertaConfig.from_pretrained(folder)
config.output_hidden_states = True #これ
#config.output_attentions=True
tokenizer = RobertaTokenizer.from_pretrained(folder, config=config)
model = RobertaForMaskedLM.from_pretrained(folder, config=config)
#model = torch.nn.Sequential(model, torch.nn.Linear(768,144))
デフォルトだと、embedding層の重みを出してくれない。(文章数×vocab_sizeの行列が取り出されてしまう。)
config.output_hidden_states=Trueにすればよい。
そうすると、文章数embedding層の数=768列の各層(12層)が12×文章数×768のtensorで取り出せた。
層の情報のどれを使うかで、
・最終層を使う
・最後の4層をconcate(7684列になる)/sum/mean
など色々あるそうで。詳細はこの記事参照
自分はmeanを使った。
ちなみにconfig.output_attentions=Trueとすると、Attentoinが取り出せるみたいだけど未実験。
#インポートエラー
finetuningを実行しようとしたらエラーが。
!python /content/transformers/examples/language-modeling/run_language_modeling.py \
--train_data_file=$TEXT_FILE \
--output_dir=$OUTPUT_DIRECTORY \
--model_type=gpt2 \
--model_name_or_path=gpt2 \
--do_train
などとやると
ImportError: cannot import name 'DataCollatorForPermutationLanguageModeling'
というエラーが出た。
ネット上をうろうろさまよい、して、結局transformesをディレクトリ事消して、下記のコマンドを実行して再実行したらいけた。
!rm -f transformers
!git clone https://github.com/huggingface/transformers
%cd transformers
!pip install .
%cd ..