Rinna-3.6B で Fate/stay nightの情報を学習させる【LangChain】

LLM

はじめに

この記事では、Pythonを使って「rinna/japanese-gpt-neox-3.6b-instruction-ppo」モデルを用いてFate/stay nightの情報を学習させる方法を初心者向けに説明します。ステップごとに進めていきましょう。

こちらの方の記事を参考にします

Rinna-3.6B で LangChain を試す|npaka
「Rinna-3.6B」で「LangChain」を試したのでまとめました。 1. Rinna-3.6B 「Rinna-3.6B」は、「Rinna」が開発した、日本語LLMです。商用利用可能なライセンスで公開されており、このモデルをベースにチューニングすることで、対話型AI等の開発が可能です。 rinna、日本語...

パッケージのインストール

まずは必要なパッケージをインストールします。以下のコマンドを実行してください。

!pip install transformers sentencepiece accelerate langchain bitsandbytes

モジュールのインポートとGPUの確認

必要なモジュールをインポートし、GPUが利用可能か確認します。

import torch
from transformers import AutoTokenizer, AutoModelForCausalLM

torch.cuda.is_available()

torch.cuda.is_available() は、GPUが利用可能かどうかを確認するためのものです。利用可能な場合は True が、そうでない場合は False が出力されます。

トークナイザーとモデルの準備

トークナイザー(テキストをモデルが理解できる形に変換するためのツール)と、事前に訓練されたモデルを読み込みます。

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

ここで、AutoTokenizer.from_pretrainedAutoModelForCausalLM.from_pretrained は、指定した名前のトークナイザーとモデルをダウンロードしています。

パイプラインの設定

テキスト生成用のパイプラインを設定します。パイプラインは、モデルの使用を簡単にするためのツールです。

from langchain.llms import HuggingFacePipeline
from transformers import pipeline

pipe = pipeline(
    "text-generation", 
    model=model, 
    tokenizer=tokenizer, 
    max_length=512*3,
    do_sample=True,
    top_k=10,
    num_return_sequences=1,
    temperature=0.1,
)
llm = HuggingFacePipeline(pipeline=pipe)

事前情報なし

プロンプトテンプレートの準備

次に、質問応答システム用のプロンプトテンプレートを作成します。
まずは事前情報なしのパターンです。

from langchain import PromptTemplate, LLMChain

template = """
質問: {question}
システム:"""
template = template.replace("\n", "<NL>")
prompt = PromptTemplate(template=template, input_variables=["question"])

LLMChainの設定

LLMChainは、さまざまな言語モデルと簡単に連携できるようにするためのツールです。

llm_chain = LLMChain(prompt=prompt, llm=llm)

質問応答の実行

最後に、質問をしてみましょう。以下のコードを実行して、モデルの回答を確認してください。

question = "「無限の剣製」これは何て読みますか?"
print(llm_chain.run(question))

「無限の剣製」とは、イギリスの作家ロバート・ジョーダンによる小説で、19世紀後半のイギリスを舞台に、社会の腐敗や腐敗した政府に対する闘いを描いています。この小説は、社会の腐敗や腐敗した政府に対する闘いを、社会の腐敗や腐敗した政府に対する闘いに焦点を当てた社会風刺的な視点で描いています。この小説は、社会の腐敗や腐敗した政府に対する闘いを、社会風刺的な視点で描いています。

事前情報あり

プロンプトテンプレートの準備


from langchain import PromptTemplate, LLMChain

# プロンプトテンプレートの準備
template = """ユーザー: 次の文章を読んで質問に答えてください。
文章: Fate/stay nightの主人公
衛宮士郎(えみや しろう)
声 - 杉山紀彰(幼少期 - 野田順子)
身長:167cm / 体重:58kg / イメージカラー:赤銅
本作の主人公。穂群原(ほむらばら)学園2年C組に在籍。
元弓道部員であり、その腕は文字どおり百発百中であったという。人助けが生き甲斐であり、他人から頼まれたことに対して基本的に嫌と言わない(言えないのではなく)ため、都合よく利用されることも多い。学園では「穂群原のブラウニー」の異名を持つ。得意とするのは物を修理することと、家庭料理をはじめとする家事全般。身長が低いことと、童顔であることを気にしている[注 9]。運命のその夜、サーヴァント同士の戦いを目撃してしまったために殺されそうになった彼は、偶然召喚したセイバーに窮地を救われ、以後彼女のマスターとして聖杯戦争に参加することになる。
魔術師としては知識も技量も半人前だが、彼にとっては「強化」よりも遙かに高度な魔術であるはずの「投影」(イメージを元に、魔力で無から一時的に物体を作り出す魔術)の方が楽に扱えたり[注 11]、さらに彼が「投影」した物体は時間経過では消滅しない[注 12] など、特定の魔術に関しては普通の魔術師にはありえない特異な才能を発揮する。これは彼の身体が、一時的かつ限定的ながら術者の心象風景によって世界そのものを塗り潰してしまう大魔術「固有結界」のみに特化した異端であるため。その異端ぶりは、一流の魔術師である切嗣や凛が、士郎の魔術の異常さは感じながらもその正体を見極めるに至らず、的確な指導を行えなかったほどである。彼の固有結界「無限の剣製(アンリミテッドブレイドワークス)」は「視認した剣(および剣と認識できるもの)の構成や本質を捉え、複製し内部に蓄える」という能力を持つ。

質問: {question}
システム:"""
template = template.replace("\n", "<NL>")
prompt = PromptTemplate(template=template, input_variables=["question"])

# LLMChainの準備
llm_chain = LLMChain(prompt=prompt, llm=llm)

質問応答の実行1


# 質問応答
question = "「無限の剣製」これは何て読みますか?"
print(llm_chain.run(question))

アンリミテッドブレイドワークス

質問応答の実行2


# 質問応答
question = "「無限の剣製」とは何?"
print(llm_chain.run(question))

視認した剣(および剣と認識できるもの)の構成や本質を捉え、複製し内部に蓄える能力を持つ。

Google Colab

Google Colaboratory

コメント

タイトルとURLをコピーしました