0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

こんにちは、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を使用して質問応答システムを構築する基本的な手順を説明しました。情報検索型と生成型のモデルを統合することで、さまざまなドメインで正確な応答を提供するシステムを作成できます。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?