Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
RAGのretrievalの評価を “ranx”で行う / Evaluate retrival...
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Kuniaki Shimizu
May 24, 2024
Programming
3.3k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
RAGのretrievalの評価を “ranx”で行う / Evaluate retrival of RAG using "ranx"
Kuniaki Shimizu
May 24, 2024
More Decks by Kuniaki Shimizu
See All by Kuniaki Shimizu
VoiceLunchJP#27 Voiceflow Updates 2022 (EN)
kun432
0
240
VoiceLunchJP#27 Voiceflow Updates 2022
kun432
0
230
Voiceflowではじめる音声アプリ・チャットボット開発〜2022年版〜 / Introduction to Developing Voice Apps & Chatbots with Voiceflow
kun432
1
1.6k
VoiceLunchJP#3 VoiceflowでAudioPlayerスキルを作ろう!ハンズオン / VoiceLunchJP3 Alexa's Audio Player Hands-on using Voiceflow
kun432
0
240
Skill Connections やってみた / Introduction to Alexa Skill Connections
kun432
1
2k
Skill Connectionsやってみた / Introduction to Alexa's Skill Connection
kun432
0
570
ノンコーディングで始めるAlexaスキル開発 / Introduction to Alexa Skill Development with non-conding
kun432
0
400
Alexaでもparタグ使いたい!〜Alexaで発話とサウンドを並列再生する〜 / Speak with Background Music on Alexa
kun432
0
2.1k
Voiceflowで一人Advent Calendarをやってみた話 / Voiceflow TIPS Advent Calender in Japanese
kun432
0
700
Other Decks in Programming
See All in Programming
トークンをケチるな、設計しろ:GitHub Copilotを賢く使うコンテキスト戦略
ochtum
0
310
act1-costs.pdf
sumedhbala
0
210
技術記事、 専門家としてのプログラマ、 言語化
mizchi
14
7.4k
symfony/aiとlaravel/boost
77web
0
120
コーディングルールの鮮度を保ちたい for SRE NEXT 2026 / keep-fresh-go-internal-conventions-sre-next-2026
handlename
0
140
SREの積み重ねがAI駆動開発のガードレールになった ― 7つの実践/SRE Guardrails The 7
tomoyakitaura
8
3.9k
信頼性について考えてみる(SRE NEXT 2026 miniLT)
hayama17
0
150
壊れたパーサから始める関数型設計と構成的なパーサ #fp_matsuri
raiga0310
2
190
霧の中の代数的エフェクト
funnyycat
1
340
Snowflake Summitでの新機能 CoCo / CoWork / snowflake-summit-2026-overall-what-new-coco
tatsuhiro
1
220
Honoでのサプライチェーン侵害対策 〜 3つのライブラリに学ぶ
yusukebe
7
1.8k
アルゴリズムは何を圧縮しているのか ─ Haskell から育った「圧縮代数」というメンタルモデル
naoya
16
3.3k
Featured
See All Featured
Code Reviewing Like a Champion
maltzj
528
40k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.5k
We Have a Design System, Now What?
morganepeng
55
8.2k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.3k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
760
Claude Code のすすめ
schroneko
67
230k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Making the Leap to Tech Lead
cromwellryan
135
10k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
190
Test your architecture with Archunit
thirion
1
2.3k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
Transcript
RAGのretrievalの評価を “ranx”で行う @kun432
アジェンダ • 自己紹介 • RAGの評価について • ranxのご紹介 • ranx/retrieval単体評価を行うメリット・デメリット •
参考になる情報など
自己紹介
自己紹介 • Kuniaki Shimizu(@kun432) • 神戸在住のフリーランスエンジニア • ZennでLLM周りの記事をいろいろ書いてます https://zenn.dev/kun432 •
最近の興味 ◦ 競馬予想RAGエージェントを作りたい
RAGの評価について
RAG/LLMの評価ツール • Ragas • Prompt Flow • promptfoo • ARES
RAG全体をパイプラインとして評価するものが多い印象 ※全部触ったわけではないので個人的な主観です • TruLens • LangSmith • DeepEval • Uptrain
RAG
RAGパイプライン評価 クエリとコンテキスト の関連正 コンテキストの 正確性 コンテキストの 網羅率 生成された 回答の正確性 生成された
回答の関連性
シンプルに小さくやるというやり方
Garbage In, Garbage Out. (ゴミを入れたら、ゴミが出てくる)
RAG ここにフォーカス ここまでを評価
ranx
ranx • ランキング評価メトリクスのライ ブラリ • 情報検索・推薦システム の評価や比較が目的 • Python製 •
MITライセンス https://github.com/AmenRa/ranx
ranxで必要なもの 正解データ (Qrel) 実際の検索 結果データ (Run) 評価メトリクス 評価結果 TREC形式(.trec) →
TREC (Text REtrieval Conference) = NIST主催の情報検索技術の ワークショップで使用されるフォーマット(後述)
ranxがサポートしている評価メトリクス Hits Bpref Hit Rate RBP(Rank-biased Precision) Precision MRR(Mean Reciprocal
Rank) Recall MAP(Mean Average Precision) F1 DCG(Discounted Cumulative Gain) r-Precision NDCG(Normarized Discounted Cumulative Gain) ※「関連度のグラデーション」や「ランキングの順位」に意味があるものとないものがあるので注意 ※ 複数の結果を融合することもできるらしい
実際のRAGでやってみる
使用したデータセット • LINEが自治体向けAIチャットボット導入促進 に向けて、公開しているオープンデータ • シンプルなQ&A形式(Q:Aが1:1) https://linecorp.com/ja/csr/newslist/ja/2020/260 母子手帳を受け取りたいの ですが、手続きを教えてくだ さい。
窓口で妊娠届をご記入いた だき、母子手帳をお渡ししま す。住民票の世帯が別の方 が代理で窓口に来られる場 合は、・・・
Qrelの作成 母子手帳を受け取りたいの ですが、手続きを教えてくだ さい。 窓口で妊娠届をご記入いた だき、母子手帳をお渡ししま す。住民票の世帯が別の方 が代理で窓口に来られる場 合は、・・・ ID:Q_001
ID:A_001 Q_001 0 A_001 1 Q_002 0 A_002 1 Q_003 0 A_003 1 Q_004 0 A_004 1 Q_005 0 A_005 1 (snip) クエリID クエリに 関連する ドキュメントID 関連度 TSV
Runの作成 母子手帳を受け取りたいの ですが、手続きを教えてくだ さい。 ID:Q_001 Q001 Q0 A037 1 0.9046793350727792
openai-text-embedding-ada-002 Q001 Q0 A003 2 0.898394740756145 openai-text-embedding-ada-002 Q001 Q0 A108 3 0.8972154176078383 openai-text-embedding-ada-002 (snip) Q662 Q0 A349 97 0.8157339552059201 openai-text-embedding-ada-002 Q662 Q0 A468 98 0.815688009571736 openai-text-embedding-ada-002 Q662 Q0 A106 99 0.81553835940394 openai-text-embedding-ada-002 ベクトル DB 母子手帳は、妊娠届の内容を確認させていた だき、その場でお渡しします。 ・・・ 母子手帳の申請には診断書はいりませんが、 妊娠届に診断を受けた・・・ ID:A_037 ID:A_003 クエリID クエリで検索された ドキュメントID ランキング スコア タグ
Evaluate: QrelとRunを1対1で評価 from ranx import Qrels, Run, evaluate qrels =
Qrels.from_file("qrels.trec", kind="trec") run = Run.from_file("run_openai-text-embedding-ada-002.trec", kind="trec") score_dict = evaluate(qrels, run, ["hit_rate@5", "mrr"]) score_dict {'hit_rate@5': 0.850453172205438, 'mrr': 0.7342841784444143} 評価メトリクス
Compare: 複数のRunを比較して評価 from ranx import Qrels, Run, evaluate, compare qrels
= Qrels.from_file("qrels.trec", kind="trec") run_1 = Run.from_file("run_openai-text-embedding-ada-002.trec", kind="trec") run_2 = Run.from_file("run_openai-text-embedding-3-large.trec", kind="trec") report = compare(qrels, runs=[run_1, run_2], metrics=["hit_rate@5", "mrr"], max_p=0.01) report # Model Hit Rate@5 MRR --- ----------------------------- ------------ ------ a openai-text-embedding-ada-002 0.850 0.734 b openai-text-embedding-3-large 0.906ᵃ 0.814ᵃ 複数のRunを渡す
Compareの例: Embeddingモデルの比較 Notebook: https://gist.github.com/kun432/85fe25a7c0433d8686c38ff4239840ba ベース ライン
Compareの例: クエリ書き換えの比較 ベース ライン Notebook: https://gist.github.com/kun432/49b5be26963ab8c52a89fb66e839156e
• あくまでも今回使用したデータや実装に対する結果。 ◦ 別のデータを使う・異なる実装等の場合には結果が異なる可能性 ◦ 特にLLMを使っている場合(HyDE等)、パラメータ・プロンプトにより、同じ データでも異なる結果になる可能性。 • notebookを公開しています。ご参考になれば。 注意
ranx/retrieval単体評価の メリット・デメリット
ranx/retrieval単体評価のメリット • シンプル ◦ シンプルで学習コストが低い ◦ 必要なものはTRECファイルだけ、フレームワークに依存せず、柔軟 性が高い • 低コスト
◦ retrieval単体のコストは比較的安価 • 実績のある評価手法 ◦ 既存の検索/ランキング/推薦システムの一般的な評価手法 ◦ ベクトルDB以外の検索ソースにも適用しやすい
ranx/retrieval単体評価のデメリット • あくまでもretrievalの評価のみ ◦ generationの評価は別途必要 • フレームワーク・プラットフォーム等での採用事例が少ない ◦ 自動化が必要なら組み込みが必要 •
評価メトリクスの知識は必要 ◦ ツールはシンプルだが、評価メトリクスの知識は必要 ◦ 関連度のグラデーションやランキング順まで評価するなら、相応の データを用意する必要がある ◦ それらに応じたメトリクス選定が必要
まとめ
まとめ • RAGのretrievalの品質評価は重要 • ranxはシンプルで始めやすい • retrieval以外の評価は他のツールを併用 ユースケースに合わせて選択
補足
補足: テストの実施条件 • Q&Aデータを使用してベクトルインデックスを作成 ◦ Aをベクトル化して、Qで検索(Q≠A) ◦ QとAは1:1でQrelを作成 • LlamaIndexを使用して実装
• 評価メトリクスは以下を使用 ◦ Hit Rate ▪ クエリに紐づく回答が検索結果に含まれるか ▪ top-k内に含まれるかどうか、順位は考慮されない ◦ MRR ▪ クエリに紐づく回答が検索結果の上位に含まれるか ▪ top-k内の順位が高いほど高スコア • Embeddingモデルは、OpenAI text-embedding-ada-002 をベースラインとして使用 • Completionが必要な場合は OpenAI gpt-3.5-turbo-0125&temperature=0.1で使用
• OpenAI ◦ text-embedding-ada-002 (ベースライン) ◦ text-embedding-3-small ◦ text-embedding-3-large •
Cohere ◦ embed-multilingual-v3 • Amazon Bedrock ◦ Amazon Titan Embeddings G1 • Hugging Face ◦ infloat/multilingual-e5-large ◦ infloat/multilingual-e5-large ◦ BAAI/bge-m3 補足: Embeddingモデルの比較
補足: クエリ書き換えの比較 • クエリ書き換えなし(ベースライン) • HyDE ◦ Hypothetical Document Embeddings
◦ クエリから仮の回答文をLLMに生成させて、その回答文でベクトル検索 ◦ https://arxiv.org/abs/2204.07496 • RAG Fusion ◦ クエリから複数のクエリをLLMに生成させて、それぞれのクエリで 検索。検索結果を融合アルゴリズムでリランキング。 ◦ https://github.com/Raudaschl/rag-fusion ◦ BM25等のキーワード検索と組み合わせたり、複数の融合アルゴリズムがあ る ◦ 今回はシンプルに類似クエリを生成してベクトル検索+ランク順位だけでリラ ンキング(Reciprocal Rank Fusion)
参考リンク
参考リンク • GitHubレポジトリ https://github.com/AmenRa/ranx • ranxドキュメント https://amenra.github.io/ranx/ • ranxを紹介しているブログ ◦
「ranxを使って検索システムのオフライン評価を する - Ahogrammer」 https://hironsan.hatenablog.com/entry/2023/10/13/085841 • 自分の記事 ◦ 「ranxを試す」 https://zenn.dev/kun432/scraps/1356729a3608d6 ◦ 「検索の評価指標をranxを使いながら理解する」 https://zenn.dev/kun432/scraps/0f1577a6988558
参考リンク • RAGの様々なテクニック ◦ 「RAGの性能を改善するための8つの戦略| Fintan」 https://fintan.jp/page/10301/ ◦ 「Retrieval-based LM
(RAG system) ざっくり理解する」 https://speakerdeck.com/smiyawaki0820/retrieval-based-lm-rag-sys tem-zatukurili-jie-suru ◦ 「RAGの実装戦略まとめ」 https://qiita.com/jw-automation/items/045917be7b558509fdf2 ◦ langchain-ai/rag-from-scratch https://github.com/langchain-ai/rag-from-scratch
参考リンク • TREC ◦ 公式サイト: https://trec.nist.gov/ ◦ Wikipedia: https://ja.wikipedia.org/wiki/TREC ▪
Qrelフォーマット https://trec.nist.gov/data/qrels_eng/ ▪ Runフォーマット https://trec.nist.gov/data/qa.html