向LlamaHub贡献LlamaDataset¶
LlamaDataset
的存储通过git仓库进行管理。要贡献数据集需要向llama_index/llama_datasets
Github (LFS)仓库提交pull request。
要贡献一个LabelledRagDataset
(BaseLlamaDataset
的子类),需要准备两组文件:
- 保存为名为
rag_dataset.json
的json文件的LabelledRagDataset
- 用于创建
LabelledRagDataset
的源文档文件
这个简短的笔记本提供了一个使用Paul Graham文章文本文件的快速示例。
%pip install llama-index-llms-openai
import nest_asyncio
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'
from llama_index.core import SimpleDirectoryReader
# Load documents and build index
documents = SimpleDirectoryReader(
input_files=["data/paul_graham/paul_graham_essay.txt"]
).load_data()
# generate questions against chunks
from llama_index.core.llama_dataset.generator import RagDatasetGenerator
from llama_index.llms.openai import OpenAI
# set context for llm provider
llm_gpt35 = OpenAI(model="gpt-4", temperature=0.3)
# instantiate a DatasetGenerator
dataset_generator = RagDatasetGenerator.from_documents(
documents,
llm=llm_gpt35,
num_questions_per_chunk=2, # set the number of questions per nodes
show_progress=True,
)
rag_dataset = dataset_generator.generate_dataset_from_nodes()
现在我们已生成LabelledRagDataset
(顺便说一句,完全可以用人工生成的查询和参考答案手动创建这样的数据集!),我们将其存储到必要的json文件中。
rag_dataset.save_json("rag_dataset.json")
生成基准结果¶
除了添加LlamaDataset
之外,我们还鼓励添加基准测试,供他人用作衡量自身RAG管道的参考标准。
from llama_index.core import VectorStoreIndex
# a basic RAG pipeline, uses defaults
index = VectorStoreIndex.from_documents(documents=documents)
query_engine = index.as_query_engine()
# manually
prediction_dataset = await rag_dataset.amake_predictions_with(
query_engine=query_engine, show_progress=True
)
提交拉取请求¶
使用rag_dataset.json
和源文件paul_graham_essay.txt
(注意在这个案例中只有一个源文档,但可以有多个),我们可以执行以下两个步骤来将一个LlamaDataset
贡献到LlamaHub
中:
类似于为
loader
、agent
和pack
做贡献的方式,为llama_hub
仓库创建一个拉取请求,为新的LlamaDataset
添加一个新文件夹。此步骤上传有关新LlamaDataset
的信息,以便它可以在LlamaHub
用户界面中展示。向
llama_datasets
仓库提交一个拉取请求,以实际上传数据文件。
步骤0 (前提条件)¶
请先fork然后克隆(到您的本地机器)这两个仓库:llama_hub
Github仓库和llama_datasets
仓库。您需要从fork版本的新分支向这两个仓库提交pull requests。
步骤1¶
在llama_hub
的Github仓库中的llama_datasets/
目录下创建一个新文件夹。例如,在本例中我们将创建一个名为llama_datasets/paul_graham_essay
的新文件夹。
在该文件夹中,需要两个文件:
card.json
README.md
特别是在您的本地机器上:
cd llama_datasets/
mkdir paul_graham_essay
touch card.json
touch README.md
这里的建议是查看之前提交的LlamaDataset
,并根据需要修改它们各自的文件以适应你的新数据集。
在当前示例中,我们需要card.json
文件呈现如下内容
{
"name": "Paul Graham Essay",
"description": "A labelled RAG dataset based off an essay by Paul Graham, consisting of queries, reference answers, and reference contexts.",
"numberObservations": 44,
"containsExamplesByHumans": false,
"containsExamplesByAI": true,
"sourceUrls": [
"http://www.paulgraham.com/articles.html"
],
"baselines": [
{
"name": "llamaindex",
"config": {
"chunkSize": 1024,
"llm": "gpt-3.5-turbo",
"similarityTopK": 2,
"embedModel": "text-embedding-ada-002"
},
"metrics": {
"contextSimilarity": 0.934,
"correctness": 4.239,
"faithfulness": 0.977,
"relevancy": 0.977
},
"codeUrl": "https://github.com/run-llama/llama_datasets/blob/main/baselines/paul_graham_essay/llamaindex_baseline.py"
}
]
}
至于README.md
文件,这些内容相当标准,需要您在download_llama_dataset()
函数调用中更改数据集参数的名称。
from llama_index.llama_datasets import download_llama_datasets
from llama_index.llama_pack import download_llama_pack
from llama_index import VectorStoreIndex
# download and install dependencies for rag evaluator pack
RagEvaluatorPack = download_llama_pack(
"RagEvaluatorPack", "./rag_evaluator_pack"
)
rag_evaluator_pack = RagEvaluatorPack()
# download and install dependencies for benchmark dataset
rag_dataset, documents = download_llama_datasets(
"PaulGrahamEssayTruncatedDataset", "./data"
)
# evaluate
query_engine = VectorStoreIndex.as_query_engine() # previously defined, not shown here
rag_evaluate_pack.run(dataset=paul_graham_qa_data, query_engine=query_engine)
最后,第一步的最后一项是在llama_datasets/library.json
文件中创建一个条目。在这种情况下:
...,
"PaulGrahamEssayDataset": {
"id": "llama_datasets/paul_graham_essay",
"author": "andrei-fajardo",
"keywords": ["rag"],
"extra_files": ["paul_graham_essay.txt"]
}
注意:extra_files
字段是为源文件保留的。
步骤2 上传实际数据集¶
在这一步中,由于我们在llama_datasets
仓库使用了Github LFS,贡献方式与我们对其他开源Github仓库的贡献方式完全相同。也就是说,提交一个pull request即可。
复制llama_datasets
代码库的分支,并在llama_datasets/
目录中创建一个新文件夹,该文件夹名称应与library.json
文件中条目的id
字段相匹配。因此,在本示例中,我们将创建一个新文件夹llama_datasets/paul_graham_essay/
。我们将在此处添加文档并提交拉取请求。
在此文件夹中,添加rag_dataset.json
(必须使用此名称),以及其他源文档,在我们的案例中是paul_graham_essay.txt
文件。
llama_datasets/paul_graham_essay/
├── paul_graham_essay.txt
└── rag_dataset.json
现在,只需执行 git add
、git commit
和 git push
操作提交你的分支,然后创建PR。