見出し画像

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個の質問をして、以下の回答が得られた。

>富士山の高さについて教えてください

富士山の高さは約36,000フィートです。日本最高峰であり、世界で最も高い山です。

全然違う

>日本の国技は何ですか?

日本には相撲があります。相撲は日本の国技であり、多くの人々が日本の文化や伝統の一部として楽しんでいます。相撲は日本固有のスポーツで、ルールも独特です。

→あってる

>ワンピースの主人公は誰ですか?

ああ、それはモンキー・D・ルフィです。彼は海賊王になるために航海を続けています。彼は東の海で育ち、そこで多くの冒険を経験してきました。そして、後に仲間とともに西へと旅を始めました。彼は海軍や政府からの陰謀に立ち向かいながら、世界を周り、様々な島や国を訪れています。

→あってる

>武田信玄について教えてください

はい、武田信玄とは、甲斐国(現在の山梨県)の戦国大名で、信濃侵攻や大遠征で知られています。彼は生涯に多くの合戦に参加し、武勇と知略で非常に尊敬されていました。

→あってる

>豊臣秀頼とは誰ですか?

豊臣秀吉の子供で、関ヶ原の合戦で西軍に味方して負けた後、大阪城から追われました。その後、京都に落ち延び、そこで亡くなりました。彼の出生や幼少期についてはあまり知られていませんが、彼は非常に優秀で努力家だったと言われています。また、非常に強いリーダーシップを持っていました。

→京都云々から後ろが怪しいが、前半はあっている。

>徳川宗春とは誰ですか?

徳川宗春とは、尾張藩の藩主でした。彼は尾張徳川家第22代当主であり、名古屋城の天守閣や本丸御殿を再建し、茶会や歌会を開催することで広く知られていました。また、名古屋城の外堀に大規模な補修工事を行い、名古屋城を改修しました。

→最初の一文があっている。7代当主なので22代当主が大嘘。

>夏をテーマに俳句を作ってください

もちろんです。夏をテーマにした俳句を作るには、まず季節や風物詩を選び、その後、それらの要素を組み合わせて俳句を作り始める必要があります。そして、最後に季語を加えて完成となります。俳句を作る上で重要なポイントには、自然の風景や花、そして文化的な伝統の美しさを表現することや、季節の移り変わりの感覚を表現することが含まれます。これらの要素を考慮した俳句を作ることで、俳句の品質が向上します。

→作らない

>相対性理論について教えてください

もちろんです。相対性理論とは、宇宙の様々な特徴や現象を説明するために使用される科学的な概念であり、物理学や数学の研究において重要な役割を果たしています。

→非常にふわふわしている。〇よりの△。

>山月記のあらすじを教えてください

もちろんです。小説『山月記』は軽井沢で生活を送る中国人留学生の物語を描いており、自らの文学的才能に絶望した主人公が周りの人々や社会との関わり方を学ぶ姿を描いています。物語は、若い日本人男性が中国の奥地にある田舎での厳しい生活に適応し、自分の国の生活を改善するための努力を重ねる様子を描いています。

→ちょっと面影があるが大嘘



>梶井基次郎とは誰ですか?

梶井基次郎とは、日本の作家で、日本の文学の重要な存在として広く認知されています。彼の作品は、人間の内面や社会生活における葛藤を深く掘り下げており、日本の自然主義的な小説の中心的な役割を果たしました。

→最後が怪しいが最初はあってる。



結論:正解→3、半分正解→4、間違い→3。文章がちゃんとしているのでllamaIndexなどで回答を与えるようにすると実用的かもしれない。
なんにせよ非常に良いです。rinnaさん、ありがとう。


追記:というか自然な文章なので細かい歴史事実があってるかどうかわからない。調べるのに一苦労した。生成AIの汚染の話があるが、確かに結構やばそう。紙の時代が来てもおかしくない。

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