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
250
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
残高管理から台帳サービスへの進化
artoy
0
170
ソニーのクラウド共通基盤の変遷とAI時代の開発スタイルに合わせた進化 / The Journey of Sony’s Common Cloud Platform and Its Evolution for AI-Native Development
kenjiyoneyama
0
240
難しいけど、読めた。- OSSの入口に立った話。
sts11142
0
140
20260914 AIエージェント時代のPlatform Engineering LLM基盤とプロダクトの責務境界線
kanfab1
7
2.4k
setup-vp GitLab対応の裏側
naokihaba
0
150
phperだってパンチカードでコーディングしたい
o0h
PRO
0
230
Java 27新機能 / Java 27 new features
kishida
2
200
Everything will be SERVERLESS — 信じて運用した10年の経験値 / Everything Will be Serverless — Lessons Learned from 10 Years of Operational Experience
seike460
PRO
1
840
FreeBSDでZabbixを動かす
kenkino
0
360
Androidだけじゃない、DroidKaigiで広がった私の技術スタック
akkeylab
0
120
Rでドレミ/Do-Re-Mi_with_R
florets1
0
130
contenteditable と日本語入力に向き合う
colorful12
0
170
Featured
See All Featured
StorybookのUI Testing Handbookを読んだ
zakiyama
31
7k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
390
Become a Pro
speakerdeck
PRO
31
6.3k
Mind Mapping
helmedeiros
1
390
Making Projects Easy
brettharned
120
6.8k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
Designing Powerful Visuals for Engaging Learning
tmiket
1
600
How STYLIGHT went responsive
nonsquared
100
6.3k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
2
6.3k
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
700
The Pragmatic Product Professional
lauravandoore
37
7.5k
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