《猫猫钓游记》可爱+收集+钓鱼游戏试玩
2026-06-30
2026-07-01 0
每次和朋友聊起 AI,总会有人问:"GPT 这么聪明,是不是因为它算力特别强?"

我通常会反问一句:"你觉得一个学生考高分,是因为他脑子聪明,还是因为他刷的题多、学的好?"
答案是:都重要,但数据才是那个被严重低估的因素。
今天我们就来聊聊,大模型的数据集到底是什么,为什么要分成训练集、验证集、测试集,以及在实际工程中我们怎么处理数据。
大模型的"智能"来自三个东西:
| 要素 | 是什么 | 类比 |
|---|---|---|
| 算力 | GPU/TPU 的计算能力 | 学生的脑力 |
| 算法 | Transformer 架构 | 学习方法 |
| 数据 | 海量的文本语料 | 教材和习题 |
很多人觉得算力最重要——毕竟一张 H100 显卡要几十万。但实际情况是:
就像一个学生,脑子再聪明(算力强)、学习方法再好(算法优),如果不给他好的教材和足够的练习题(数据),他也成不了学霸。
这是很多新手会问的问题:我有一堆数据,直接全扔给模型训练不就完了?
不行。
想象一下,如果一个学生只看书不做题,他怎么知道自己学会了没有?如果他把考试题提前拿来当练习题做,那考出来的分数能代表真实水平吗?
这就是数据集划分的核心逻辑:
占比:约 80%
模型在这部分数据上"学习"。就像学生上课用的教材,模型通过训练集来理解数据中的规律和模式。
占比:约 10%
在训练过程中,我们会频繁地用验证集来检验模型的训练效果。如果模型在训练集上表现很好,但在验证集上表现很差,说明它"过拟合"了——就像一个学生只会做原题,换个花样就不会了。
验证集的作用是帮我们调参,及时发现问题。
占比:约 10%
模型训练完成后,用测试集来做最终评估。这部分数据模型在训练过程中从未见过,用来检验它的"泛化能力"——面对全新的、陌生的输入,能不能给出正确的回答。
关键原则:测试集只能用一次。 如果你反复用测试集来调优,那它就变成了另一种形式的"练习题",失去了评估的意义。
说了这么多理论,来点实际的。我们用阿里魔搭社区(ModelScope)的数据集工具来做一次真实的数据集加载和划分。
from modelscope.msdatasets import MsDataset# 加载大众点评情感分析数据集full_ms_ds = MsDataset.load("DAMO_NLP/yf_dianping",subset_name="default",split="train"# 原始数据集只有 train 分割,包含 100% 数据)# 看看数据长什么样full_ms_ds[0]
输出:
{"sentence": "味道还不错,粥的量还是挺多的,一家人要了好几种粥,最喜欢的应该就是紫薯燕麦粥了...","label": 1,"dataset": "dianping"}
这是一条大众点评的评论数据,label: 1 表示正面评价。模型的任务就是学会判断一条评论是好评还是差评。
魔搭社区的数据集格式需要先转换成 Hugging Face Dataset 格式,然后进行划分:
from modelscope.msdatasets import MsDataset# 加载原始数据集full_ms_ds = MsDataset.load("DAMO_NLP/yf_dianping",subset_name="default",split="train")# 转换成 Hugging Face Dataset 格式full_hf_ds = full_ms_ds.to_hf_dataset()# 第一次划分:90% 训练+验证,10% 测试split1 = full_hf_ds.train_test_split(test_size=0.1, seed=42)train_temp_hf = split1["train"]test_hf = split1["test"]# 第二次划分:从剩余 90% 中再分出 10% 作为验证集split2 = train_temp_hf.train_test_split(test_size=0.1, seed=42)train_hf = split2["train"]val_hf = split2["test"]print(f"训练集 train: {len(train_hf)}") # 36436print(f"验证集 val: {len(val_hf)}") # 4049print(f"测试集 test: {len(test_hf)}") # 4499print("n单条样本:", train_hf[0])
输出:
训练集 train: 36436验证集 val: 4049测试集 test: 4499单条样本: {'sentence': '自从乐乐出生,N久没唱歌了偶...', 'label': 0, 'dataset': 'dianping'}
几个关键点:
seed=42:设置随机种子,保证每次划分的结果一致,方便复现train_test_split:Hugging Face Dataset 内置的划分方法,使用起来非常方便静态的 8:1:1 划分有个问题:如果你的数据分布不均匀,刚好某一部分数据质量比较差,而它又恰好被分到了测试集,那你的评估结果就不准确了。
解决方案:K 折交叉验证(K-Fold Cross Validation)
原理很简单:
第1轮: [测试] [训练] [训练] [训练] [训练] ...第2轮: [训练] [测试] [训练] [训练] [训练] ...第3轮: [训练] [训练] [测试] [训练] [训练] ......第K轮: [训练] [训练] [训练] [训练] [训练] ... [测试]
这样做的好处是:每条数据都被训练过,也都被测试过,评估结果更加稳定可靠。
在传统机器学习中,数据划分是"一锤子买卖"。但在大模型时代,数据管理是一个动态的、持续的过程。
采集(爬取、收集)↓清洗(去噪、结构化)↓标注(人工/自动标注)↓管理(版本控制、质量监控)
模型会评估哪些数据质量差、影响性能,然后对这部分数据进行重新采样和清洗。不是训练一遍就完事,而是反复迭代。
验证集不是固定不变的,而是在训练过程中根据模型的状态动态调整。比如某个领域的数据表现不好,就增加该领域的验证样本。
确保数据集覆盖了足够多的知识领域:
回到开头的问题:大模型的"聪明"从哪来?
在模型之上,是数据的艺术。在模型之下,是数据的地基。
再强大的算力、再精妙的算法,如果喂给模型的是垃圾数据,出来的也只能是垃圾。这就是为什么在大模型公司,数据工程师是最核心的岗位之一。
如果你正在学习 AI,我建议你: