プログラミング環境が構築できたら、実際に文章の生成を行います。今回は、Hugging Face の rinna/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])

コメント