文書生成AI(rinna/japanese-gpt-1b)

プログラミング環境が構築できたら、実際に文章の生成を行います。今回は、Hugging Facerinna/japanese-gpt-1b を使用させていただきます。

学習済みモデルをダウンロードし、文章の出だしをプロンプトとして与えて、続きの文章を生成させます。プログラミングは JupyterLab 上で行います。

プログラミングと出力結果

事前学習データのダウンロード

オフラインでも実行できるように、学習済みデータをダウンロードします。

from huggingface_hub import snapshot_download
download_path = snapshot_download(repo_id="rinna/japanese-gpt-1b", local_dir="/home/ユーザー/model/language/rinna/japanese-gpt-1b", local_dir_use_symlinks=False)

local_dir には保存先のディレクトリを指定します。

学習データの読み込み

ダウンロードした学習済みデータを指定して、読み込みます。

import torch
from transformers import T5Tokenizer, AutoModelForCausalLM

#学習データ読み込み
tokenizer = T5Tokenizer.from_pretrained("/home/ユーザー/model/language/rinna/japanese-gpt-1b")
model = AutoModelForCausalLM.from_pretrained("/home/ユーザー/model/language/rinna/japanese-gpt-1b")

#GPU使用
if torch.cuda.is_available():
    model = model.to("cuda")

文字列の生成

prompt に冒頭の文章を入力すると、AIが続きの文章を作成してくれます。…内容の正確さはなんともいえませんが、それなりに読める文章になっています。

#prompt入力
prompt = "生成AIの学習モデルとして有名なGPT2とは"

input_ids = tokenizer.encode(prompt, return_tensors="pt",add_special_tokens=False).to("cuda")
with torch.no_grad():
    output = model.generate(
        input_ids,
        max_length=300,
        min_length=100,
        do_sample=True,
        top_k=500, #上位{top_k}個の文章を保持
        top_p=0.95, #上位95%の単語から選んでくる
        pad_token_id=tokenizer.pad_token_id,
        bos_token_id=tokenizer.bos_token_id,
        eos_token_id=tokenizer.eos_token_id,
        num_return_sequences=1
    )
decoded = tokenizer.batch_decode(output,skip_special_tokens=True)
for i in range(num):
  print(decoded[i])

コメント