Faithfulness: 충실도: 답변이 검색된 문맥에 충실한지(즉, 환각이 있는지 여부) 평가합니다.
Context Relevancy: 검색된 문맥이 쿼리와 관련이 있는지 여부입니다.
Answer Relevancy: 생성된 답변이 쿼리와 관련이 있는지 여부입니다.
Guideline Adherence: 예측된 답변이 특정 가이드라인을 준수하는지 여부입니다.
Question Generation 기능 제공
LlamaIndex는 쿼리를 평가하는 것 외에도 데이터를 사용하여 평가할 질문을 생성할 수도 있습니다. 즉, 자동으로 질문을 생성한 다음 평가 파이프라인을 실행하여 LLM이 데이터를 사용하여 실제로 질문에 정확하게 답변할 수 있는지 테스트할 수 있습니다.
EvaluationResult 예시
FaithfulnessEvaluator 답변이 검색된 문맥에 충실한지(즉, 환각이 있는지 여부)를 평가합니다.
from llama_index.core import VectorStoreIndexfrom llama_index.llms.openai import OpenAIfrom llama_index.core.evaluation import FaithfulnessEvaluator# create llmllm =OpenAI(model="gpt-4", temperature=0.0)# build index...# define evaluatorevaluator =FaithfulnessEvaluator(llm=llm)# query indexquery_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))
각 소스 컨텍스트를 개별적으로 평가하도록 선택할 수도 있습니다:
from llama_index.core import VectorStoreIndexfrom llama_index.llms.openai import OpenAIfrom llama_index.core.evaluation import FaithfulnessEvaluator# create llmllm =OpenAI(model="gpt-4", temperature=0.0)# build index...# define evaluatorevaluator =FaithfulnessEvaluator(llm=llm)# query indexquery_engine = vector_index.as_query_engine()response = query_engine.query("What battles took place in New York City in the American Revolution?")response_str = response.responsefor source_node in response.source_nodes: eval_result = evaluator.evaluate( response=response_str, contexts=[source_node.get_content()] )print(str(eval_result.passing))
Evaluating Query + Response Relevancy
RelevancyEvaluator는 검색된 컨텍스트와 답변이 주어진 쿼리에 대해 관련성이 있고 일관성이 있는지 평가합니다.
이 평가자는 응답 객체 외에 query를 전달해야 한다는 점에 유의하세요.
from llama_index.core import VectorStoreIndexfrom llama_index.llms.openai import OpenAIfrom llama_index.core.evaluation import RelevancyEvaluator# create llmllm =OpenAI(model="gpt-4", temperature=0.0)# build index...# define evaluatorevaluator =RelevancyEvaluator(llm=llm)# query indexquery_engine = vector_index.as_query_engine()query ="What battles took place in New York City in the American Revolution?"response = query_engine.query(query)eval_result = evaluator.evaluate_response(query=query, response=response)print(str(eval_result))
마찬가지로 특정 소스 노드에서 평가할 수도 있습니다.
from llama_index.core import VectorStoreIndexfrom llama_index.llms.openai import OpenAIfrom llama_index.core.evaluation import RelevancyEvaluator# create llmllm =OpenAI(model="gpt-4", temperature=0.0)# build index...# define evaluatorevaluator =RelevancyEvaluator(llm=llm)# query indexquery_engine = vector_index.as_query_engine()query ="What battles took place in New York City in the American Revolution?"response = query_engine.query(query)response_str = response.responsefor source_node in response.source_nodes: eval_result = evaluator.evaluate( query=query, response=response_str, contexts=[source_node.get_content()], )print(str(eval_result.passing))
Question Generation
LlamaIndex는 데이터를 사용하여 답변할 질문을 생성할 수도 있습니다. 위의 평가기와 함께 사용하면 데이터에 대한 완전 자동화된 평가 파이프라인을 만들 수 있습니다.
from llama_index.core import SimpleDirectoryReaderfrom llama_index.llms.openai import OpenAIfrom llama_index.core.llama_dataset.generator import RagDatasetGenerator# create llmllm =OpenAI(model="gpt-4", temperature=0.0)# build documentsdocuments =SimpleDirectoryReader("./data").load_data()# define generator, generate questionsdataset_generator = RagDatasetGenerator.from_documents( documents=documents, llm=llm, num_questions_per_chunk=10, # set the number of questions per nodes)rag_dataset = dataset_generator.generate_questions_from_nodes()questions = [e.query for e in rag_dataset.examples]
DeepEval은 독자적인 평가 메트릭으로 구동되는 6개의 평가기(리트리버 및 발전기 평가를 위한 3개의 RAG 평가기 포함)를 제공합니다.
pip install -U deepeval
from llama_index.core import VectorStoreIndex, SimpleDirectoryReaderfrom deepeval.integrations.llama_index import DeepEvalAnswerRelevancyEvaluatordocuments =SimpleDirectoryReader("YOUR_DATA_DIRECTORY").load_data()index = VectorStoreIndex.from_documents(documents)rag_application = index.as_query_engine()# An example input to your RAG applicationuser_input ="What is LlamaIndex?"# LlamaIndex returns a response object that contains# both the output string and retrieved nodesresponse_object = rag_application.query(user_input)evaluator =DeepEvalAnswerRelevancyEvaluator()evaluation_result = evaluator.evaluate_response( query=user_input, response=response_object)print(evaluation_result)
6개의 평가자를 모두 deepeval에서 가져오는 방법은 다음과 같습니다:
from deepeval.integrations.llama_index import ( DeepEvalAnswerRelevancyEvaluator, DeepEvalFaithfulnessEvaluator, DeepEvalContextualRelevancyEvaluator, DeepEvalSummarizationEvaluator, DeepEvalBiasEvaluator, DeepEvalToxicityEvaluator,)
2. Retrieval Evaluation
LlamaIndex는 검색을 독립적으로 평가하는 데 도움이 되는 모듈도 제공합니다.
Retrieval evaluation라는 개념은 새로운 것이 아니며, 질문의 데이터 세트와 실제 순위가 주어지면 평균 상호 순위(mean-reciprocal rank, MRR), 적중률(hit-rate), 정확도(precision) 등과 같은 순위 메트릭을 사용하여 검색기를 평가할 수 있습니다.