rinnaバイリンガルモデルの実力を試す
llama2でいろいろできないか探っているが、日本語がネックになっている。英語の受け答えは相当実用的だが、日本語となると心許ない。
そんな時、以下の記事を見かけた。
rinna、日英対応可能なバイリンガル大規模言語モデルをオープンソースで公開 | TECH+(テックプラス) (mynavi.jp)
日本語モデルは非常にありがたい。さっそく実力を試してみることにする。
環境はgoogle colaboratoryのA100を使用。
コードは基本的にはhugging faceの説明文に書いてあることそのまんまです。関数に直して使いやすくしただけ。
rinna/japanese-gpt-neox-3.6b-instruction-ppo · Hugging Face
# パッケージのインストール
!pip install transformers sentencepiece
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
# トークナイザーとモデル
tokenizer = AutoTokenizer.from_pretrained("rinna/japanese-gpt-neox-3.6b-instruction-ppo", use_fast=False)
model = AutoModelForCausalLM.from_pretrained("rinna/japanese-gpt-neox-3.6b-instruction-ppo")
# 回答生成の関数を作成
def make_response(prompt):
token_ids = tokenizer.encode(prompt, add_special_tokens=False, return_tensors="pt")
with torch.no_grad():
output_ids = model.generate(
token_ids.to(model.device),
do_sample=True,
max_new_tokens=128,
temperature=0.7,
repetition_penalty=1.1,
pad_token_id=tokenizer.pad_token_id,
bos_token_id=tokenizer.bos_token_id,
eos_token_id=tokenizer.eos_token_id
)
output = tokenizer.decode(output_ids.tolist()[0][token_ids.size(1):])
# <NL>に関してはrinnaのhagging face参照
output = output.replace("<NL>", "\n")
print(output)
# 基本のprompt
prompt_base = [
{
"speaker": "ユーザー",
"text": "こんにちは!"
},
{
"speaker": "システム",
"text": "こんにちは!何かお手伝いできることはありますか?"
},
]
# プロンプトをLLM入力の形にフォーマットする関数
def format_prompt(question):
prompt = prompt_base.copy()
prompt.append({
"speaker": "ユーザー",
"text": question
})
input_prompt = [
f"{uttr['speaker']}: {uttr['text']}"
for uttr in prompt
]
input_prompt = "<NL>".join(input_prompt)
input_prompt = (
input_prompt
+ "<NL>"
+ "システム: "
)
return input_prompt
# 10回応答を繰り返す
for i in range(10):
question = input(">")
input_prompt = format_prompt(question)
make_response(input_prompt)
これで10個の質問をして、以下の回答が得られた。
結論:正解→3、半分正解→4、間違い→3。文章がちゃんとしているのでllamaIndexなどで回答を与えるようにすると実用的かもしれない。
なんにせよ非常に良いです。rinnaさん、ありがとう。
追記:というか自然な文章なので細かい歴史事実があってるかどうかわからない。調べるのに一苦労した。生成AIの汚染の話があるが、確かに結構やばそう。紙の時代が来てもおかしくない。
この記事が気に入ったらサポートをしてみませんか?