评估数据创建教程¶
概述¶
为了评估RAG系统,我们需要数据,但在大多数情况下,我们拥有很少或没有令人满意的数据。
然而,随着大语言模型(LLM)的出现,生成合成数据已成为解决这一问题的有效方案之一。
以下指南介绍如何使用LLM生成AutoRAG可用的数据格式。

1. 解析¶
设置YAML文件¶
modules:
- module_type: langchain_parse
parse_method: pdfminer
您也可以同时使用多个解析模块。 不过在这种情况下,您需要为每个解析结果返回一个新的处理流程。
开始解析¶
只需几行代码即可解析您的原始文档。
from autorag.parser import Parser
parser = Parser(data_path_glob="your/data/path/*", project_dir="./parse_project_dir")
parser.start_parsing("your/path/to/parse_config.yaml")
然后你可以在./parse_project_dir目录中查看解析结果。
有关解析的更多详情,请参阅此处。
2. 分块处理¶
设置YAML文件¶
modules:
- module_type: llama_index_chunk
chunk_method: Token
chunk_size: 1024
chunk_overlap: 24
add_file_name: en
您也可以同时使用多个Chunk模块。 在这种情况下,您需要使用一个语料库创建问答数据,然后将其他语料库映射到问答数据集。
如果分块方法不同,retrieval_gt也会不同,因此我们需要将其重新映射到QA数据集。
开始分块处理¶
只需几行代码即可对解析结果进行分块处理。
from autorag.chunker import Chunker
chunker = Chunker.from_parquet(parsed_data_path="your/parsed/data/path", project_dir="./chunk_project_dir")
chunker.start_chunking("your/path/to/chunk_config.yaml")
然后你可以在./chunk_project_dir目录中查看分块结果。
有关分块的更多详情,请参阅此处。
3. 问答生成¶
开始创建问答之前¶
语料库与问答集是一一对应的。 如果使用多种分块方法创建了多个语料库,每个语料库都需要有自己对应的问答数据集。
因此,如果您有多个语料库,需要先使用一个语料库创建初始问答集,然后为其余语料库重新映射问答集,从而创建多个问答集-语料库组合。
第3章(问答创建)描述了如何基于单一语料库创建初始问答集。 第4章(问答-语料库映射)描述了如何为剩余语料库重新映射问答集。
如果您仅使用一种分块方法创建语料库,则无需阅读第4章。 但如果您使用了多种分块方法创建语料库并希望进行分块优化,则应参考第4章。
开始创建问答¶
只需几行代码即可创建问答数据集。
import pandas as pd
from llama_index.llms.openai import OpenAI
from autorag.data.qa.filter.dontknow import dontknow_filter_rule_based
from autorag.data.qa.generation_gt.llama_index_gen_gt import (
make_basic_gen_gt,
make_concise_gen_gt,
)
from autorag.data.qa.schema import Raw, Corpus
from autorag.data.qa.query.llama_gen_query import factoid_query_gen
from autorag.data.qa.sample import random_single_hop
llm = OpenAI()
raw_df = pd.read_parquet("your/path/to/parsed.parquet")
raw_instance = Raw(raw_df)
corpus_df = pd.read_parquet("your/path/to/corpus.parquet")
corpus_instance = Corpus(corpus_df, raw_instance)
initial_qa = (
corpus_instance.sample(random_single_hop, n=3)
.map(
lambda df: df.reset_index(drop=True),
)
.make_retrieval_gt_contents()
.batch_apply(
factoid_query_gen, # query generation
llm=llm,
)
.batch_apply(
make_basic_gen_gt, # answer generation (basic)
llm=llm,
)
.batch_apply(
make_concise_gen_gt, # answer generation (concise)
llm=llm,
)
.filter(
dontknow_filter_rule_based, # filter don't know
lang="en",
)
)
initial_qa.to_parquet('./qa.parquet', './corpus.parquet')
4. 问答 - 语料库映射¶
如果您拥有多个语料数据集,可以将剩余语料映射到问答数据集。
在分块优化方面,您可以使用不同的语料数据评估RAG性能。 您已经从初始问答数据中获得了最优流程, 因此可以利用该流程来评估不同语料数据下的RAG表现。
在此之前,您必须使用新的语料数据更新所有问答数据。
该方法使用update_corpus方法。
强烈建议您保留初始的QA实例。
如果不这样做,您需要从初始原始(已解析)数据和语料库数据重新构建QA实例。
from autorag.data.qa.schema import Raw, Corpus, QA
raw = Raw(initial_raw_df)
corpus = Corpus(initial_corpus_df, raw)
qa = QA(initial_qa_df, corpus)
new_qa = qa.update_corpus(Corpus(new_corpus_df, raw))
现在 new_qa 已为新语料库准备了新的 retrieval_gt 数据。
现在有了新的语料数据和新的问答数据集,您可以使用不同的语料数据评估RAG性能。