2026.7.31
ragasのFAQ検索におけるRAG
こんにちは
AIチームの戸田です
今回はRAG(Retrieval Augmented Generation)の評価フレームワーク、ragasをFAQ検索のタスクに適用し、その評価の妥当性を検証してみたいと思います。
今回の取り組みを行おうと思ったきっかけですが、以前業務でragasを使って、あるRAGシステムの評価を行なっていた際に、Off-Target Problemの(日本語の質問に対して英語で生成されてしまった)文章を高く評価してしまっているケースを見つけたからです。
検証のための検索対象のデータとして、Japanese FAQ dataset for e-learning systemを利用します。こちらはeラーニングシステムのQ&Aのデータセットで、FAQとそれに対する質問やFAQのカテゴリなどの情報が含まれています。データの詳細はリンク先をご参照ください。
データの読み込み
pandasを使ってデータセットを読み込んでいきます
import pandas as pd
ROOT = "{Japanese FAQ dataset for e-learning systemからダウンロードしたディレクトリ}"
question_df = pd.read_csv(f"{ROOT}/Questions.csv")
display(question_df.head())
answer_df = pd.read_csv(f"{ROOT}/Answers.csv")
display(answer_df.head())

AIDで質問とそれに対する回答が紐づいています。
なお回答のTextにはhtmlタグが混じっているようなので、以下のコードで前処理しておきます。
import re
def remove_html_tags(text):
clean = re.compile('<.*?>')
return re.sub(clean, '', text)
answer_df["Text"] = answer_df["Text"].map(remove_html_tags)検索用Indexの作成
Answer.csvの内容が回答となるような検索Indexを作成します。今回はLlamaIndexを使いました。
from llama_index import Document
from llama_index.llms import OpenAI
from llama_index import ServiceContext
from llama_index import VectorStoreIndex
documents = [Document(text=t) for t in answer_df["Text"].tolist()]
# モデルはgpt-3.5-turbo
gpt_35_context = ServiceContext.from_defaults(
llm=OpenAI(model="gpt-3.5-turbo", temperature=0.1), context_window=2048
)
index = VectorStoreIndex.from_documents(documents, service_context=gpt_35_context)
# 上位2件をcontextとする
query_engine = index.as_query_engine(similarity_top_k=2)コードには書いていませんが、環境変数にOpenAI APIのKeyを設定しておく必要があります。
これで
ragasのREADMEをみるとCI/CDのためのパイプラインを構築することを目的としているようなので、RAGシステムの性能を測るというよりは、リグレッションテスト的な働きを期待しているのではないかと思いました