From 7996861e686244ebacff947ed8fa012b88369d80 Mon Sep 17 00:00:00 2001 From: yisz Date: Wed, 21 Feb 2024 14:53:48 -0800 Subject: [PATCH] readme-update --- README.md | 226 +++++++++++++++++++----------- docs/public/module-level-eval.png | Bin 0 -> 73653 bytes examples/single_metric.py | 1 - 3 files changed, 147 insertions(+), 80 deletions(-) create mode 100644 docs/public/module-level-eval.png diff --git a/README.md b/README.md index e021b25..fc9eb36 100644 --- a/README.md +++ b/README.md @@ -18,32 +18,29 @@

-

Open-Source Evaluation Framework for LLM Pipelines

+

Open-Source Module-level Evaluation for LLM Pipelines

-## Overview - -`continuous-eval` is an open-source package created for the scientific and practical evaluation of LLM application pipelines. Currently, it focuses on retrieval-augmented generation (RAG) pipelines. - -## Why another eval package? - -Good LLM evaluation should help developers reliably identify weaknesses in the pipeline, inform what actions to take, and accelerate development from prototype to production. Although it is optimal to put LLM Evaluation as part of our CI/CD pipeline just like any other part of software, it remains challenging today because: +

+ +

-**Human evaluation is trustworthy but not scalable** -- Eyeballing can only be done on a small dataset, and it has to be repeated for any pipeline update -- User feedback is spotty and lacks granularity +## Overview -**Using LLMs to evaluate LLMs is expensive, slow and difficult to trust** -- Can be very costly and slow to run at scale -- Can be biased towards certain answers and often doesn’t align well with human evaluation +`continuous-eval` is an open-source package created for granular and holistic evaluation of LLM application pipelines. ## How is continuous-eval different? -- **Comprehensive RAG Metric Library**: mix and match Deterministic, Semantic and LLM-based metrics. +- **Modularized Evaluation**: Measure each module in the pipeline with tailored metrics. -- **Trustworthy Ensemble Metrics**: easily build a close-to-human ensemble evaluation pipeline with mathematical guarantees. +- **Comprehensive Metric Library**: Covers Retrieval-Augmented Generation (RAG), Code Generation, Tool Use, Agent Tool, Classification and a variety of LLM use cases. Mix and match Deterministic, Semantic and LLM-based metrics. -- **Cheaper and Faster Evaluation**: our hybrid pipeline slashes cost by up to 15x compared to pure LLM-based metrics, and reduces eval time on large datasets from hours to minutes. +- **Leverage User Feedback in Evaluation**: easily build a close-to-human ensemble evaluation pipeline with mathematical guarantees. + +- **Synthetic Dataset Generation**: Generate large-scale synthetic dataset to test your pipeline. ## Installation @@ -62,98 +59,169 @@ poetry install --all-extras ## Getting Started -### Prerequisites +### Prerequisites for LLM-based metrics -The code requires the `OPENAI_API_KEY` (optionally `ANTHROPIC_API_KEY` and/or `GEMINI_API_KEY` and/or `AZURE_OPENAI_API_KEY` with deployment details) in .env to run the LLM-based metrics. Take a look at the example env file `.env.example`. +To run LLM-based metrics, the code requires at least one of the LLM API keys in `.env`. Take a look at the example env file `.env.example`. -### Usage +### Run a single metric +Here's how you run a single metric on a datum. +Check all available metrics here: [link](https://docs.relari.ai/) ```python -from continuous_eval.metrics import PrecisionRecallF1, RougeChunkMatch +from continuous_eval.metrics.retrieval import PrecisionRecallF1 datum = { "question": "What is the capital of France?", - "retrieved_contexts": [ + "retrieved_context": [ "Paris is the capital of France and its largest city.", "Lyon is a major city in France.", ], - "ground_truth_contexts": ["Paris is the capital of France."], + "ground_truth_context": ["Paris is the capital of France."], "answer": "Paris", "ground_truths": ["Paris"], } -metric = PrecisionRecallF1(RougeChunkMatch()) -print(metric.calculate(**datum)) -``` - -To run over a dataset, you can use one of the evaluator classes: +metric = PrecisionRecallF1() -```python -from continuous_eval.data_downloader import example_data_downloader -from continuous_eval.evaluators import RetrievalEvaluator -from continuous_eval.metrics import PrecisionRecallF1, RankedRetrievalMetrics - -# Build a dataset: create a dataset from a list of dictionaries containing question/answer/context/etc. -# Or download one of the of the examples... -dataset = example_data_downloader("retrieval") -# Setup the evaluator -evaluator = RetrievalEvaluator( - dataset=dataset, - metrics=[ - PrecisionRecallF1(), - RankedRetrievalMetrics(), - ], -) -# Run the eval! -evaluator.run(k=2, batch_size=1) -# Peaking at the results -print(evaluator.aggregated_results) -# Saving the results for future use -evaluator.save("retrieval_evaluator_results.jsonl") +print(metric(**datum)) ``` -For generation you can instead use the `GenerationEvaluator`. - -## Metrics +### Run modularized evaluation over a dataset -### Retrieval-based metrics +Define your pipeline and select the metrics for each. -#### Deterministic - -- `PrecisionRecallF1`: Rank-agnostic metrics including Precision, Recall, and F1 of Retrieved Contexts -- `RankedRetrievalMetrics`: Rank-aware metrics including Mean Average Precision (MAP), Mean Reciprical Rank (MRR), NDCG (Normalized Discounted Cumulative Gain) of retrieved contexts - -#### LLM-based - -- `LLMBasedContextPrecision`: Precision and Mean Average Precision (MAP) based on context relevancy classified by LLM -- `LLMBasedContextCoverage`: Proportion of statements in ground truth answer that can be attributed to Retrieved Contexts calcualted by LLM - -### Generation metrics +```python +from continuous_eval.eval import Module, Pipeline, Dataset +from continuous_eval.metrics.retrieval import PrecisionRecallF1, RankedRetrievalMetrics +from continuous_eval.metrics.generation.text import DeterministicAnswerCorrectness +from typing import List, Dict + +dataset = Dataset("dataset_folder") +Documents = List[Dict[str, str]] +DocumentsContent = ModuleOutput(lambda x: [z["page_content"] for z in x]) + +# Simple 3-step RAG pipeline with Retriever->Reranker->Generation + +retriever = Module( + name="Retriever", + input=dataset.question, + output=List[Dict[str, str]], + eval={ + PrecisionRecallF1().use( + retrieved_context=DocumentsContent, + ground_truth_context=dataset.ground_truth_contexts, + ), + }, +) -#### Deterministic +reranker = Module( + name="reranker", + input=retriever, + output=List[Dict[str, str]], + eval={ + RankedRetrievalMetrics().use( + retrieved_context=DocumentsContent, + ground_truth_context=dataset.ground_truth_contexts, + ), + }, +) -- `DeterministicAnswerCorrectness`: Includes Token Overlap (Precision, Recall, F1), ROUGE-L (Precision, Recall, F1), and BLEU score of Generated Answer vs. Ground Truth Answer -- `DeterministicFaithfulness`: Proportion of sentences in Answer that can be matched to Retrieved Contexts using ROUGE-L precision, Token Overlap precision and BLEU score -- `FleschKincaidReadability`: how easy or difficult it is to understand the LLM generated answer. +llm = Module( + name="answer_generator", + input=reranker, + output=str, + eval=[ + FleschKincaidReadability().use(answer=ModuleOutput()), + DeterministicAnswerCorrectness().use( + answer=ModuleOutput(), ground_truth_answers=dataset.ground_truths + ), + ], +) -#### Semantic +pipeline = Pipeline([retriever, reranker, llm], dataset=dataset) +``` -- `DebertaAnswerScores`: Entailment and contradiction scores between the Generated Answer and Ground Truth Answer -- `BertAnswerRelevance`: Similarity score based on the BERT model between the Generated Answer and Question -- `BertAnswerSimilarity`: Similarity score based on the BERT model between the Generated Answer and Ground Truth Answer +Log your results in your pipeline (see full example) -#### LLM-based +```python -- `LLMBasedFaithfulness`: Binary classifications of whether the statements in the Generated Answer can be attributed to the Retrieved Contexts -- `LLMBasedAnswerCorrectness`: Overall correctness of the Generated Answer based on the Question and Ground Truth Answer(s) -- `LLMBasedAnswerRelevance`: Relevance of the Generated Answer w.r.t the Question -- `LLMBasedStyleConsistency`: Consistency of style bwtween the Generated Answer and the Ground Truth Answer(s) +from continuous_eval.eval.manager import eval_manager + +... +# Run and log module outputs +response = ask(q, reranked_docs) +eval_manager.log("answer_generator", response) +... +# Set the pipeline +eval_manager.set_pipeline(pipeline) +... +# View the results +eval_manager.run_eval() +print(eval_manager.eval_graph()) +``` +## Plug and Play Metrics + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ModuleSubcategoryMetrics
RetrievalDeterministicPrecisionRecallF1, RankedRetrievalMetrics
LLM-basedLLMBasedContextPrecision, LLMBasedContextCoverage
Text GenerationDeterministicDeterministicAnswerCorrectness, DeterministicFaithfulness, FleschKincaidReadability
SemanticDebertaAnswerScores, BertAnswerRelevance, BertAnswerSimilarity
LLM-basedLLMBasedFaithfulness, LLMBasedAnswerCorrectness, LLMBasedAnswerRelevance, LLMBasedStyleConsistency
ClassificationDeterministicClassificationAccuracy
Code GenerationDeterministicCodeStringMatch, PythonASTSimilarity
LLM-basedLLMBasedCodeGeneration
Agent ToolsDeterministicToolSelectionAccuracy
+ +You can also define your own metrics (coming soon). ## Resources - **Docs:** [link](https://docs.relari.ai/) -- **Blog Post: Practical Guide to RAG Pipeline Evaluation:** [Part 1: Retrieval](https://medium.com/relari/a-practical-guide-to-rag-pipeline-evaluation-part-1-27a472b09893), [Part 2: Generation](https://medium.com/relari/a-practical-guide-to-rag-evaluation-part-2-generation-c79b1bde0f5d) +- **Blog Posts:** + - Practical Guide to RAG Pipeline Evaluation: [Part 1: Retrieval](https://medium.com/relari/a-practical-guide-to-rag-pipeline-evaluation-part-1-27a472b09893) + - Practical Guide to RAG Pipeline Evaluation: [Part 2: Generation](https://medium.com/relari/a-practical-guide-to-rag-evaluation-part-2-generation-c79b1bde0f5d) + - How important is a Golden Dataset for LLM evaluation? + [link](https://medium.com/relari/how-important-is-a-golden-dataset-for-llm-pipeline-evaluation-4ef6deb14dc5) + - **Discord:** Join our community of LLM developers [Discord](https://discord.gg/GJnM8SRsHr) - **Reach out to founders:** [Email](mailto:founders@relari.ai) or [Schedule a chat](https://cal.com/yizhang/continuous-eval) diff --git a/docs/public/module-level-eval.png b/docs/public/module-level-eval.png new file mode 100644 index 0000000000000000000000000000000000000000..b3eafe5aad53ac6f088a467aedd60f8be06b242a GIT binary patch literal 73653 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 z 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 I&MBb@0GY);#Q*>R literal 0 HcmV?d00001 diff --git a/examples/single_metric.py b/examples/single_metric.py index 95ac829..3570051 100644 --- a/examples/single_metric.py +++ b/examples/single_metric.py @@ -1,4 +1,3 @@ -from continuous_eval import Dataset from continuous_eval.metrics.retrieval import PrecisionRecallF1 # A dataset is just a list of dictionaries containing the relevant information