Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
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.4k
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
250
VoiceLunchJP#27 Voiceflow Updates 2022
kun432
0
240
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
250
Skill Connections やってみた / Introduction to Alexa Skill Connections
kun432
1
2k
Skill Connectionsやってみた / Introduction to Alexa's Skill Connection
kun432
0
590
ノンコーディングで始めるAlexaスキル開発 / Introduction to Alexa Skill Development with non-conding
kun432
0
410
Alexaでもparタグ使いたい!〜Alexaで発話とサウンドを並列再生する〜 / Speak with Background Music on Alexa
kun432
0
2.2k
Voiceflowで一人Advent Calendarをやってみた話 / Voiceflow TIPS Advent Calender in Japanese
kun432
0
710
Other Decks in Programming
See All in Programming
巨大モノリシックアプリ モダン化大作戦
ktcryomm
1
1k
更なる可用性を求めて、5年間運用したKotlinのアプリケーションをGoでリプレイスする話
ken_tunc
0
290
AGENTS.md Is Not Enough:Build Skills, Don't Download Them
lx_t
0
120
速く作れる。その次は、速く確かめられる開発へ 〜AIネイティブ開発を支える、Shift Down〜 / Can build fast. Next, moving to development where we can verify fast.
rkaga
5
3.3k
【高い買い物LT会】初任給で話題の国産フィジカルAIを買った話
akagami
PRO
0
160
個人開発基盤をまるごとCloudflareに引っ越して爆速で総合的体験を向上させた話
tinykitten
0
190
Family mrubyの進捗
kishima
1
130
C#の現在地 進化の歴史と、AI時代の.NET Everywhere
neuecc
4
2.4k
技術的負債の返済は、AI時代の複利で効く投資 — 経営としての意思決定とその遂行
curekoshimizu
0
1.5k
AI に Inclusive UI を書かせよう — Design Rules Skill で Compose UI を作り直す
theoriatec2024
1
490
そのリトライ、死んだコネクションを使い回していませんか ── GoのHTTPクライアントとHTTP/2を実プロダクト障害から学び直す
myus4a
0
150
GraphRAGのKnowledge Graphを 直接!見る/View-GraphRAG's-KnowledgeGraph-directly!
tyumugi1113
1
340
Featured
See All Featured
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
6.2k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
450
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.6k
Discover your Explorer Soul
emna__ayadi
2
1.3k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
340
How Software Deployment tools have changed in the past 20 years
geshan
1
34k
Visualization
eitanlees
152
17k
The agentic SEO stack - context over prompts
schlessera
0
940
The Invisible Side of Design
smashingmag
301
52k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
290
Embracing the Ebb and Flow
colly
88
5.2k
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