見出し画像

Huggingface Transformers 入門 (27) - rinnaの日本語GPT-2モデルの推論

「rinna」の日本語GPT-2モデルが公開されたので、推論を試してみました。

・Huggingface Transformers 4.4.2
・Sentencepiece 0.1.91

前回

1. rinnaの日本語GPT-2モデル

rinna」の日本語GPT-2モデルが公開されました。

特徴は、次のとおりです。

・学習はCC-100のオープンソースデータ。
・Tesla V100 GPUで70GBの日本語テキストを約1カ月学習。
・モデルの性能は約18 perplexity。

2. rinnaの日本語GPT-2モデルの推論

(1) Huggingface TransformersとSentencePieceをインストール。

# Huggingface Transformersのインストール
!pip install transformers==4.4.2

# Sentencepieceのインストール
!pip install sentencepiece==0.1.91

(2) 日本語GPT-2モデルを試す

from transformers import T5Tokenizer, AutoModelForCausalLM

# トークナイザーとモデルの準備
tokenizer = T5Tokenizer.from_pretrained("rinna/japanese-gpt2-medium")
model = AutoModelForCausalLM.from_pretrained("rinna/japanese-gpt2-medium")

# 推論
input = tokenizer.encode("昔々あるところに", return_tensors="pt")
output = model.generate(input, do_sample=True, max_length=30, num_return_sequences=3)
print(tokenizer.batch_decode(output))
['昔々あるところに</s> かすみ果穂という女性がいた。 その子は、女の子が大好きで、時々お客さんのところの', '昔々あるところに</s> 猫 がいました。 しかし、その猫はどこにでもいる普通の子猫のようでした。 ある日', '昔々あるところに</s> 美しい 子供たちがいました。 みんな 歌は 上手で 歌が上手な子の 集まりです']


昔々あるところに
  ↓
昔々あるところにかすみ果穂という女性がいた。その子は、女の子が大好きで、時々お客さんのところの
昔々あるところに猫がいました。しかし、その猫はどこにでもいる普通の子猫のようでした。ある日
昔々あるところに美しい子供たちがいました。みんな歌は上手で歌が上手な子の集まりです
おはよう、お兄ちゃん。
  ↓
おはよう、お兄ちゃん。なんだか、いつもよりゆっくり寝る。早く寝ると頭がスッキリするそうです
おはよう、お兄ちゃん。みんなに優しくしてあげたい妹、お姉ちゃん...。このふたりが一緒だと、みんな
おはよう、お兄ちゃん。今日も宜しくね。おやすみなさい、おやすみなさい。おはようございます

【おまけ】 model.generate()のパラメータ

model.generate()のパラメータは、次のとおりです。

・input_ids (LongTensor, shape:(batch_size, sequence_length)) - プロンプトとして使用するテキスト。
・max_length (int, defaults:20) - 生成されるテキストの最大長。
・min_length (int, defaults:10) - 生成されるテキストの最小長。
・do_sample (bool, defaults:False) - サンプリングを使用するかどうか。Falseの場合はgreedyデコード。
・early_stopping (bool, defaults:False) - バッチ毎にnum_beamsセンテンス終了時にビーム検索を停止するかどうか。
・num_beams (int, defaults:1) - ビーム検索用のビーム数。 1はビーム検索がないことを意味する。
・temperature (float, defaults:1.0) - 温度。
・top_k (int, defaults:50) - top-k-filteringのために保持する最も確率の高い語彙トークン数。
・top_p (float, defaults:1.0) - float<1に設定されている場合、合計がtop_p以上になる確率を持つ最も可能性の高いトークンのみが生成のために保持される。
・repetition_penalty (float, defaults:1.0) - 繰り返しペナルティのパラメータ。1.0はペナルティがないことを意味する。
・pad_token_id (int) - パディングトークンID。
・bos_token_id (int) - テキスト先頭トークンID。
・eos_token_id (int) - テキスト終端のトークンID。
・length_penalty (float, defaults:1.0) - 長さに対する指数関数的なペナルティ。1.0はペナルティがないことを意味する。
・no_repeat_ngram_size (int, defaults:0) - int> 0に設定すると、そのサイズの全てのngramは1回だけ発生。
・encoder_no_repeat_ngram_size (int, defaults:0) - int> 0に設定されている場合、encoder_input_idsで発生するそのサイズのすべてのngramは、decoder_input_idsで発生することはできない。
・bad_words_ids (List[List[int]]) - 生成が許可されていないトークンIDのリスト。
・num_return_sequences (int, defaults:1) - 生成するテキストの数。
・max_time (float, defaults:None) - 計算実行を許可する最大時間(秒単位)。
・attention_mask (LongTensor, shape:(batch_size, sequence_length))
パディングトークンインデックスに注意を向けないようにマスク。
・decoder_start_token_id (int) - encoder-decoderモデルがbosとは異なるトークンでデコードを開始する場合のトークンID。
・use_cache (bool, defaults:True) - モデルがデコードを高速化するために過去の最後のキー/値の注意(モデルに該当する場合)を使用する必要があるかどうか。
・num_beam_groups (int, defaults:1) - ビームの異なるグループ間の多様性を確保するために、num_beamsを分割するグループの数。
・diversity_penalty (float, defaults:0.0) - この値は、特定の時間に他のグループからのビームと同じトークンを生成する場合、ビームのスコアから差し引かれる。
・prefix_allowed_tokens_fn (Callable[[int, torch.Tensor], List[int]]) - 提供されている場合、この関数は、各ステップでのみ許可されたトークンにビーム検索を制約。
・output_attentions (bool, defaults:False) - 全てのアテンションレイヤーのアテンションテンソルを返すかどうか。
・output_hidden_states (bool, defaults:False) - 全てのレイヤーの非表示状態を返すかどうか。詳細については、返されたテンソルの下の非表示状態を参照してください。
・output_scores (bool, defaults:False) - 予測スコアを返すかどうか。
・return_dict_in_generate (bool, defaults:False) - タプルの代わりにModelOutputを返すかどうか。
・forced_bos_token_id (int) - decoder_start_token_idの後に最初に生成されたトークンとして強制するトークンID。
・forced_eos_token_id (int) - max_lengthに達したときに最後に生成されたトークンとして強制するトークンID。
・remove_invalid_values (bool)  - 生成メソッドがクラッシュしないように、モデルの可能性のあるnanおよびinf出力を削除するかどうか。
・model_kwargs - モデル固有のkwargs。

次回



この記事が気に入ったらサポートをしてみませんか?