Google Colab で LangChain + RWKV を試す
「Google Colab」で「LangChain + RWKV」を試したので、まとめました。
前回
1. LangChain + RWKV
「LangChain」は「GPT-4」「GPT-3.5」だけでなく、様々な言語モデルをLLMとして利用できます。しかし「GPT-4」「GPT-3.5」以外で、「LangChain」のエージェント機能を制御できるほどの能力を持つ「LLM」は、まだありません。
そこで今回は、「LangChain + RWKV」を使って、「LlamaIndex」のQAプロンプトをどの程度制御できるかを確認することにします。
・gpt-index/prompts/default_prompts.py
DEFAULT_TEXT_QA_PROMPT_TMPL = (
"Context information is below. \n"
"---------------------\n"
"{context_str}"
"\n---------------------\n"
"Given the context information and not prior knowledge, "
"answer the question: {query_str}\n"
)
DEFAULT_TEXT_QA_PROMPT = QuestionAnswerPrompt(DEFAULT_TEXT_QA_PROMPT_TMPL)
2. Colabでの実行
Colabでの実行手順は、次のとおりです。
(1) メニュー「編集→ノートブックの設定」で、「ハードウェアアクセラレータ」で「GPU」の「プレミアム」を選択。
(2) Googleドライブのマウント。
# Googleドライブのマウント
from google.colab import drive
drive.mount("/content/drive")
(3) 作業フォルダへの移動。
# 作業フォルダへの移動
import os
os.makedirs("/content/drive/My Drive/work", exist_ok=True)
%cd "/content/drive/My Drive/work"
(4) モデルをダウンロードして、作業フォルダ (work) に配置。
今回は、「RWKV-4-Raven-14B-v9-Eng99%-Other1%-20230412-ctx8192.pth」を使いました。
(5) トークンファイルをダウンロードして、作業フォルダ (work) に配置。
(6) パッケージのインストール。
# パッケージのインストール
!pip install langchain
!pip install rwkv
!pip install tokenizers
(7) LLMの準備。
%%time
# LLMの準備
llm = RWKV(
model="./RWKV-4-Raven-14B-v9-Eng99%-Other1%-20230412-ctx8192.pth",
strategy="cuda fp16",
tokens_path="./20B_tokenizer.json"
)
Wall time: 3min 56s
(9) Instructプロンプトの生成関数の準備。
RWKVが学習時に利用しているAlpaca書式を生成する関数になります。
from langchain.llms import RWKV
# Instructプロンプトの生成
def generate_prompt(instruction, input=None):
if input:
return f"""Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request.
# Instruction:
{instruction}
# Input:
{input}
# Response:
"""
else:
return f"""Below is an instruction that describes a task. Write a response that appropriately completes the request.
# Instruction:
{instruction}
# Response:
"""
(10) 推論の実行。
print(llm(generate_prompt("日本の首都は?")))
日本の首都は東京です。
(11) 推論の実行。
print(llm(generate_prompt("日本で一番人気のアニメは?")))
日本で一番人気のアニメは、「名探偵コナン」です。このアニメは世界的にも高く評価されており、ヒットシリーズとなりました。アニメでは、主人公たちがいかにして協力しあい、相手を倒すかを描いています。
また、「進撃の巨人」や「蒼き鋼のアルペジオ」なども人気を集めています。
3. LlamaIndexの基本プロンプトの動作確認
LlamaIndexのQAプロンプトの動作を確認します。RWKVは、質問応答をAlpacaのInstructプロンプトで学習しているので、その書式も試してみます。
3-1. 日本語 + LlamaIndexのQAプロンプト
質問内容を理解できてなさそうです。
qa_prompt="""Context information is below.
---------------------
ギターヒーロー
ひとりが動画投稿サイトで活動する際に用いるハンドルネーム。ひとりが普段人前に出せないが内面に抱えている承認欲求の象徴とも言えるもので、現実のひとりからはかけ離れた「バスケ部エースの彼氏持ち」や「ラインの友達数は1000人超え」といった設定がつけられている[注 11][38]。顔を隠すアングルから撮影された人気バンドのカバー動画を投稿しており、投稿サイトでの登録者数は8万人近く[39]。ぽいずん♡やみのような音楽関係者からも注目を集めている。動画は直樹によって収益化されており、文化祭ライブで壊れたギターを新調する費用等に充てられた[40]。
ライブでの現在の自身の実力ではギターヒーローの名前でファンを集めても満足させるだけの演奏ができないというひとりの考えから、正体が「結束バンドの後藤ひとり」であることは公にはされていない[注 12]。
---------------------
Given the context information and not prior knowledge, answer the question: ひとりちゃんの得意な楽器は?"""
print(llm(qa_prompt))
3-2. 英語 + LlamaIndexのQAプロンプト
少し質問内容を理解してそうですが、まだまだです。
qa_prompt="""Context information is below.
---------------------
guitar hero
A handle name used by one person when working on a video posting site. It can be said that it is a symbol of the desire for approval that one person can not usually show in public, but is far from being a real person. is attached [Note 11][38]. He posts cover videos of popular bands shot from angles that hide his face, and the number of registrants on the posting site is nearly 80,000 [39]. He has also attracted attention from music insiders like Poison Yami. The video was monetized by Naoki, and was used for the cost of replacing the broken guitar at the school festival live [40].
With his current ability in live performances, he thinks that even if he gathers fans under the name of Guitar Hero, he cannot perform enough to satisfy them. No [Note 12].
---------------------
Given the context information and not prior knowledge, answer the question: Hitori-chan's favorite instrument?"""
print(llm(qa_prompt))
3-3. 日本語 + AlpacaのInstructプロンプト
少し質問内容を理解してそうですが、まだまだです。
instruction="ひとりちゃんの得意な楽器は?"
input="""ギターヒーロー
ひとりが動画投稿サイトで活動する際に用いるハンドルネーム。ひとりが普段人前に出せないが内面に抱えている承認欲求の象徴とも言えるもので、現実のひとりからはかけ離れた「バスケ部エースの彼氏持ち」や「ラインの友達数は1000人超え」といった設定がつけられている[注 11][38]。顔を隠すアングルから撮影された人気バンドのカバー動画を投稿しており、投稿サイトでの登録者数は8万人近く[39]。ぽいずん♡やみのような音楽関係者からも注目を集めている。動画は直樹によって収益化されており、文化祭ライブで壊れたギターを新調する費用等に充てられた[40]。
ライブでの現在の自身の実力ではギターヒーローの名前でファンを集めても満足させるだけの演奏ができないというひとりの考えから、正体が「結束バンドの後藤ひとり」であることは公にはされていない[注 12]。"""
print(llm(generate_prompt(instruction=instruction, input=input)))
3-4. 英語 + AlpacaのInstructプロンプト
正解です。
instruction="Hitori-chan's favorite instrument?"
input="""guitar hero
A handle name used by one person when working on a video posting site. It can be said that it is a symbol of the desire for approval that one person can not usually show in public, but is far from being a real person. is attached [Note 11][38]. He posts cover videos of popular bands shot from angles that hide his face, and the number of registrants on the posting site is nearly 80,000 [39]. He has also attracted attention from music insiders like Poison Yami. The video was monetized by Naoki, and was used for the cost of replacing the broken guitar at the school festival live [40].
With his current ability in live performances, he thinks that even if he gathers fans under the name of Guitar Hero, he cannot perform enough to satisfy them. No [Note 12]."""
print(llm(generate_prompt(instruction=instruction, input=input)))
「LlamaIndex」も、top_k=1であれば、プロンプトテンプレートでAlpacaのInstructプロンプトに書き換えれば動くかもしれません。
4. 追加の動作確認
たまたま成功した可能性もあるため、「英語 + AlpacaのInstructプロンプト」で追加の動作テストを行います。
4-1. ひとりちゃんのハンドルネームは?
正解です。
instruction="What is Hitori-chan's handle name?"
input="""guitar hero
A handle name used by one person when working on a video posting site. It can be said that it is a symbol of the desire for approval that one person can not usually show in public, but is far from being a real person. is attached [Note 11][38]. He posts cover videos of popular bands shot from angles that hide his face, and the number of registrants on the posting site is nearly 80,000 [39]. He has also attracted attention from music insiders like Poison Yami. The video was monetized by Naoki, and was used for the cost of replacing the broken guitar at the school festival live [40].
With his current ability in live performances, he thinks that even if he gathers fans under the name of Guitar Hero, he cannot perform enough to satisfy them. No [Note 12]."""
print(llm(generate_prompt(instruction=instruction, input=input)))
4-2 ギターヒーローの登録者数は何万人?
正解です。
instruction="How many subscribers does Guitar Hero have?"
input="""guitar hero
A handle name used by one person when working on a video posting site. It can be said that it is a symbol of the desire for approval that one person can not usually show in public, but is far from being a real person. is attached [Note 11][38]. He posts cover videos of popular bands shot from angles that hide his face, and the number of registrants on the posting site is nearly 80,000 [39]. He has also attracted attention from music insiders like Poison Yami. The video was monetized by Naoki, and was used for the cost of replacing the broken guitar at the school festival live [40].
With his current ability in live performances, he thinks that even if he gathers fans under the name of Guitar Hero, he cannot perform enough to satisfy them. No [Note 12]."""
print(llm(generate_prompt(instruction=instruction, input=input)))
5. おわりに
RWKVは、「GPT-4」「GPT-3.5」のような様々なプロンプト構文に対応する能力は"まだ"なさそうですが、学習したことはできるので、ファインチューニング (LoRAなど) +プロンプトテンプレートのカスタマイズで、「LangChain」や「LlamaIndex」で使えるようになりそうな予感です。
この記事が気に入ったらサポートをしてみませんか?