← 返回首页
🧠

LLM数据集总览

📂 llm ⏱ 3 min 516 words

--- title: "LLM数据集总览" description: "全面介绍大语言模型训练所需的数据集类型,包括预训练数据、指令微调数据和对齐数据" tags: ["数据集", "预训练数据", "指令微调数据", "对齐数据"] category: "llm" icon: "🧠"

LLM数据集总览

数据集在LLM中的重要性

数据是训练大语言模型的基础。高质量的数据集直接决定了模型的能力上限。LLM的训练通常分为三个阶段,每个阶段需要不同类型的数据集:

预训练数据集

通用文本数据

# 预训练数据集示例结构
pretraining_data = {
    "common_crawl": {
        "size": "PB级",
        "description": "互联网爬取数据",
        "语言": "多语言"
    },
    "wikipedia": {
        "size": "20GB",
        "description": "维基百科全文",
        "质量": "高"
    },
    "books": {
        "size": "100GB",
        "description": "书籍语料",
        "特点": "长文本、高质量"
    },
    "code": {
        "size": "1TB",
        "description": "GitHub代码",
        "用途": "代码理解能力"
    }
}

主流预训练数据集

# 常用预训练数据集
datasets = {
    "The Pile": {
        "size": "825GB",
        "来源": 22个子数据集,
        "特点": "多样化、高质量",
        "用途": "GPT-NeoX训练"
    },
    "RedPajama": {
        "size": "1.2T tokens",
        "来源": "Llama数据复现",
        "特点": "开源、可复现",
        "用途": "开源模型训练"
    },
    "RefinedWeb": {
        "size": "5T tokens",
        "来源": "精选网页数据",
        "特点": "去重、过滤",
        "用途": "Falcon训练"
    },
    "FineWeb": {
        "size": "15T tokens",
        "来源": "CommonCrawl精选",
        "特点": "高质量网页",
        "用途": "HuggingFace模型"
    }
}

代码数据集

# 代码数据集结构
code_datasets = {
    "The Stack": {
        "size": "6.4TB",
        "语言数": 358,
        "许可证": "开源",
        "用途": "代码生成模型"
    },
    "StarCoder数据": {
        "size": "1TB",
        "来源": "GitHub",
        "过滤": "去重+质量过滤",
        "用途": "StarCoder训练"
    },
    "CodeParrot": {
        "size": "180GB",
        "语言": "Python",
        "特点": "精选Python代码",
        "用途": "代码补全"
    }
}

指令微调数据集

指令数据格式

# 指令微调数据的标准格式
instruction_sample = {
    "instruction": "请解释什么是机器学习",
    "input": "",  # 可选的上下文输入
    "output": "机器学习是人工智能的一个分支...",
    "metadata": {
        "domain": "technology",
        "difficulty": "medium",
        "language": "zh"
    }
}

# 多轮对话格式
conversation_sample = {
    "conversations": [
        {"role": "user", "content": "什么是深度学习?"},
        {"role": "assistant", "content": "深度学习是机器学习的一个子领域..."},
        {"role": "user", "content": "它和传统机器学习有什么区别?"},
        {"role": "assistant", "content": "主要区别在于特征工程..."}
    ]
}

主流指令数据集

# 指令微调数据集
instruction_datasets = {
    "Alpaca": {
        "规模": "52K条",
        "来源": "Self-Instruct生成",
        "语言": "英文",
        "用途": "指令跟随能力"
    },
    "BELLE": {
        "规模": "3.5M条",
        "来源": "中文指令数据",
        "语言": "中文",
        "用途": "中文指令理解"
    },
    "ShareGPT": {
        "规模": "90K条",
        "来源": "用户分享对话",
        "语言": "多语言",
        "用途": "多轮对话"
    },
    "OASST": {
        "规模": "160K条",
        "来源": "Open Assistant",
        "语言": "多语言",
        "用途": "助手能力"
    }
}

对齐数据集

人类偏好数据

# 偏好数据格式
preference_sample = {
    "prompt": "解释量子计算",
    "chosen": "量子计算利用量子力学原理...",  # 优选响应
    "rejected": "量子计算就是很快的计算...",   # 劣质响应
    "metadata": {
        "annotator_id": "expert_1",
        "agreement_score": 0.95
    }
}

# 多响应排序数据
ranking_sample = {
    "prompt": "写一首关于春天的诗",
    "responses": [
        {"text": "春风吹绿江南岸...", "rank": 1},
        {"text": "春天来了花开了...", "rank": 2},
        {"text": "天气变暖了...", "rank": 3}
    ]
}

主流对齐数据集

# 对齐训练数据集
alignment_datasets = {
    "HH-RLHF": {
        "规模": "170K条",
        "来源": "Anthropic",
        "类型": "偏好对",
        "用途": "RLHF训练"
    },
    "UltraFeedback": {
        "规模": "64K条",
        "来源": "多模型响应",
        "类型": "多维度评分",
        "用途": "DPO训练"
    },
    "Chatbot Arena": {
        "规模": "100K+条",
        "来源": "用户投票",
        "类型": "真实偏好",
        "用途": "模型对齐"
    }
}

数据集质量评估

质量评估指标

def evaluate_dataset_quality(dataset):
    """评估数据集质量"""
    metrics = {
        "多样性": calculate_diversity(dataset),
        "一致性": calculate_consistency(dataset),
        "完整性": calculate_completeness(dataset),
        "准确性": calculate_accuracy(dataset),
        "时效性": calculate_freshness(dataset)
    }
    return metrics

def calculate_diversity(dataset):
    """计算数据多样性"""
    # 使用token级别n-gram多样性
    from collections import Counter
    
    all_tokens = []
    for sample in dataset:
        all_tokens.extend(sample["text"].split())
    
    token_freq = Counter(all_tokens)
    unique_ratio = len(token_freq) / len(all_tokens)
    
    return unique_ratio

数据集选择指南

# 根据任务选择数据集
dataset_selection = {
    "通用对话": ["ShareGPT", "OASST", "LMSYS-Chat"],
    "代码生成": ["The Stack", "CodeAlpaca", "CodeContests"],
    "数学推理": ["GSM8K", "MATH", "NuminaMath"],
    "知识问答": ["Natural Questions", "TriviaQA", "HotpotQA"],
    "创意写作": ["ROCStories", "WritingPrompts", "StoryCloze"]
}

数据集处理流程

def prepare_dataset_pipeline(raw_data, task_type):
    """数据集准备流程"""
    # 1. 数据清洗
    cleaned_data = clean_data(raw_data)
    
    # 2. 去重
    deduplicated = deduplicate(cleaned_data)
    
    # 3. 质量过滤
    filtered = quality_filter(deduplicated)
    
    # 4. 格式化
    formatted = format_for_task(filtered, task_type)
    
    # 5. 分割数据集
    train, val, test = split_dataset(formatted)
    
    return {
        "train": train,
        "validation": val,
        "test": test,
        "stats": get_dataset_stats(formatted)
    }

数据集使用最佳实践

数据配比策略

# 预训练数据配比
pretraining_mix = {
    "网页文本": 0.60,
    "书籍": 0.15,
    "代码": 0.10,
    "学术论文": 0.08,
    "维基百科": 0.05,
    "对话数据": 0.02
}

# 指令微调数据配比
instruction_mix = {
    "通用指令": 0.40,
    "代码指令": 0.20,
    "数学指令": 0.15,
    "创意指令": 0.15,
    "专业指令": 0.10
}

数据增强技术

# 数据增强方法
augmentation_methods = {
    "回译": "通过翻译增强多样性",
    "同义词替换": "保持语义的词汇变换",
    "指令改写": "改变指令表达方式",
    "响应扩展": "扩展简短响应",
    "对话合成": "生成多轮对话"
}

总结

LLM数据集是模型能力的基础。预训练数据提供语言知识,指令微调数据训练指令跟随能力,对齐数据确保模型与人类价值观一致。选择和处理高质量数据集是成功训练LLM的关键。