Help us understand the problem. What is going on with this article?

transformers(ライブラリ)

ネット上で発見したライブラリ
有名な方が公開している様子ですが、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(768
4列になる)/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 ..
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away