Rinna-3.6B で LangChain を試す
「Rinna-3.6B」で「LangChain」を試したのでまとめました。
1. Rinna-3.6B
「Rinna-3.6B」は、「Rinna」が開発した、日本語LLMです。商用利用可能なライセンスで公開されており、このモデルをベースにチューニングすることで、対話型AI等の開発が可能です。
2. Colabでの実行
Google Colab での実行手順は、次のとおりです。
(1) パッケージのインストール。
# パッケージのインストール
!pip install transformers sentencepiece accelerate langchain bitsandbytes
(2) トークナイザーとモデルの準備。
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",
torch_dtype=torch.bfloat16,
device_map="auto",
)
(3) パイプラインの準備。
from langchain.llms import HuggingFacePipeline
from transformers import pipeline
# パイプラインの準備
pipe = pipeline(
"text-generation",
model=model,
tokenizer=tokenizer,
max_length=512,
do_sample=True,
top_k=10,
num_return_sequences=1,
temperature=0.1,
)
llm = HuggingFacePipeline(pipeline=pipe)
(4) プロンプトテンプレートとLLMChainの準備。
from langchain import PromptTemplate, LLMChain
# プロンプトテンプレートの準備
template = """ユーザー: 次の文章を読んで質問に答えてください。
文章: 後藤ひとりは秀華高校に通う女の子。ピンクのゆるい髪で、いつもジャージを着ている。自他ともに認める引きこもり一歩手前で、承認欲求は強いものの、気弱な性格で人と接するのが極度に苦手。そのため、彼女はすぐに自分の世界に入り込み、落ち込んでしまうなど、情緒不安定さを示しています。クローゼットやダンボールに潜る癖があり、「完熟マンゴー仮面」を持ち歩いている。スポーツも勉強も苦手で、授業は真面目に受けているものの、生来の器用さのせいで赤点がほとんど取れない。自分には何の取り柄もないことを痛感し、中学生の時に「暗い性格の人がバンドをやって人気者になった」というインタビューを読んでギターを始める。日々の練習の甲斐あってギターの腕前はプロ級になったが、結局その腕を披露する場に恵まれず、友達も出来ないまま中学を卒業した。現在は「ギターヒーロー」名義で動画配信を行っている。ギタリストを探していたところ、伊地知虹夏に誘われ「結束バンド」に加入し、自身のバンド活動を始める。彼女はバンドのギタリスト兼作詞家です。恥ずかしがり屋なので美容院にも行けず、髪を伸ばし放題でいつも前髪で目を隠している。しかもダサいジャージを着ているので目立たないが、実は同性からも一目置かれる美少女。地味に着飾っていれば「アイドル事務所担当」「ビジュアル担当」と言われそうなポテンシャルを持っているが、その顔は10秒しか持たず、普段の奇行がすべてを台無しにする。
質問: {question}
システム:"""
template = template.replace("\n", "<NL>")
prompt = PromptTemplate(template=template, input_variables=["question"])
# LLMChainの準備
llm_chain = LLMChain(prompt=prompt, llm=llm)
(5) 質問応答。
# 質問応答
question = "後藤ひとりが加入しているバンドの名前は何ですか?"
print(llm_chain.run(question))
同様にいくつか質問してみます。
# 質問応答
question = "後藤ひとりはどんな人?"
print(llm_chain.run(question))
# 質問応答
question = "「完熟マンゴー仮面」とは?"
print(llm_chain.run(question))
これは間違いですが、コンテキスト確認したら『「完熟マンゴー仮面」を持ち歩いている。』しか書いてなく、完熟マンゴー仮面は何なのか想像で書いたみたい。
この記事が気に入ったらサポートをしてみませんか?