LlamaIndex v0.10のEvaluatingをやってみる

2024/02/29

こちらの公式ドキュメント(v0.10.14)を参考に評価についてまとめていきます.

https://docs.llamaindex.ai/en/stable/understanding/evaluating/evaluating.html

はじめに

表かとベンチマークはLLM開発における重要な概念です.LLMアプリ(RAG, エージェント)のパフォーマンスを向上するにはそれを測定する方法が必要です.

LlamaIndexでは,生成された結果の品質を測定するための主要なモジュールを提供しています.また,検索品質の測定のための主要なモジュールもあります.LlamaIndexでの評価の仕組みについて詳しくはモジュールガイドを参照してください.

応答評価

応答は検索されたコンテキストと一致しているか?クエリとも一致しているか?参考回答やガイドラインと一致しているか?

以下は,忠実度にたいする1つの応答,すなわち幻覚がないなどの,応答がコンテキストと一致しているかを評価する簡単な例です.

from llama_index.core import VectorStoreIndex
from llama_index.llms.openai import OpenAI
from llama_index.core.evaluation import FaithfulnessEvaluator

# create llm
llm = OpenAI(model="gpt-4", temperature=0.0)

# build index
...
vector_index = VectorStoreIndex(...)

# define evaluator
evaluator = FaithfulnessEvaluator(llm=llm)

# query index
query_engine = vector_index.as_query_engine()
response = query_engine.query(
    "What battles took place in New York City in the American Revolution?"
)
eval_result = evaluator.evaluate_response(response=response)
print(str(eval_result.passing))

このFaithfulnessEvaluatorを使用した例は以下から試すことができます.

応答には,応答とその生成元のソースの両方が含まれます.評価者はそれらを比較し,応答がソースに忠実であるかどうかを判断します.

応答評価に関するモジュールガイドでさらに詳しく学ぶことができます.

検索評価

取得されたソースがクエリに関連しているかどうか,これは単一の検索を評価する簡単な例です.

from llama_index.core.evaluation import RetrieverEvaluator

# define retriever somewhere (e.g. from index)
# retriever = index.as_retriever(similarity_top_k=2)
retriever = ...

retriever_evaluator = RetrieverEvaluator.from_metric_names(
    ["mrr", "hit_rate"], retriever=retriever
)

retriever_evaluator.evaluate(
    query="query", expected_ids=["node_id1", "node_id2"]
)

これにより,クエリに対して検索された内容と検索されると予想されていた一連のノードが比較されます.

実際には,検索のバッチ全体を評価する必要があるでしょう.これを行う方法については,検索評価に関するモジュールガイドを参照してください.

まとめ

  • LLM開発において性能を評価することは重要である

  • 生成された応答の評価と検索されたソースの関連性の評価ができる

次に読む記事


支援のお願い

ここまで読んでいただきありがとうございます。「スキ」で反応をいただけると励みになります。

また、継続的な記事の公開のために、支援をしていただけると幸いです。

https://note.com/rhe/n/n01096a6aed38


この記事が気に入ったらサポートをしてみませんか?