在大型语言模型(LLM)的研究中,数据收集环节往往被严重低估。DeepSeekMath的研究表明,对于数学这类专业领域,精心构建的训练语料甚至能让7B参数的"小模型"在竞赛级数学基准测试中超越参数规模大得多的通用模型。这揭示了领域专用数据质量对模型性能的决定性影响。
数学内容在互联网上呈现三个显著特征:
传统的关键词过滤(如搜索"积分"、"定理"等)会漏掉90%以上的真实数学内容,同时误收大量非专业讨论。这促使DeepSeekMath团队开发了一套基于迭代分类的智能采集方案。
关键教训:在专业领域,数据质量比数据规模更重要。一个120B token的高质量数学语料,效果远优于10倍规模的未过滤通用语料。
整个系统采用"种子→分类→扩展"的飞轮模式:
经过4轮迭代后,分类器召回率可达98%,最终获得35.5M页面/120B token的数学语料。
python复制def html_to_text(html):
# 移除所有HTML标签
text = re.sub(r'<[^>]+>', ' ', html)
# 合并连续空白字符
text = re.sub(r'\s+', ' ', text).strip()
return text
构建基准测试的n-gram数据库(n=3~10),采用Aho-Corasick算法实现高效匹配:
python复制def select_pages(pages, budget=120e9):
pages.sort(key=lambda x: -x['score']) # 按置信度降序
selected = []
total_tokens = 0
for page in pages:
if total_tokens + page['ntokens'] > budget:
break
selected.append(page)
total_tokens += page['ntokens']
return selected
bash复制pip install datasets cdx-toolkit warcio fasttext tqdm tiktoken
python复制import fasttext
from datasets import load_dataset
# 加载HuggingFace数据集
ds = load_dataset("kenhktsui/math-classifiers-data")
# 转换为FastText格式
with open("math.train", "w") as f:
for example in ds['train']:
label = "__label__math" if example['label'] else "__label__nonmath"
f.write(f"{label} {example['text']}\n")
# 模型训练
model = fasttext.train_supervised(
input="math.train",
lr=0.1,
dim=256,
wordNgrams=3,
epoch=3,
minCount=3
)
model.save_model("math_classifier.bin")
python复制import cdx_toolkit
from warcio import ArchiveIterator
cdx = cdx_toolkit.CDXFetcher(source="cc")
for obj in cdx.iter("*.edu/*", limit=1000):
warc_url = f"https://data.commoncrawl.org/{obj['filename']}"
resp = requests.get(warc_url, headers={"Range": f"bytes={obj['offset']}-{obj['offset']+obj['length']-1}"})
for record in ArchiveIterator(resp.content):
if record.rec_type != "response":
continue
html = record.content_stream().read().decode('utf-8', 'ignore')
text = html_to_text(html)
labels, probs = model.predict(text)
if labels[0] == "__label__math" and probs[0] > 0.9:
print(f"Found math page: {obj['url']} (score={probs[0]:.2f})")
mermaid复制graph TD
A[原始HTML] --> B(移除广告/导航)
B --> C(提取主内容区)
C --> D(LaTeX公式检测)
D --> E(数学术语密度分析)
E --> F[最终分类决策]
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 分类准确率低 | 训练数据不平衡 | 调整正负样本比例至1:1 |
| 内存溢出 | 大文件处理 | 使用生成器替代列表存储 |
| 抓取速度慢 | 网络延迟 | 增加CDX请求超时时间 |
这套方法论可迁移到其他专业领域:
关键调整点:
实战建议:从1M token的小规模实验开始,验证流程可行性后再逐步扩大规模。每次迭代后人工检查100个正例和50个负例,持续优化分类器。
通过构建高质量领域语料,我们完全可以在不增加参数量的前提下,显著提升模型的专业能力。这或许是当前LLM研究中性价比最高的技术路径之一。