
AIりんな最新モデル「rinna-4b」をGoogle Colabratoryで試す
ChatGPT部のこーたろーです。
皆さん突然ですが、Rinna(りんな)はご存じですか?
AIりんなをご存知ない方は、前の記事を一読ください。
7月末に最新モデルの「rinna-4b」がOSSで公開されたようです!
なんと、りんなが進化してバイリンガル大規模言語モデルを公開!しかもOSSで!
これは早速使うしかないと思い、今日は動作確認をした結果をお伝えします。
使い方は、以下の記事を参考にしました!
それとは別でお知らせです。以下のTwitterアカウントは、私が普段やっている情報収集の一部です。よかったら、フォローいただけると幸いです。
【Twitter情報収集アカウント:https://twitter.com/info_AI_x_DX 】
1. はじめに
AIりんなは、2015年に初めてLineアプリとして登場したAIを駆使した対話型Botです。女子高生のプロファイルをもち、あたかも女子高生のりんなさんと会話しているかのような感覚に陥ることができます。
昨今のOpenAIをはじめとする大規模言語モデル(LLM)の台頭により、その進化が一層色濃くなり、最新モデルに至ったようです。
1. Google ColabratoryでRinnaを動かす
AIりんなは、OSSのため公開されたソースコードをインストールして実行することで、体験することができます。
1.1 パッケージのインストール
まずはGoogle Colabratoryの新規ノートブックを開いて、パッケージをインストールしましょう。
# パッケージのインストール
!pip install transformers sentencepiece accelerate bitsandbytes
実行するとこのように、インストールが開始されます。

1.2 トークナイザーとモデルの設定
トークナイザーとモデルを設定して、対話が成立する形にして行きます。
今回は、「rinna/bilingual-gpt-neox-4b-instruction-ppo」というモデルを活用して行きます。
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
# トークナイザーとモデルの準備
tokenizer = AutoTokenizer.from_pretrained(
"rinna/bilingual-gpt-neox-4b-instruction-ppo",
use_fast=False
)
model = AutoModelForCausalLM.from_pretrained(
"rinna/bilingual-gpt-neox-4b-instruction-ppo",
load_in_8bit=True,
torch_dtype=torch.float16,
device_map="auto",
)

2. AIりんなの実行結果
2.1 AIりんなの実行
準備ができたので、早速AIりんなの実力を確認して行きたいと思います。
とりあえず会話してみます。
まずはプロンプトの設定をします。
# プロンプト
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),
max_new_tokens=512,
do_sample=True,
temperature=1.0,
top_p=0.85,
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):])
print(output)
実行した結果がこちらです。

回答結果は次のとおりです。
「こんにちは、私はアレッサンドラ・パルミエリです。現在はイタリア・ローマの自宅で働いています。イタリアでイタリア語を勉強し、その後イタリアで料理の勉強をしました。」
どうやら、自分のことを誰かは認識していないようです。
2.2 一般的な質問をしてみる。
単純にLLM(大規模言語モデル)として考えてみて、その実行結果で見てみましょう。
プロンプトを以下のように変更しました。
# プロンプト
prompt = """ユーザー: 健康的な生活リズムの参考例を教えてください。システム: """
実行結果がこちらです。

回答はこちらです。
「健康的な生活リズムとは、定期的な活動や活動のタイミング、そして健康的なライフスタイルを維持するための様々な取り組みを指す一般的な用語です。健康的な生活リズムを維持することは、健康的な生活を送るための基本的な要素です。健康的な生活リズムを維持することは、生活の質を向上させることができます。健康的な生活リズムを維持することは、全体的に健康的な生活を維持するための良い方法です。」
確かに、正確な日本語でそれっぽい回答が返ってきています。
2.3 会話を続けられるか?
先ほどの質問を短期記憶で認識しつつ、次の質問を回答できるかを検討してみます。これができるのとできないのでは、大きくLLMとしての価値が異なります。
プロンプトを次のようにして続けてみます。
# プロンプト
prompt = """ユーザー: 先ほどの「健康的な生活リズムの参考例」をもう少し具体的に記載してください。システム: """
実行結果はこちらです。

確かにそれっぽい回答が来ましたが、ヒントを与えすぎたかもしれないので、ヒントを与えずにやってみましょう。
ちなみに回答は「起床時間は、健康的な生活リズムを維持するのに良いです。早起きして、朝食、運動、その他の活動で一日を始めましょう。」でした。
対話を続けます。プロンプトは以下の通りとします。今回はプロンプトに過去の内容を全く記入せず、回答を待ちます。果たして、回答はどうなるのでしょうか。
# プロンプト
prompt = """ユーザー: これまでの会話を要約してください。システム: """
結果はこちらです。

返ってきた答えは、「タレクは、仕事のストレスを減らすために瞑想を始めました。」となり、どうやら過去の会話は覚えていないようでした。
もしかしたら他にやり方があるのかもしれませんね。
3. まとめ
AIりんなの新モデルが出てきましたが、会話の文章を見る限りだと、女子高生という初期の設定の喋り方にはなっていませんでしたので、あくまで言語モデルとしてのモデルであることが確認されました。また、プロンプトを更新して実行するだけでは、連続した対話ができないことが確認できました。
もう少し、この新しいモデルについては研究を続けたいと思います。
元々Hugging Faceでインストールするようになっているので、次回はそちらで実行してみたいです。