見出し画像

NovelAI の Genji-JP 6B による日本語テキスト生成を試す

「Google Colab」で「NovelAI」の「Genji-JP 6B」による日本語テキスト生成を試したので、まとめました。

「Colab 無料版」ではVRAMが足りなかったため、「Colab Pro」の「プレミアム」を使いました。

1. Genji-JP 6B

「Genji-JP 6B」は、EleutherAI の「GPT-J 6B」モデルをベースに、日本語のWeb小説のデータセットでファインチューニングしたモデルです。

2. Colabでの実行

Colabでの実行手順は、次のとおりです。

(1) Colabで新規ノートブックを作成し、メニュー「編集 → ノートブックの設定で「GPU」の「プレミアム」を選択。

(2) パッケージのインストール。

# パッケージのインストール
!pip install transformers==4.23.1
!pip install accelerate==0.13.2

(3) モデルとトークナイザーの準備。
モデルサイズが12GB以上あるので時間かかりました。

from transformers import AutoTokenizer, AutoModelForCausalLM
import torch

# モデルとトークナイザーの準備
tokenizer = AutoTokenizer.from_pretrained("EleutherAI/gpt-j-6B")
model = AutoModelForCausalLM.from_pretrained(
    "NovelAI/genji-jp", 
    torch_dtype=torch.float16, 
    low_cpu_mem_usage=True
).eval().cuda()

(4) 推論の実行。

# 入力テキスト
text = '''地球の人里離れた山奥に住む尻尾の生えた少年・孫悟空はある日、西の都からやって来た少女・ブルマと出会う。そこで、7つ集めると神龍(シェンロン)が現れ、どんな願いでも一つだけ叶えてくれるというドラゴンボールの存在を、さらに育ての親である孫悟飯の形見として大切に持っていた球がその1つ「四星球(スーシンチュウ)」であることを知り、ブルマと共に残りのドラゴンボールを探す旅に出る。'''

# 推論の実行
tokens = tokenizer(text, return_tensors="pt").input_ids
generated_tokens = model.generate(
    tokens.long().cuda(), 
    use_cache=True, 
    do_sample=True, 
    temperature=1, 
    top_p=0.9, 
    repetition_penalty=1.125, 
    min_length=1, 
    max_length=len(tokens[0]) + 400, pad_token_id=tokenizer.eos_token_id)
last_tokens = generated_tokens[0]
generated_text = tokenizer.decode(last_tokens)
print("Generation:\n" + generated_text)
Generation:
地球の人里離れた山奥に住む尻尾の生えた少年・孫悟空はある日、西の都からやって来た少女・ブルマと出会う。そこで、7つ集めると神龍(シェンロン)が現れ、どんな願いでも一つだけ叶えてくれるというドラゴンボールの存在を、さらに育ての親である孫悟飯の形見として大切に持っていた球がその1つ「四星球(スーシンチュウ)」であることを知り、ブルマと共に残りのドラゴンボールを探す旅に出る。
 その旅の途中ではあるが、孫悟飯とブルマは外道魔法使いジャンゴに狙われることになる。しかし二人は無事助かり、十三星隊として仲間として合流する。その後本格的に魔王軍に寝返る前に世界を救っていくのだが、それはまた別の話。
 ――――完。
***
今日で最終話です。ここまで読んで下さりありがとうございました。


せっかくなので、NovelAIに挿絵も描いてもらいました。生成したテキストをDeepLで翻訳して、NovelAIのイメージ生成のプロンプトに渡しました。



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