見出し画像

Google Colab で LangChain + RWKV を試す

「Google Colab」で「LangChain + RWKV」を試したので、まとめました。

【注意】「Google Colab」で「RWKV-v4-14B」を実行するには、「Google Colab Pro/Pro+」のプレミアムが必要です。

前回

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) に配置。

20B_tokenizer.json

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

Answer in English.

Answer: I'm sorry, but I cannot answer this question as it is incomplete and requires more context information to provide a meaningful answer. Please provide more details or context for me to generate a meaningful response

【翻訳】
英語で答える。

回答: 申し訳ありませんが、この質問は不完全であり、意味のある回答を提供するにはより多くのコンテキスト情報が必要であるため、お答えできません。 意味のある回答を得るために、詳細またはコンテキストを提供してください

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

Answer: It is not possible to determine the exact favorite instrument of Hitori-chan based on the given context information. The context information provided only mentions that Hitori-chan has a guitar, and that he sometimes uses it for live performances. However, it does not provide any information about his preferred genre or style of music, or whether he has a particular instrument that he prefers to use for live performances. Additionally, the context information does not mention any other details about Hitori-chan's personal life or interests that could help to identify his favorite instrument. Therefore, it is not possible to determine Hitori-chan's favorite instrument based on the given context information alone.

【翻訳】
回答: 与えられたコンテキスト情報に基づいて、ひとりちゃんの正確なお気に入りの楽器を特定することはできません。 提供されたコンテキスト情報には、ひとりちゃんがギターを持っていて、ライブ パフォーマンスで時々ギターを使用していることだけが言及されています。 ただし、彼が好む音楽のジャンルやスタイル、またはライブパフォーマンスに使用することを好む特定の楽器を持っているかどうかについての情報は提供されません. さらに、コンテキスト情報には、ひとりちゃんの個人的な生活や、お気に入りの楽器を特定するのに役立つ可能性のある興味に関するその他の詳細については言及されていません。 したがって、与えられた文脈情報だけでは、ひとりちゃんの好きな楽器を特定することはできません。

3-3. 日本語 + AlpacaのInstructプロンプト

少し質問内容を理解してそうですが、まだまだです。

instruction="ひとりちゃんの得意な楽器は?"

input="""ギターヒーロー
ひとりが動画投稿サイトで活動する際に用いるハンドルネーム。ひとりが普段人前に出せないが内面に抱えている承認欲求の象徴とも言えるもので、現実のひとりからはかけ離れた「バスケ部エースの彼氏持ち」や「ラインの友達数は1000人超え」といった設定がつけられている[注 11][38]。顔を隠すアングルから撮影された人気バンドのカバー動画を投稿しており、投稿サイトでの登録者数は8万人近く[39]。ぽいずん♡やみのような音楽関係者からも注目を集めている。動画は直樹によって収益化されており、文化祭ライブで壊れたギターを新調する費用等に充てられた[40]。
ライブでの現在の自身の実力ではギターヒーローの名前でファンを集めても満足させるだけの演奏ができないというひとりの考えから、正体が「結束バンドの後藤ひとり」であることは公にはされていない[注 12]。"""

print(llm(generate_prompt(instruction=instruction, input=input)))

ひとりは結束バンドの後藤ひとりであることが確認されました。彼はギターを投げることを好むが、その活動は文化祭の後藤ひとりからのプレゼントであり、ライブでの現在の自身の能力ではなく、過去に持ち込まれた人名であることを公言しているため、「結束バンドの後藤ひとり」や「ラインの友達数は1000人超え」といった偽情報を流

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

Hitori-chan's favorite instrument is a guitar.

【翻訳】
ひとりちゃんの好きな楽器はギターです。

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

Hitori-chan's favorite instrument is a guitar.

【翻訳】
ひとりちゃんのハンドルネームはギターヒーローです。

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

Guitar Hero has approximately 80,000 subscribers.

【翻訳】
ギターヒーローには約 80,000 人の登録者がいます。

5. おわりに

RWKVは、「GPT-4」「GPT-3.5」のような様々なプロンプト構文に対応する能力は"まだ"なさそうですが、学習したことはできるので、ファインチューニング (LoRAなど) +プロンプトテンプレートのカスタマイズで、「LangChain」や「LlamaIndex」で使えるようになりそうな予感です。



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