あなたのRAGベースのLLMシステムの成功を測る方法

あなたの美しいRAGベースのLLMシステムの成功を測る方法

機械を使って機械を評価する

定性評点と詳細な説明を用いた回答の新たなノベルメソッドを含む。

Image generated by Stable Diffusion XL

Research Augmented Generation(RAG)は、今年出現したLarge Language Models(LLMs)の最も一般的なユースケースです。テキスト要約と生成は個々のユーザーの焦点になることが多いですが、企業はこの技術を活用するためにデータを使用する能力が必要であると認識しています。自分がまだLLMsを使用している方法を反省してみると、テキスト生成がリストの上位にあります。Bardに質問をしてウェブを検索してもらいたいし、Claudeにメールやブログ記事をリライトしてもらってコンテンツをアップしたいです。しかし、最もエキサイティングな使用方法は、自分自身のデータをLLMに取り込むことです。自分のメモ、メール、カレンダー、Slackのメッセージを検索し、Llamaを別の私(しかし、今日より前の出来事の詳細を覚えている私)のように機能させたいのです。

この記事はRAGを構築する方法についてのものではありません(すでにいくつかの記事が存在しており、別の日にそれについての記事を書いています)。今日探求するのは、RAGシステムを評価する方法です。

RAGからデータを取り出す方法は?

進む前に基本を理解しましょう。RAGという言葉で話すとき、システムの二つの部分を指すことがあります。

知識源

知識源はベクトルデータベース、検索エンジン、メモリにロードされたテキストファイル、SQLデータなど、データが保存されているものです。

LLM

データを持ってきたら、それをLLMに入力します。これはコンテキストウィンドウを通して行われます。つまり、検索し、テキストを取得し、そのテキストをプロンプトに挿入し、質問をLLMに渡します。モデルはそれからコンテキストウィンドウのすべてを受け取り、回答を提供します。

なぜこれが重要なのか?

RAGシステムの評価について話す場合、評価するものを定義する前に何を評価するかを知る必要があります。今わかったように、評価すべきは二つの部分です。初期のデータ取得がここで最も重要な部分です。一般的に、LLMsはコンテキストに提供されたデータで要約/質問に優れています。不足している可能性があるのは、検索機能そのものです。

これらの知識源にはいくつかの制約があります。例えば、大きなテキストファイルを保存するためにベクトルデータベースを使用する場合、データをチャンクに分ける必要があります。これはどういう意味でしょうか?例えば、100ページの文書があるとしますが、データベースは1ページしか保存できません。ドキュメントをロードして検索しようとすると、データベースは1ページずつしか検査できません(少し簡略化していますが、大まかに言えばそうです)。検索にマッチするデータを見つけた時、私たちの質問の完全な回答がその1ページには存在しない可能性があります。残念ながら、私たちが返されるのはただ1ページだけです。これは、LLMの出力に関する心配をする前に、システムのこの部分を評価する必要がある理由を良い例です。

評価する必要があるものは何ですか?

これは、ほとんどの技術者が聞きたくない答えになるでしょう。知識源からの結果を完全に正確に評価するために、ある程度の人間の評価が必要とされるでしょう。なぜなのか?企業が自分たちのデータを使用していて、それがプライベートな場合、検索結果が完全に正確であることを自動化されたテストで確認するのは困難でしょう。心配しないでください、完全に手作業でなくても大丈夫です。一部を自動化することができます。もう少し詳しく見てみましょう。

この初期の検証と評価には、私が見るところ、二つの実装方法があります。

最初のオプションは、データセットに対して共通の予想される質問のセットを持ち、人間のQAチームが検索結果を検証することです。たとえば、チームが銀行のカスタマーサービスQ&Aボットを構築することになった場合、一般的な質問は、「口座に必要な最低金額はいくらですか?」「ローンの支払いはどのように行いますか?」「支店の営業時間は何時ですか?」などです。Q&Aチームが質問と予想される回答の両方をプログラム的に読み取れる形式のCSVファイルなどで提供できれば理想的です。その後、この記事で少し詳しく説明するいくつかの自動テストを使用できます。

もし時間やリソースがない場合は、第2の方法としてQAチームにリアルタイムで検索とレビューを行わせることができます。これは初期のPOCやプロトタイプの選択肢ですが、注意が必要です。実際の本番ワークロードにはスケーリングされません。

LLMの応答の評価

ナレッジソースからのデータが信頼性があるという一定の信頼感を得た後、最終的な回答が正確であることを確認する必要があります。RAGシステムは幻覚の可能性を減らすために優れていますが、基になるプロンプトを微調整することで拡張することも可能です。ただし、情報が抜け落ちたり、提供されたデータを誤解したり、事前の知識をトレーニングから持ち込もうとしたりすることがあります。

このステップの評価は、それ以前の検索の評価と同様です。QAチームが質問と予想される回答を提供できる場合、回答をプログラム的に評価することができます。

それでは、これらのオプションのいくつかを見てみましょう。

評価フレームワーク

LLMとRAGは非常に成熟度の低い段階にあることを忘れないようにすることが重要です。ChatGPTの登場からわずか1年しか経っておらず、毎日この分野でのさらなる進展、モデル、フレームワーク、研究が進んでいます。とはいえ、いくつかのメトリックがこれらのシステムのパフォーマンスを測定するための標準的な方法となりつつあります。

基本のLLMを評価する方法については説明しません。ARC、MMLU、HellaSwagなど、基礎となる言語モデルをターゲットにしたものがあります。これらの測定を自分で実行する必要はありません。以下のサイトをチェックして、さまざまなモデルのパフォーマンスを確認できます:https://llm-leaderboard.streamlit.app/およびhttps://huggingface.co/spaces/HuggingFaceH4/open_llm_leaderboardです。私たちはRAGシステムから得られる結果を測定することに興味があります。

それでは、ROUGE、BLEU、BLUERT、METEORなどのアルゴリズムを見ていきましょう。それぞれについて詳しく見ていきます。また、各メトリックを呼び出す方法と出力スコアの例についても短いコードスニペットを記載します。開始するために評価フレームワークをインポートし、スコアリングしたい参照と回答を含めます。

!pip install evaluate --quiet!pip install rouge_score --quiet!pip install importlib-metadata --quiet!pip install datasets==2.10.1 --quiet !pip install git+https://github.com/google-research/bleurt.git --quiet!pip install sacrebleu --quiet!pip --no-cache-dir install bert_score==0.3.9 --quiet!pip install sacremoses --quiet!pip install jiwer==2.5.1 --quiet!pip install Cython import evaluate# If you have a translation and reference corpus:predictions = ["In Dungeons & Dragons, the metallic dragons come in brass, bronze, copper, gold, and silver varieties. Each has scales in hues matching their name - brass dragons have brassy scales, bronze have bronze scales, etc. The metallic dragons are generally more benign than the chromatic dragons in D&D lore."]references =["""The five basic chromatic dragons (red, blue, green, black, and white) and metallic dragons (copper, brass, silver, gold, and bronze) appeared in the fifth edition Monster Manual (2014) in wyrmling, young, adult, and ancient. Gem dragons and other new-to-fifth-edition dragons appeared in Fizban's Treasury of Dragons (2021)"""]

ROUGE(Recall-Oriented Understudy for Gisting Evaluation)

ROUGEは、自動要約と機械翻訳の評価のためのメトリクスのセットです。システムの出力と参照要約の間の重複するn-gramの数に基づいています。

#predictions(リスト):スコアリングする予測のリスト。各予測は、トークンがスペースで区切られた文字列である必要があります。#references(リストまたはリスト[リスト]):各予測の参照リストまたは複数の参照のリスト。各参照は、トークンがスペースで区切られた文字列である必要があります。#rouge_types(リスト):計算するrougeのタイプのリスト。デフォルトは['rouge1'、'rouge2'、'rougeL'、'rougeLsum']です。#有効なrougeのタイプ:## "rouge1":uni-gram(1-gram)に基づくスコアリング## "rouge2":bi-gram(2-gram)に基づくスコアリング## "rougeL":最長共通部分列に基づくスコアリング## "rougeLSum":テキストを"\n"で分割する#use_aggregator(ブール):Trueの場合、集計結果を返します。デフォルトはTrueです。#use_stemmer(ブール):Trueの場合、Porterステマーを使用して単語の接尾辞を削除します。デフォルトはFalseです。rouge = evaluate.load('rouge')results = rouge.compute(predictions=predictions、references=references、use_aggregator=False)print(results)

{'rouge1':[0.3636363636363636]、'rouge2':[0.06185567010309278]、'rougeL':[0.22222222222222224]、'rougeLsum':[0.22222222222222224]}  

BLEU (バイリンガル評価スタディ)

BLEUは、機械翻訳の自動評価のためのメトリクスです。 候補翻訳のn-gramの適合率に基づいており、参照翻訳のセットとの比較を行います。

 #predictions(strのリスト):スコアリングする翻訳。#references(strのリストのリスト):各翻訳の参照。#max_order(int):BLEUスコアを計算するときに使用する最大n-gramオーダー。デフォルトは4です。#smooth(ブール):Linなどによるスムージングを適用するかどうか。デフォルトはFalseです。#bleu(float):BLEUスコア#precisions(floatのリスト):n-gram適合率の幾何平均、#brevity_penalty(float):短縮ペナルティ、#length_ratio(float):長さの比率、#translation_length(int):翻訳の長さ、#reference_length(int):参照の長さbleu = evaluate.load(“bleu”)results = bleu.compute(predictions=predictions、references=references、max_order=4)print(results)

{'bleu':0.07342349837092484、'precisions':[0.4262295081967213、0.11666666666666667、0.03389830508474576、0.017241379310344827]、'brevity_penalty':1.0、'length_ratio':20.333333333333332、'translation_length':61、'reference_length':3}  

BLEURT (BLEU回帰 with Transformers)

BLEURTは、自然言語生成(NLG)の評価メトリクスです。 BERTに基づいており、BLEURTは単語やフレーズの間の統計的関係を学習し、NLGの出力のパターンを特定することができます。

BLEURTは、機械翻訳、要約、質問応答など、さまざまなタスクでBLEUやROUGEなどの他のNLG評価メトリクスよりも優れた性能を発揮することが示されています。

#outputは常に0から(約1)の間の数値です。#この値は、生成されたテキストが参照テキストにどれだけ類似しているかを示し、1に近づくほどテキストが類似しています。 bleurt = evaluate.load( "bleurt"、module_type = "metric")results = bleurt.compute(predictions = predictions、references = references)print(results)

{'scores':[0.6028875708580017]}  

METEOR (明示的順序付けの翻訳の評価のためのメトリクス)

METEORは、機械翻訳の自動評価メトリクスです。また、語幹、同義語のマッチング、および標準的な単語の完全一致など、他のメトリクスには見られない機能も備えています。このメトリックは、より人気のあるBLEUメトリックで遭遇する問題を修正し、文またはセグメントレベルで人間の判断と良好な相関を示すように設計されています。

#予測:評価する予測のリスト。各予測は、トークンがスペースで区切られた文字列である必要があります。
#参照:予測ごとに1つの参照がある場合はリスト、予測ごとに複数の参照がある場合はリストのリストです。各参照は、トークンがスペースで区切られた文字列である必要があります。
#alpha:適合率と再現率の相対的な重みを制御するパラメータ。デフォルト値は0.9です。
#beta:断片化のペナルティの形状を制御するパラメータ。デフォルト値は3です。
#gamma:断片化ペナルティに割り当てられる相対的な重み。デフォルトは0.5です。
#outputs 0-1 - .317 is acceptable scoremeteor = evaluate.load('meteor')results = meteor.compute(predictions = predictions、references = references)print(results)

{'meteor':0.19316493313521543}

新しいものが約束されました!

しかし、あなたの注意を引くために、新しい考えを紹介したいと思います。これらの4つのアルゴリズムは、QAチームが回答/サマリが似ているかどうかを迅速に判断することができる定量的なスコアを提供しますが、いくつかの欠点があります。

まず、参照文と結果はユーザーの質問に答えられるほどには似ているかもしれませんが、それでも低いスコアを受けることがあります。よい基準を確立し、将来の回答をこの基準と比較するために、既知の質問と回答のセットを実行することが重要です。

次に、スコアが低い理由を教えてくれません。単語の繰り返しのためのペナルティがあるのか、一部の単語が欠落しているのか、サマリ全体で重要な部分が抜けているのかを教えてくれる方法はありません。

最後に、低いスコアを受けたからといって、人間が回答を十分でないと見なすとは限りません。基準はここで役立つかもしれませんが、RAGの回答を判断する際にはいくらかの懐疑心を持つことが重要です。

LLMsによるLLMsの評価

BLEURTは、RAGシステムからの回答を評価するために、なんらかの方法でLLMsを活用できるという考えを私たちに紹介しました。では、これを直接活用してみましょう。私たちはLLMに私たちの回答に対する質的なスコアを与えるよう命じ、スコアに関しての理由の箇条書きと説明付きの物語を提供します。これにより、数値スコアをユーザーやQAに報告することができ、またなぜ回答が悪いスコアを受けたのかについても詳細な情報を提供することができます。

以下は、ClaudeV2に使用できるサンプルのプロンプトテンプレートです。モデルに回答をスコアリングする方法、参照データを渡し、RAGシステムから受け取った回答を渡します。

prompt_data = """人間:与えられたテキストの要約について0〜10のスケールで評価してください。0は完全に正しくなく、10は与えられたテキストの完璧な要約です。スコアを付ける理由を説明してください。参照と要約の主な違いを箇条書きで挙げてください。参照テキストをREF:として、比較する要約をSUMMARY:として示します。REF:基本的な5つの色彩ドラゴン(赤、青、緑、黒、白)と金属のドラゴン(銅、真鍮、銀、金、ブロンズ)は、第5版のモンスターマニュアル(2014)にワームリング、若いドラゴン、成体ドラゴン、古代ドラゴンとして登場しました。宝石のドラゴンや、第5版のドラゴンに新しく登場したものは、フィズバンのドラゴンの宝庫(2021)SUMMARY:ダンジョンズ&ドラゴンズでは、金属のドラゴンは真鍮、ブロンズ、銅、金、銀のバラエティで登場します。それぞれのドラゴンは、名前に合わせた色調の鱗を持っています - 真鍮のドラゴンは真鍮の鱗、ブロンズのドラゴンはブロンズの鱗などを持っています。金属のドラゴンは一般的にクロマティックのドラゴンよりも温和です。アシスタント:""""

 スコア:5/10説明:要約はD&Dの金属のドラゴンに関するいくつかの正確な高レベルの情報をキャプチャしており、主なタイプのリストやクロマティックドラゴンと比較してより温和であることなどを示しています。しかし、リファレンステキストから多くの重要な詳細が抜けています:
- 言及されていたクロマティックドラゴン(赤、青、緑、黒、白)が言及されていません。
- 年齢カテゴリ(ワームリング、若いドラゴン、成体ドラゴン、古代ドラゴン)が言及されていません。
- モンスターマニュアルやフィズバンのドラゴンの宝庫のソースブックに言及していません。
- 参照テキストには金属とクロマティックのドラゴンの情報がありましたが、要約では金属のドラゴンについてのみ取り扱っています。

主な違い:
- クロマティックドラゴンの言及なし
- ドラゴンの年齢カテゴリの言及なし
- モンスターマニュアルやフィズバンのドラゴンの宝庫の言及なし
- 参照テキストの全体的な範囲ではなく、金属のドラゴンのみを扱っている
- 第5版の書籍間でのドラゴンの紹介タイムラインの伝達なし

ここにいます。チームが予想される回答を提供できれば、RAGの回答をLLMにフィードバックして評価することができます。利点は、関連するデータをまだ供給しているため、LLMの事前知識に頼る必要がないことです。RAGシステムで使用したLLMとは異なるLLMを使用することもできるため、出力を評価するために複数のモデルに問い合わせることさえできます。

この方法では、何が間違っていたかについての優れた説明も得ることができます。この例では、DNDユニバースに存在するドラゴンの種類についての質問がありました。判断するLLMは正しく、クロマティックドラゴンについて言及していないことを特定しました。ただし、質問に関係のないドラゴンの年齢、DNDモンスターマニュアル、または拡張冒険に対しても判断しました。これらの省略は私が尋ねた質問に重要ではありませんでしたが、これによりQAチームは自分で決めることができます。

今後どこに進むべきですか?

RAGベースのシステムとそれらを作成するために使用されるフレームワークは、毎日進化し続けています。その評価を行うための新しい方法や仕組みも進歩し続けます。LangChainのような巨大企業からは、このような作業を支援するツールも提供されています。たとえば、LangSmith などです。

さらなる進歩を待つ間、いくつかの手動の検証データとHuggingFaceのメトリクスライブラリまたはLLM自体の組み合わせを使用することで、これらのシステムを信頼するための優れた方法を得ることができます。

忘れないでください。新しいRAGを本番環境に展開する準備が整い、自信を持ったとしても、回答の評価は終わりません!日常のモニタリングと監査の努力の一環として、質問と回答を保存し、エンドユーザーに提供された回答を評価およびフラグ付けするためのヒューマンインザループの取り組みを計画する必要があります。ただし、それは別の日の話題です。

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more