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
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
1.9k
Skill Connectionsやってみた / Introduction to Alexa's Skill Connection
kun432
0
560
ノンコーディングで始めるAlexaスキル開発 / Introduction to Alexa Skill Development with non-conding
kun432
0
390
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
The ROI of Quarkus for Spring Boot Applications
hollycummins
0
110
AIチームを指揮するOSS「TAKT」活用術 / How to Use “TAKT,” an OSS Tool for Orchestrating AI Teams
nrslib
6
880
Agentic UI
manfredsteyer
PRO
0
140
CSC307 Lecture 17
javiergs
PRO
0
320
net-httpのHTTP/2対応について
naruse
0
470
ローカルLLMでどこまでコードが書けるか -拡張版 / How much code can be written on a local LLM Extended
kishida
5
2.1k
生成AI時代にこそ効くGo | Why Go Works in the Age of Generative AI
mom0tomo
8
3.2k
Make SRE Operations Easier with Azure SRE Agent
kkamegawa
0
5.4k
jQueryをバージョンアップする前に使いたいjQuery Migrate
matsuo_atsushi
0
210
Go1.27で導入されるジェネリクスメソッドでできること
mackee
0
110
[2026年度第1回ORセミナー] 計画最適化ベンチャーと競技プログラミング人材
terryu16
0
260
フロントエンドとバックエンドで「1文字」を揃えよう
youkidearitai
PRO
0
260
Featured
See All Featured
Prompt Engineering for Job Search
mfonobong
0
340
Designing for Performance
lara
611
70k
Mobile First: as difficult as doing things right
swwweet
225
10k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.1k
The Language of Interfaces
destraynor
162
27k
Typedesign – Prime Four
hannesfritz
42
3.1k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.9k
Technical Leadership for Architectural Decision Making
baasie
3
400
AI: The stuff that nobody shows you
jnunemaker
PRO
8
710
How to train your dragon (web standard)
notwaldorf
97
6.7k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.7k
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