こんにちは、サイオステクノロジーの佐藤 陽です。
今回は、RAGの評価ツールであるRagasの紹介をしたいと思います。
RAGに限らずですが、生成AIを使ったアプリは評価が難しいとよく言われます。
RAGに関しては、RagasというOSSが評価用のフレームワークが存在しており、OpenAI社の発表でも紹介されていました。
そこで今回は、「Ragasをとりあえず使ってみる!」というコンセプトで記事を書いていきたいと思います。
- RAGを作ってみたはいいものの、システムの精度が分からない
- Ragas使ってみたいけど使い方がいまいち分からない
といった方は、ぜひ最後までご覧ください!
※アップデート
2024年10月ごろに、Ragasについて0.2系へのアップデートがありました。
こちらの記事で0.2系へのアップデート情報をまとめています。
ただし、ある程度Ragasについての理解がある前提で書いていますので
一度本記事を読んでいただいた後に、アップデート内容を確認していただいた方が理解がより捗るかと思います!
はじめに
Ragasも既に色々なところで紹介されているのですが、 複雑なユースケースに組み込まれていたりしているケースも多くありました。
そこで
- Ragas単体の挙動や使い方を知りたい!
- とりあえずミニマムな感じで使ってみたい!
という方向けに、 最小限の形でRagasを使い、使い方や評価項目について解説したいと思います。
なんなら今回の記事では、RAGの構築さえ行いません!!
RAGが構築されていると仮定して、Ragasへの入力は仮で自前で用意していきます。
そのため今回の評価結果はまったく当てになりません。
あくまで今回はRagasの概要と手法を学ぶだけです。
そんなチートな内容になっていますが、最後までご覧いただければ幸いです。
なお、今回はAzure OpenAI ServiceとRagasの組み合わせで評価を行っていきたいと思います。
Ragasとは
概要
簡単にRagasの紹介をします。
RagasはOSSとして公開されている、RAGのパイプラインを評価するためのフレームワークになります。
恐らくですが「ラグァス」と読みます。
RAGを構築するにあたっては
- 使用するLLMモデル
- チャンクのサイズ
- VectorStoreの検索方法
- プロンプトの内容
など
決めるべきパラーメータが様々があり、その内容によってRAGの性能が決まってきます。
ただレスポンスが自然言語で返ってくることもあり、RAGを評価することはなかなか難しいとされています。
そこを定量的に評価してくれるのがRagasです。
おそらくRAGを評価する方法としてはかなりメジャーなフレームワークであり、OpenAIの発表のなかでも紹介されています。
評価方法
まずは何を評価対象(インプット)とするか、について解説したいと思います。
Ragasで評価を行う際に利用するevaluate関数
を見てみると、引数としてdataset
というオブジェクトを持ちます。
更にdatasetの中身を見ると、question
, contexts
,answer
,ground_truth
の4つの値が含まれています。
この4つがRAGを評価するために利用されるパラメータになります。
それぞれについて解説します。
パラメータ | 型 | 内容 |
question | list[str] | ユーザーがRAGに与えた質問 |
contexts | list] | RAGが回答を作成するにあたり、参照した情報 (VectorStoreなどの外部DBから、質問に関連した情報として取得された値(チャンク)) |
answer | list[str] | questionに対して、実際にRAGから返された回答内容 |
ground_truth | list] | questionに対する真の答え (これは評価前にユーザーが自前、もしくはRagasの機能等を利用して用意しておきます。) |
評価項目
次に評価項目(アウトプット)を見ていきたいと思います。
表にまとめてみましたが、正直なところ厳密に正しいかは自信がないです…。
公式ドキュメントの例や、計算方法を読むのが一番わかりやすいかと思います。
個人的にひとつポイントだと思った点としては、正しい回答を行っていても答えが冗長だとスコアが低くなる点です。
正確かつ簡潔に答えるようにRAGを組み立てていく必要がありそうです。
評価項目 | 評価内容 | 評価対象 |
Faithfulness | LLMによって生成されたanswerの内容をステートメントで区切り、それがcontextsの内容から推論できるかが評価されます。 | contextsとanswer |
Answer relevancy | LLMを利用して、answerから想定される質問を生成します(リバースエンジニアリング) そしてリバースエンジニアリングした質問と、questionの値のコサイン類似度が評価結果となります。 |
questionとcontexrとanswer |
Context recall | ground_truthの回答をステートメントで区切り、区切ったステートメントがcontextsの内容とどれくらい関連しているかが評価されます。 ground_truthの内容を網羅しているようなcontextであれば高いスコアが割り当てられます。 |
contextsとground_truth |
Context precision | contextsの中にground_truthのワードが含まれ、なおかつそれが上位のチャンクとしてランキングされているかどうかを示します。 ground_truthのワードが上位のチャンクのcontexts中に含まれていると、高いスコアが割り当てられます。 |
ground_truthとcontexts |
Context relevancy | ユーザーからのquestionに対して、どれだけ関連されたcontextsが取得されたかを表します。 questionと関連の高いcontextsが存在していればスコアが高くなります。 また、必要な情報が含まれていたとしても、冗長な内容が含まれている場合スコアは下がります。 |
questionとcontexts |
Context entity recall | ground_truthとcontextsに含まれるエンティティ(ワード)にどの程度相関があるかを表します。 ground_truthに含まれるエンティティがcontextsにも多く含まれているほど高いスコアが得られます。 |
ground_truthとcontexts |
Answer semantic similarity | ground_truthとanswerがどれだけ類似しているかを評価します。 それぞれの値をベクトル化し、これらのコサイン類似度を計算します。 |
ground_truthとanswer |
Answer correctness |
得られた回答の正確さを評価します。 |
ground_truthとanswer |
また注意事項として
評価を行う際にChatの応答や、EmbeddingsなどAzure OpenAIの活用を多くしています。
Ragas自体はOSSなため利用にお金はかかりませんが、中の処理でLLMを利用しているため、むやみやたらに評価を行うとコストがかさむ可能性があります。
実装
評価対象および評価項目が分かったところで実際にRagasを使っていきます。
先程も述べた通り、今回はRAGのパイプラインは構築しません。
RAGを組んだつもりになって、自前で上記の評価対象のパラメータを作っていきます。
事前準備
今回は評価を行うにあたり、Azure OpenAI Service上にデプロイしたモデルを利用します。
AOAI上にChatモデルとEmbeddingsモデルをデプロイしておいてください。
サンプルドキュメント
RAGを構築しないといっても何にも題材がないと分かりづらいため、RAGに与える文章をChatGPTに考えてもらいました。
架空のミュージシャンの内容なので、一般的なLLMは知る由もありません。
この内容に回答できるよう、RAGを構築していく。といったケースを想定します。
名前: 白石 玲奈 (Shiraishi Rena)
年齢: 28歳
生年月日: 1996年3月15日
デビューした歳: 20歳
リリースしたアルバムと詳細:
1. 『青い夢』 (Blue Dream)
- リリース日: 2016年5月20日
- 詳細: デビューアルバムであり、瑞々しい感性と透明感あふれるボーカルで話題を呼んだ。アルバムには、青春の儚さや未来への希望を描いた曲が多く収録されており、特に「君と見た空」がシングルカットされ大ヒットを記録。楽曲は全て自身が作詞作曲を手掛け、プロデューサーには有名音楽プロデューサーの田中亮を迎えた。
2. 『流星の詩』 (Meteor Poem)
- リリース日: 2018年9月12日
- 詳細: セカンドアルバムで、より成熟した音楽性と深みのある歌詞が特徴。人生の様々な局面や感情を詩的に表現した楽曲が揃っており、「夜空に咲く花」がシングルとしてリリースされ、大人のリスナーからも支持を得た。アルバム全体を通じて、一貫したテーマとして「変化」と「成長」が描かれている。
3. 『永遠の一瞬』 (Eternal Moment)
- リリース日: 2021年11月25日
- 詳細: 三枚目のアルバムでは、さらに多様な音楽ジャンルに挑戦。エレクトロニカやアンビエントなどの要素を取り入れ、新たなサウンドを追求している。特に「時の砂」が注目を集め、音楽チャートで長期間ランクイン。アルバムのテーマは「時間」と「記憶」であり、聴く者に深い感動を与える作品となっている。
生い立ち:
白石玲奈は、東京の下町で生まれ育つ。幼少期から音楽に親しみ、ピアノとギターを独学で学ぶ。中学生の時に初めて作曲を始め、高校生になると地元のライブハウスで演奏するようになる。高校卒業後、音楽専門学校に進学し、本格的に音楽理論やボーカルトレーニングを学ぶ。20歳の時に自主制作アルバムをリリースし、これがレコード会社の目に留まりプロデビューを果たす。彼女の音楽は、その透明感のある声と詩的な歌詞、そして心に響くメロディで多くのファンを魅了している。
出演したフェス一覧:
1. フジロックフェスティバル (2017, 2019, 2022)
- 日本最大級の野外音楽フェスティバルに複数回出演。特に2019年にはメインステージでのパフォーマンスが大絶賛された。
2. サマーソニック (2018, 2021)
- 国内外のアーティストが集う都市型音楽フェス。玲奈のパフォーマンスはエネルギッシュで、観客を魅了した。
3. ロック・イン・ジャパン・フェス (2018, 2020, 2023)
- 日本最大のロックフェスティバルで、彼女のライブは毎回大きな話題となり、観客を熱狂させた。
4. コーチェラ・フェスティバル (2019)
- アメリカ・カリフォルニアで開催される世界的な音楽フェスティバルに出演。日本人アーティストとして初めての参加で、海外でも注目を集めた。
5. グラストンベリー・フェスティバル (2022)
- イギリスの伝統ある音楽フェスティバルに出演し、そのパフォーマンスが高く評価された。
白石玲奈は、その卓越した音楽センスとパフォーマンスで、国内外での評価を高め続けている。彼女の今後の活躍にも大いに期待される。
評価対象の準備
先程も述べた通り、Ragasへの入力は以下4つのパラメータです。
- question
- contexts
- answer
- ground_truth
それぞれの値を以下のように3パターン用意します。
※くどいほど繰り返しますが、今回はすべてのパラメータをRAGやベクトルストアを使わず、仮想的に自前で用意しています。
case 1
「関連ドキュメントの参照が正しく行われ、回答内容も正しいケース」
contextsの取得が正しく行われており、それに基づくChat LLMの回答内容も正しいケースです。
question | contexts | answer | ground_truth |
“白石 玲奈は何歳の時にデビューしましたか?”
|
[“名前: 白石 玲奈 (Shiraishi Rena) 年齢: 28歳 生年月日: 1996年3月15日 デビューした歳: 20歳 リリースしたアルバム 1 アルバム名: 『青い夢』 (Blue Dream) リリース日: 2016年5月20日 詳細: デビューアルバムであり、瑞々しい感性と透明感あふれるボーカルで話題を呼んだ。アルバムには、青春の儚さや未来への希望を描いた曲が多く収録されており、特に「君と見”,
“の下町で生まれ育つ。幼少期から音楽に親しみ、ピアノとギターを独学で学ぶ。中学生の時に初めて作曲を始め、高校生になると地元のライブハウスで演奏するようになる。高校卒業後、音楽専門学校に進学し、本格的に音楽理論やボーカルトレーニングを学ぶ。20歳の時に自主制作アルバムをリリースし、これがレコード会社の目に留まりプロデビューを果たす。彼女の音楽は、その透明感のある声と詩的な歌詞、そして心に響くメロディで多くのファンを魅了している。出演したフェス一覧:フジロックフェスティバル (2”]
|
“白石 玲奈がデビューしたのは20歳の時です。”
|
“20歳”
|
case 2
「関連ドキュメントの参照が正しく行われているが、回答内容が正しくないケース」
contextsの取得が正しく行われているが、それに基づくChat LLMの回答内容が誤っているケースです。
question | contexts | answer | ground_truth |
“2枚目にリリースしたアルバムのタイトルは何ですか?”
|
[“リリースしたアルバム 2アルバム名: 『流星の詩』 (Meteor Poem)リリース日: 2018年9月12日 詳細: セカンドアルバムで、より成熟した音楽性と深みのある歌詞が特徴。人生の様々な局面や感情を詩的に表現した楽曲が揃っており、「夜空に咲く花」がシングルとしてリリースされ、大人のリスナーからも支持を得た。アルバム全体を通じて、一貫したテーマとして「変化」と「成長」が描かれている。”,
“の下町で生まれ育つ。幼少期から音楽に親しみ、ピアノとギターを独学で学ぶ。中学生の時に初めて作曲を始め、高校生になると地元のライブハウスで演奏するようになる。高校卒業後、音楽専門学校に進学し、本格的に音楽理論やボーカルトレーニングを学ぶ。20歳の時に自主制作アルバムをリリースし、これがレコード会社の目に留まりプロデビューを果たす。彼女の音楽は、その透明感のある声と詩的な歌詞、そして心に響くメロディで多くのファンを魅了している。出演したフェス一覧:フジロックフェスティバル (2”]
|
“2枚目にリリースされたアルバムのタイトルは「永遠の一瞬」です。”
|
“『流星の詩』 (Meteor Poem)”
|
case 3
「関連ドキュメントの参照が誤っており、回答内容が正しくないケース」
contextsの取得がうまくいっておらずが、それに伴いChat LLMの回答内容が誤っているケースです。
question | contexts | answer | ground_truth |
“2019年に出演したフェスは何ですか?”
|
[ “名前: 白石 玲奈 (Shiraishi Rena) 年齢: 28歳 生年月日: 1996年3月15日 デビューした歳: 20歳 リリースしたアルバム 1 アルバム名: 『青い夢』 (Blue Dream) リリース日: 2016年5月20日 詳細: デビューアルバムであり、瑞々しい感性と透明感あふれるボーカルで話題を呼んだ。アルバムには、青春の儚さや未来への希望を描いた曲が多く収録されており、特に「君と見”,
“の下町で生まれ育つ。幼少期から音楽に親しみ、ピアノとギターを独学で学ぶ。中学生の時に初めて作曲を始め、高校生になると地元のライブハウスで演奏するようになる。高校卒業後、音楽専門学校に進学し、本格的に音楽理論やボーカルトレーニングを学ぶ。20歳の時に自主制作アルバムをリリースし、これがレコード会社の目に留まりプロデビューを果たす。彼女の音楽は、その透明感のある声と詩的な歌詞、そして心に響くメロディで多くのファンを魅了している。出演したフェス一覧:フジロックフェスティバル (2”]
|
“ロック・イン・ジャパン・フェスとコーチェラ・フェスティバルに出演しました。”
|
“フジロックフェスティバルとコーチェラ・フェスティバル”
|
実装の流れ
以上の情報に基づき、Ragasの実装に必要最小限な実装を行っていきます。
必要なパッケージのインストール
! pip install python-dotenv ragas langchain_openai datasets
環境変数の設定
import os
from dotenv import load_dotenv
load_dotenv()
os.environ["AZURE_OPENAI_ENDPOINT"] = os.getenv("AZURE_OPENAI_ENDPOINT")
os.environ["AZURE_OPENAI_API_KEY"] = os.getenv("AZURE_OPENAI_API_KEY")
読み込むenvファイルとしては以下のものを用意しておきます。
.env
AZURE_OPENAI_ENDPOINT = "https://{resource-name}.openai.azure.com/"
AZURE_OPENAI_API_KEY = "api-key"
from ragas.metrics import (
context_precision,
answer_relevancy,
faithfulness,
context_recall,
context_relevancy,
context_entity_recall,
answer_similarity,
answer_correctness
)
# list of metrics we're going to use
metrics = [
context_precision,
answer_relevancy,
faithfulness,
context_recall,
context_relevancy,
context_entity_recall,
answer_similarity,
answer_correctness
]
次にRagas内で利用するためのchat_llmやembeddingsを構築していきます。
今回はAzure OpenAI Serviceを利用し、LangChainを経由して使っていきます。
from langchain_openai.chat_models import AzureChatOpenAI
from langchain_openai.embeddings import AzureOpenAIEmbeddings
chat_llm = AzureChatOpenAI(
openai_api_version="2024-02-01", # e.g., "2023-12-01-preview"
azure_deployment="gpt-35-turbo-16k",
temperature=0,
)
embeddings = AzureOpenAIEmbeddings(
openai_api_version="2024-02-01", # e.g., "2023-12-01-preview"
azure_deployment="text-embedding-ada-002",
)
次にデータの準備をします。 contextsに関しては配列の形にして入れてあげることに注意です。
# 質問事項
questions = [
"白石 玲奈は何歳の時にデビューしましたか?", # case 1
"2枚目にリリースしたアルバムのタイトルは何ですか?", # case 2
"2019年に出演したフェスは何ですか?" # case3
]
# 根拠となった情報(VectorStoreから取得した情報)
contexts = [
# case 1(正しい関連内容を取得)
[
"名前: 白石 玲奈 (Shiraishi Rena) 年齢: 28歳 生年月日: 1996年3月15日 デビューした歳: 20歳 リリースしたアルバム 1 アルバム名: 『青い夢』 (Blue Dream) リリース日: 2016年5月20日 詳細: デビューアルバムであり、瑞々しい感性と透明感あふれるボーカルで話題を呼んだ。アルバムには、青春の儚さや未来への希望を描いた曲が多く収録されており、特に「君と見",
"の下町で生まれ育つ。幼少期から音楽に親しみ、ピアノとギターを独学で学ぶ。中学生の時に初めて作曲を始め、高校生になると地元のライブハウスで演奏するようになる。高校卒業後、音楽専門学校に進学し、本格的に音楽理論やボーカルトレーニングを学ぶ。20歳の時に自主制作アルバムをリリースし、これがレコード会社の目に留まりプロデビューを果たす。彼女の音楽は、その透明感のある声と詩的な歌詞、そして心に響くメロディで多くのファンを魅了している。出演したフェス一覧:フジロックフェスティバル (2"
],
# case 2(正しい関連内容を取得)
[
"リリースしたアルバム 2アルバム名: 『流星の詩』 (Meteor Poem)リリース日: 2018年9月12日 詳細: セカンドアルバムで、より成熟した音楽性と深みのある歌詞が特徴。人生の様々な局面や感情を詩的に表現した楽曲が揃っており、「夜空に咲く花」がシングルとしてリリースされ、大人のリスナーからも支持を得た。アルバム全体を通じて、一貫したテーマとして「変化」と「成長」が描かれている。",
"の下町で生まれ育つ。幼少期から音楽に親しみ、ピアノとギターを独学で学ぶ。中学生の時に初めて作曲を始め、高校生になると地元のライブハウスで演奏するようになる。高校卒業後、音楽専門学校に進学し、本格的に音楽理論やボーカルトレーニングを学ぶ。20歳の時に自主制作アルバムをリリースし、これがレコード会社の目に留まりプロデビューを果たす。彼女の音楽は、その透明感のある声と詩的な歌詞、そして心に響くメロディで多くのファンを魅了している。出演したフェス一覧:フジロックフェスティバル (2",
],
# case 3(誤った関連内容を取得)
[
"名前: 白石 玲奈 (Shiraishi Rena) 年齢: 28歳 生年月日: 1996年3月15日 デビューした歳: 20歳 リリースしたアルバム 1 アルバム名: 『青い夢』 (Blue Dream) リリース日: 2016年5月20日 詳細: デビューアルバムであり、瑞々しい感性と透明感あふれるボーカルで話題を呼んだ。アルバムには、青春の儚さや未来への希望を描いた曲が多く収録されており、特に「君と見",
"の下町で生まれ育つ。幼少期から音楽に親しみ、ピアノとギターを独学で学ぶ。中学生の時に初めて作曲を始め、高校生になると地元のライブハウスで演奏するようになる。高校卒業後、音楽専門学校に進学し、本格的に音楽理論やボーカルトレーニングを学ぶ。20歳の時に自主制作アルバムをリリースし、これがレコード会社の目に留まりプロデビューを果たす。彼女の音楽は、その透明感のある声と詩的な歌詞、そして心に響くメロディで多くのファンを魅了している。出演したフェス一覧:フジロックフェスティバル (2"
]
]
# RAGから得られた回答
answers = [
"白石 玲奈がデビューしたのは20歳の時です。", # case 1(正解)
"2枚目にリリースされたアルバムのタイトルは「永遠の一瞬」です。", # case 2(不正解)
"ロック・イン・ジャパン・フェスとコーチェラ・フェスティバルに出演しました。 ", # case 3(不正解)
]
# 正しい答え
ground_truths = [
"20歳",
" 『流星の詩』 (Meteor Poem)",
"フジロックフェスティバルとコーチェラ・フェスティバル ",
]
用意したDictionaryをdatasetの形に変換します。
from datasets import Dataset
ds = Dataset.from_dict(
{
"question": questions,
"answer": answers,
"contexts": contexts,
"ground_truth": ground_truths
}
)
最後にRagasを使って評価の方を行います。
from ragas import evaluate
# 引数としてデータセット・評価項目・ChatLLM・Embeddingsを与える
result = evaluate(
ds, metrics=metrics, llm=chat_llm, embeddings=embeddings
)
result.to_pandas()
結果と考察
結果が以下のように表示されました。
case | faithfulness | answer_relevancy | context_recall | context_precision |
1 | 1.0 | 0.990947 | 1.0 | 1.0 |
2 | 1.0 | 0.946483 | 1.0 | 1.0 |
3 | 0.0 | 0.919827 | 1.0 | 0.0 |
case | context_relevancy | context_entity_recall | answer_similarity | answer_correctness |
1 | 0.222222 | 1.0 | 0.852763 | 0.963191 |
2 | 0.000000 | 0.0 | 0.810099 | 0.202525 |
3 | 0.000000 | 0.5 | 0.947935 | 0.611984 |
今回、インプットは適当に与えているため結果も当てにならないのですが
せっかくなので少し考察してみたいと思います。
考察1:Faithfulness
以下のような結果となりました。
case | faithfulness |
1 | 1.0 |
2 | 1.0 |
3 | 0.0 |
case 1, 3は問題ないように思えるのですが、case 2の1.0に関してはやや疑問が残ります。
faithfulnessなのでインプットパラメータのanswerとcontextsに注目します。
ここで、contextsの内容からanswerの内容が推論できれば高得点です。
そしてcase 2に関しては、「contextsの内容からanswerを推論できていない」という想定でパラメータを用意しています。
しかし、その意図と反してfaithfulnessは1.0という高いスコアが得られました。
answer | contexts |
2枚目にリリースされたアルバムのタイトルは「永遠の一瞬」です。 | [ “リリースしたアルバム 2アルバム名: 『流星の詩』 (Meteor Poem)リリース日: 2018年9月12日 詳細: セカンドアルバムで、より成熟した音楽性と深みのある歌詞が特徴。人生の様々な局面や感情を詩的に表現した楽曲が揃っており、「夜空に咲く花」がシングルとしてリリースされ、大人のリスナーからも支持を得た。アルバム全体を通じて、一貫したテーマとして「変化」と「成長」が描かれている。”, “の下町で生まれ育つ。幼少期から音楽に親しみ、ピアノとギターを独学で学ぶ。中学生の時に初めて作曲を始め、高校生になると地元のライブハウスで演奏するようになる。高校卒業後、音楽専門学校に進学し、本格的に音楽理論やボーカルトレーニングを学ぶ。20歳の時に自主制作アルバムをリリースし、これがレコード会社の目に留まりプロデビューを果たす。彼女の音楽は、その透明感のある声と詩的な歌詞、そして心に響くメロディで多くのファンを魅了している。出演したフェス一覧:フジロックフェスティバル (2”] |
faithfulnessの計算を意訳すると
faithfulness = |contextsの内容から、分割したanswerを推測できた数| / |ステートメントに分割したanswerの合計数|
という形になります。
今回、分母( "2枚目に2枚目にリリースされたアルバムのタイトルは「永遠の一瞬」です。"のステートメント
)に関してはanswerの文が短いので恐らく、1.0です。
そしてfaithfulnessの値が1.0であることから、分子に関しても値としては1.0で、contextsの内容からanswerが推測できていると判断されている、と予想できます。
人間から見ると答えが誤っているため、推測できないように思えますが
必ずしも「contextsの内容にanswerが含まれていない=推測できていない」という関係が成り立たないのかな、と思いました。
ここら辺はLLMがどういう判定するか…に依存しそうです。
考察2:Answer relevancy
以下のような結果となりました。
case | answer_relevancy |
1 | 0.990947 |
2 | 0.946483 |
3 | 0.919827 |
Answer relevancyなので、インプットパラメータのquestionとanswerに注目します。
answerからリバースエンジニアリングした質問内容と、questionの類似度が高ければ高いスコアです。
case | question | answer |
1 | 白石 玲奈は何歳の時にデビューしましたか? | 白石 玲奈がデビューしたのは20歳の時です。 |
2 | 2枚目にリリースしたアルバムのタイトルは何ですか? | 2枚目にリリースされたアルバムのタイトルは「永遠の一瞬」です。 |
3 | 2019年に出演したフェスは何ですか? | ロック・イン・ジャパン・フェスとコーチェラ・フェスティバルに出演しました。 |
スコア的にはcase 1 > case 2> case 3という感じになってます。
answerからどのようなquestionが推論されるかはRagasの実装や、LLM次第かと思うのですが、
超個人的な感想でいえば、妥当なスコアなのかな?と思います。
case 1のanswerを見ると、「デビューした年齢が聞かれているんだろうなぁ」と予想できますし
case 3に関しては「answerから2019年という内容を推論するのは難しいので少しスコアが低くなったのかな?」と予想されます。
考察まとめ
今回は2つの結果だけを考察してみました。
今回は仮想で用意したインプットパラメータを評価してるとはいえ
faithfulnessの部分は少し疑問が残る部分もあり、完全にRagasの結果をそのまま受け入れるのもいかがなものかな、というように思いました。
しっかりとRagasの評価項目のロジックに関して理解し、結果に対して考察を行える必要がありそうです。
まとめ
Ragasを使ってRAGの性能を定量的に測定することができました。
こういった定量的な結果をもとにRAGの各種パラメータを調整することで、要件を満たしているかの評価を行ったり、より精度の高いRAGを構築するための材料にできそうです。
個人的なポイントとしては
- 評価する際にはRagasの評価項目に対する知見(計算方法、インプット内容など)が必要
- 全ての項目に高いスコアを求めるのか、仕様に基づいて重要な項目にのみ高いスコアを求めるのかの判断が必要
次回は実際にRAGを組み、そのシステムをRagasで評価していきたいと思います。
ではまた!
参考
- Ragas
- RAG評価フレームワークのragasを使ってみた
- RAGの評価のフレームワーク Ragas について 提供されているMetrics(評価指標)を調べる!
- RAG評価ツールの “RAGAS” を使って、RAGパイプラインの性能を測定する