見出し画像

Google Colab で LongChat-v1.5 を試す

「Google Colab」で「LongChat-v1.5」を試したので、まとめました。

【注意】「Google Pro/Pro+」のA100で動作確認しました。


1. LongChat-v1.5

「LongChat」は、コンテキスト長 32Kを持つ「Llama 2」ベースのモデルです。

2. LongChat-v1.5のモデル

「LongChat-v1.5」では、次の1種類です。

lmsys/longchat-7b-v1.5-32k

3. ドキュメントの準備

今回は、マンガペディアの「ぼっち・ざ・ろっく!」のあらすじのドキュメントを用意しました。

・bocchi.txt

4. Colabでの実行

Colabでの実行手順は、次のとおりです。

(1) パッケージのインストール。

# パッケージのインストール
!pip install langchain accelerate bitsandbytes sentence_transformers

(2) トークナイザーとモデルの準備。

import torch
from transformers import AutoTokenizer, AutoModelForCausalLM

# トークナイザーとモデルの準備
tokenizer = AutoTokenizer.from_pretrained(
    "lmsys/longchat-7b-v1.5-32k",
    use_fast=False,
)
model = AutoModelForCausalLM.from_pretrained(
    "lmsys/longchat-7b-v1.5-32k",
    load_in_8bit=True,
    torch_dtype=torch.float16,
    device_map="auto",
)

(3) Colabにドキュメントを配置。
左端のフォルダアイコンでファイル一覧を表示し、ドキュメント (bocchi.txt) をドラッグ&ドロップします。


(4) ドキュメントの読み込み。

# ドキュメントの読み込み
with open("bocchi.txt", "r", encoding="utf-8") as file:
    context = file.read()
print(len(context))
print(context)

(5) 質問応答。
プロンプトが長いほどVRAMを消費し、40GBでは 8000文字が限界(9000文字は Out Of Memory) でした。

# プロンプトの準備
prompt_template=f'''以下の文脈を読んで、最後の質問に答えてください。

{context[:8000]}

USER: 後藤ひとりの得意な楽器は?
ASSISTANT:'''

# 質問応答
input_ids = tokenizer(prompt_template, return_tensors='pt').input_ids.cuda()
output = model.generate(inputs=input_ids, temperature=0.7, max_new_tokens=512)
print(tokenizer.decode(output[0]))

# メモリ解放
del input_ids
del output
torch.cuda.empty_cache()
  :
USER: 後藤ひとりの得意な楽器は?
ASSISTANT: 後藤ひとりの得意な楽器はギターである。彼はギターを始め、毎日練習し、かなりの腕前を獲得していたが、友達を作ることができずに卒業した。その後、高校に入学し、ギターの演奏を動画配信し、「ギターヒーロー」としてネットで人気を集める。</s>

5. 追加の質問

10の追加の質問を行います。

# 入力
inputs = [
    "後藤ひとりの得意な楽器は?",
    "後藤ひとりの妹の名前は?",
    "後藤ひとりが加入したバンド名は?",
    "ギターヒーローの正体は?",
    "喜多郁代の髪の色は?",
    "伊地知虹夏が通う学校の名前は?",
    "山田リョウの趣味は?",
    "廣井きくりが所属するバンド名は?",
    "ライブハウス「STARRY」の店長の名前は?",
    "ぼっちちゃんが文化祭で披露した演奏法は?",
]

# チェーンの実行
for input in inputs:
    # プロンプトの準備
    prompt_template=f'''以下の文脈を読んで、最後の質問に答えてください。

{context[:8000]}

USER: {input}
ASSISTANT:'''

    # 推論の実行
    input_ids = tokenizer(prompt_template, return_tensors='pt').input_ids.cuda()
    output = model.generate(inputs=input_ids, temperature=0.7, max_new_tokens=512)
    print(tokenizer.decode(output[0]))

    # メモリ解放
    del input_ids
    del output    
    torch.cuda.empty_cache()

・後藤ひとりの得意な楽器はギターである。彼はギターを始め、毎日練習し、かなりの腕前を獲得していたが、友達を作ることができずに卒業した。その後、高校に入学し、ギターの演奏を動画配信し、「ギターヒーロー」としてネットで人気を集める。</s>
・後藤ふたりの妹の名前は、後藤美智代です。</s>【不正解】
・後藤ひとりが加入したバンド名は「結束バンド」である。</s>
・ギターローの正体は、結束バンドのメンバーの一人である後藤ひとりである。彼女は後藤美智代の娘で、後藤ふたりの妹である。後藤ひとりは、ギターを始めたいと聞いた際に、テレビのインタビューを見て、陰キャでもバンドを組んでも人気者になれると思い、ギターの練習を始める。その後、バンド「結束バンド」に参加し、ギターとボーカルを担当する。しかし、彼女はコミュ症のために友達を作ることができずにいた。その後、彼彼女は、伊地知虹夏に誘され、バンド活動を始めることになる。</s>
・山田リョウの趣味は、廃墟探索と古着屋巡りです。</s>
・ライブハウス「STARRY」の店長の名前は、大槻ヨヨヨコである。</s>【ドキュメントに記述がないことによるハルシネーション】
廣井きくりが所属するバンド名は「SICKHACK(シックハック)」である。</s>
・ぼっちちゃんは、文化祭で披露した演奏法を説明することができません。ただし、ぼっちちちゃんは結束バンドのメンバーで、ギターを担当しています。また、ぼっちちゃんは、後藤ひとりの妹であり、5歳です。そのため、文化祭で披露した演奏法は、後藤ひとりが披露した演奏法と同じです。</s>【不要情報あり】

正解率は7/10でした。

後藤ひとりと後藤ふたりがごっちゃになってるのと、ドキュメントに含まれない (8000文字制限のため) 質問はハルシネーションしてるようです。

関連



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