CAMEL-5B と SentenceTransformers で LlamaIndex を試す
「CAMEL-5B」と「Sentence Transformer」で「LlamaIndex」を試したのでまとめました。
1. CAMEL-5B と SentenceTransformers
公式チュートリアルをベースに、ローカルモデルに「CAMEL-5B」、埋め込みに「SentenceTransformers」(sentence-transformers/all-mpnet-base-v2)を使って、「LlamaIndex」を試しました。
2. ドキュメントの準備
はじめに、チャットボットに教える専門知識を記述したドキュメントを用意します。
今回は、マンガペディアの「ぼっち・ざ・ろっく!」のあらすじのドキュメントを英語に翻訳したものを用意しました。
・bocchi_en.txt
3. Colabでの実行
Google Colab での実行手順は、次のとおりです。
(1) Colabにdataフォルダを作成してドキュメントを配置。
左端のフォルダアイコンでファイル一覧を表示し、右クリック「新しいフォルダ」でdataフォルダを作成し、ドキュメントをドラッグ&ドロップします。
(2) パッケージのインストール。
# パッケージのインストール
!pip install pymupdf pygpt4all sentence_transformers accelerate
!pip install llama_index==0.6.38
(3) パッケージのインポート。
# パッケージのインポート
import torch
from langchain.embeddings.huggingface import HuggingFaceEmbeddings
from llama_index.llm_predictor import HuggingFaceLLMPredictor
from llama_index.node_parser.simple import SimpleNodeParser
from llama_index.prompts.prompts import SimpleInputPrompt
from llama_index import (
GPTVectorStoreIndex,
LangchainEmbedding,
LLMPredictor,
ServiceContext,
SimpleDirectoryReader,
PromptHelper
)
(4) ドキュメントの準備。
# ドキュメントの準備
documents = SimpleDirectoryReader("data").load_data()
print("documents :", documents)
(5) サービスコンテキストの準備。
# プロンプトのラッパーの準備
query_wrapper_prompt = SimpleInputPrompt(
"Below is an instruction that describes a task. "
"Write a response that appropriately completes the request.\n\n"
"### Instruction:\n{query_str}\n\n### Response:"
)
# HuggingFaceLLMPredictorの準備
hf_predictor = HuggingFaceLLMPredictor(
max_input_size=2048,
max_new_tokens=256,
generate_kwargs={"temperature": 0.25, "do_sample": False},
query_wrapper_prompt=query_wrapper_prompt,
tokenizer_name="Writer/camel-5b-hf",
model_name="Writer/camel-5b-hf",
device_map="auto",
tokenizer_kwargs={"max_length": 2048},
model_kwargs={"torch_dtype": torch.bfloat16}
)
# 埋め込みモデルの準備
embed_model = LangchainEmbedding(HuggingFaceEmbeddings(
model_name="sentence-transformers/all-mpnet-base-v2"
))
# サービスコンテキストの準備
service_context = ServiceContext.from_defaults(
chunk_size=512,
llm_predictor=hf_predictor,
embed_model=embed_model
)
(6) インデックスの準備。
# インデックスの準備
index = GPTVectorStoreIndex.from_documents(
documents,
service_context=service_context
)
index.storage_context.persist(persist_dir="./storage")
(7) クエリエンジンの準備。
# クエリエンジンの準備
query_engine = index.as_query_engine(
streaming=True,
similarity_top_k=3
)
(8) 推論の実行。
# 推論の実行
response_stream = query_engine.query("What instrument is Hitori Goto good at?")
response_stream.print_response_stream()
Guitar<|endoftext|>
response_stream = query_engine.query("What kind of person is Hitori Goto?")
response_stream.print_response_stream()
Hitori Goto is a mysterious and complex character, known for his strange abilities, such as hiding behind walls and remodeling masks, and his desire to regain his family's position in the family hierarchy. He is a high school student, a guitarist, and a video production student, and he is a fan of "Kessoku Band" and "SIDEROS". He is a talented guitarist and a skilled musician, but he struggles with his finances and has a tendency to be self-destructive.<|endoftext|>
response_stream = query_engine.query("Who is Nijika's best friend?")
response_stream.print_response_stream()
Ikuyo Kita<|endoftext|>
関連
この記事が気に入ったらサポートをしてみませんか?