rinna株式会社のGPT言語モデルに、日本語の文章の続きを書いてもらう

rinna株式会社のGPT言語モデルに、文章の続きを書いてもらった。モデルを使うだけの場合、私が持っているパソコン(メモリ16GB)でも動いて、結果を得られた。

実行結果

「今日プログラミングの勉強をした。」に続く文章は、例えば下記のようになる。実行するたびに異なる回答を返してくれる設定なので、コードは同じでも結果は再現はしない。

意識高い系のプログラミング初学者が書いたブログ記事を学習した、そんな感じの文章が返ってきた。

コード

実行したコードは下記。

import torch
from transformers import AutoTokenizer, AutoModelForCausalLM

tokenizer = AutoTokenizer.from_pretrained("rinna/japanese-gpt-1b", use_fast=False)
model = AutoModelForCausalLM.from_pretrained("rinna/japanese-gpt-1b")

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

text = "今日プログラミングの勉強をした。"
token_ids = tokenizer.encode(text, add_special_tokens=False, return_tensors="pt")

with torch.no_grad():
    output_ids = model.generate(
        token_ids.to(model.device),
        max_length=100,
        min_length=40,
        do_sample=True,
        top_k=500,
        top_p=0.95,
        pad_token_id=tokenizer.pad_token_id,
        bos_token_id=tokenizer.bos_token_id,
        eos_token_id=tokenizer.eos_token_id,
        bad_words_ids=[[tokenizer.unk_token_id]]
    )

output = tokenizer.decode(output_ids.tolist()[0])
print(output)

AutoTokenizer.from_pretrained は、引数にモデルの名前を指定すると、ダウンロードして利用できるようにしてくれる。

今回 rinna/japanese-gpt-1b というモデルを使ってみたが、より高級な rinna/japanese-gpt-neox-3.6b というモデルもある。高級なモデルは、私のPC(メモリ16GB)ではスムーズには動かなかった。

model = model.to(“cuda”) するとGPUのメモリを使い切ってエラーが出るので、コメントアウトした。エラーの回避策を探したが、私の2GのGPUは貧弱すぎて回避は難しいようだった。GPUを使わなければ、コードは動いた。

tokenizer.encode にて日本語文章を、コンピューターが扱いやすい数値のベクトルにしてくれる。

tokenizer.decode は model.generate で出力された数値ベクトル output_ids を日本語文章にしてくれる。

追記

PCのメモリを16GBから32GBへ交換、グラボもメモリ2GBのものから16GBのものへ変更し、更に大規模な言語モデルを動かしてみた。

コメント

タイトルとURLをコピーしました