見出し画像

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))

「完熟マンゴー仮面」とは、後藤ひとりがギターを弾くために使用する仮面です。

これは間違いですが、コンテキスト確認したら『「完熟マンゴー仮面」を持ち歩いている。』しか書いてなく、完熟マンゴー仮面は何なのか想像で書いたみたい。




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