はじめに
こんにちは、Webエンジニアの岩田史門(@SI_Monxy)です!
今回はRAGを用いた質疑応答システムの構築について記事を書いてみました!
改善点や修正点があれば、コメントにて優しくご指導いただけると嬉しいです!
概要
本記事では、RAG(Retrieval-Augmented Generation)を活用して、堅牢な質問応答システムを構築する方法を探ります。RAGは、情報検索型と生成型のAIモデルを組み合わせることで、ユーザーのクエリに対して正確で文脈に即した回答を提供します。
システム構築の手順
環境と依存関係のセットアップ
Pythonがインストールされていることを確認し、仮想環境を作成します。必要なライブラリをインストールします
pip install torch transformers datasets
データと事前学習モデルの準備
ドメインに適したデータセットを取得または準備し、事前学習モデルをダウンロードします
from transformers import RagTokenizer, RagRetriever, RagSequenceForGeneration
tokenizer = RagTokenizer.from_pretrained("facebook/rag-token-base")
retriever = RagRetriever.from_pretrained("facebook/rag-token-base")
generator = RagSequenceForGeneration.from_pretrained("facebook/rag-token-base")
質問応答機能の実装
質問を入力として受け取り、RAGを使用して回答を取得・生成する関数を定義します
def answer_question(question):
input_dict = tokenizer(question, return_tensors="pt")
retriever_output = retriever(input_dict["input_ids"].to("cuda"))
generator_output = generator.generate(
**retriever_output,
max_length=100,
num_return_sequences=1,
use_cache=True,
decoder_start_token_id=generator.config.bos_token_id,
temperature=1.0,
)
answer = tokenizer.batch_decode(generator_output, skip_special_tokens=True)[0]
return answer
質問応答システムのテスト
様々な質問をして、システムの応答を確認します
question = "フランスの首都はどこですか?"
print(answer_question(question))
question = "小説『1984年』の著者は誰ですか?"
print(answer_question(question))
まとめ
RAGを使用して質問応答システムを構築する基本的な手順を説明しました。情報検索型と生成型のモデルを統合することで、さまざまなドメインで正確な応答を提供するシステムを作成できます。