メインコンテンツへスキップ
見出し画像

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。

    次回



     
     

    npaka

     
     
    プログラマー。iPhone / Android / Unity / ROS / AI / AR / VR / RasPi / ロボット / ガジェット。年2冊ペースで技術書を執筆。アニソン / カラオケ / ギター / 猫 twitter : @npaka123

    あなたへのおすすめ