针对特定任务微调主流LLM的最大挑战是:高质量、任务专用的数据很难获取。Meta的合成数据工具包(Synthetic Data Kit,SDK)为此提供了一个精简的开源解决方案,用于生成、筛选和格式化合成数据集—无需数据科学家参与。
小编认为它意义在于将微调过程中的预料准备经验进行了工具化的总结。大多数现实世界的数据集杂乱无章、结构混乱,很少采用LLM喜欢的"用户/助手"格式。Meta的合成数据工具包弥补了这一差距,让您可以生成推理轨迹、问答对等内容,所有这些都适合微调。
SDK的工作流程简单且模块化,围绕四个核心命令构建:
-
导入(Ingest):从PDF、HTML、YouTube、DOCX、PPT或纯文本中导入数据。该工具包解析并将您的文件组织成清晰的目录结构。
-
创建(Create):使用本地LLM(通过vLLM)生成问答对、思维链(CoT)推理示例或摘要。可以自定义示例的数量和类型,甚至可以使用自己的提示模板。
-
筛选(Curate):使用Llama作为评判来过滤和评分您的合成示例,确保只有最高质量的数据才能通过。
-
保存(Save-As):以您的微调工作流程所需的格式导出已筛选的数据—支持Alpaca、OpenAI、ChatML等多种格式。
#SDK的命令树 SDK --> SystemCheck[system-check] SDK[synthetic-data-kit] --> Ingest[ingest] SDK --> Create[create] SDK --> Curate[curate] SDK --> SaveAs[save-as] Ingest --> PDFFile[PDF File] Ingest --> HTMLFile[HTML File] Ingest --> YouTubeURL[File Format] Create --> CoT[CoT] Create --> QA[QA Pairs] Create --> Summary[Summary] Curate --> Filter[Filter by Quality] SaveAs --> JSONL[JSONL Format] SaveAs --> Alpaca[Alpaca Format] SaveAs --> FT[Fine-Tuning Format] SaveAs --> ChatML[ChatML Format]
# 从PyPI安装conda create -n synthetic-data python=3.10conda activate synthetic-datapip install synthetic-data-kit
#或者,克隆仓库以获取最新功能:bashgit clone https://github.com/meta-llama/synthetic-data-kit.gitcd synthetic-data-kitpip install -e .
后台假设一台运行选定教师模型的vLLM服务器。有余力的情况下,教师模型参数规模越大,效果越好。
bashvllm serve meta-llama/Llama-3.3-70B-Instruct --port 8000# 创建必要的目录结构:mkdir -p data/{pdf,html,youtube,docx,ppt,txt,output,generated,cleaned,final}#检查系统是否已准备就绪:synthetic-data-kit system-check
例如要将PDF格式的研究论文进行语料的转化,以下是将其转换为微调数据集的方法:
bash# 导入PDFsynthetic-data-kit ingest research_paper.pdf# 生成30个问答对,设置质量阈值synthetic-data-kit create data/output/research_paper.txt -n 30 --threshold 8.0# 筛选质量synthetic-data-kit curate data/generated/research_paper_qa_pairs.json -t 8.5# 以OpenAI微调格式保存synthetic-data-kit save-as data/cleaned/research_paper_cleaned.json -f ft
还可以处理YouTube视频、HTML文件,都可以使用简单的bash脚本批量处理整个文件夹。
通过CLI或YAML配置文件覆盖任何参数—温度、块大小、生成对数、筛选阈值,甚至可以使用针对特定领域任务的自定义提示模板。
# Example configurationvllm: api_base: "http://localhost:8000/v1" model: "meta-llama/Llama-3.3-70B-Instruct"generation: temperature: 0.7 chunk_size: 4000 num_pairs: 25curate: threshold: 7.0 batch_size: 8
prompts: qa_generation: | You are creating question-answer pairs for fine-tuning a legal assistant. Focus on technical legal concepts, precedents, and statutory interpretation.
Below is a chunk of text about: {summary}...
Create {num_pairs} high-quality question-answer pairs based ONLY on this text.
Return ONLY valid JSON formatted as: [ { "question": "Detailed legal question?", "answer": "Precise legal answer." }, ... ]
Text: --- {text}
目前SDK支持6种类型的解析器:PDFParser (使用pdfminer),HTMLParser (使用beautifulsoup4),YouTubeParser (使用pytube和youtube_transcript_api),DOCXParser (使用docx),PPTParser (使用pptx),TXTParser (简单读取文本文件)
创建命令为synthetic-data-kit create [文本文件路径] –type [格式类型]。其中格式类型选项包括:qa (问答对),cot (思维链推理)。
for file in data/pdf/*.pdf; do filename=$(basename "$file" .pdf)
synthetic-data-kit ingest "$file" synthetic-data-kit create "data/output/${filename}.txt" -n 20 synthetic-data-kit curate "data/generated/${filename}_qa_pairs.json" -t 7.5 synthetic-data-kit save-as "data/cleaned/${filename}_cleaned.json" -f chatmldone
SDK于是加载输入文本文件,将文本分块成可管理的段落(基于块大小),
为每个块生成摘要(这些摘要包含在提示词中),根据配置文件中的模板构建提示调用vLLM API生成响应,以JSON格式保存生成的样本。
synthetic-data-kit curate data/generated/report_qa_pairs.json -t 7.0
1) 加载包含生成样本的JSON文件,按照如下的维度进行质量评估:
当然也可以自己构建自己的评估依据,例如<学会LLM思维:语料质量的自评估>
2) 将数据和维度进行进行提示词的构建,发送到vLLM服务器,由LLM分配质量分数。例如:“基于以下方面对每个问答对进行1-10分的评分”
最后加载过滤过的样本,进行Alpaca格式,ChatML格式或者JSONL等其他常见训练格式的存储转化。
Meta的合成数据工具包对于任何希望为LLM提供高质量、任务特定数据的人来说都是一个游戏改变者。无论研究人员、开发人员还是创业公司创始人,这个工具包都能让生成、筛选和格式化用于微调的合成数据集变得容易