27届大模型岗面试准备(五):预训练全流程拆解——从数据清洗到 Tokenizer 再到 PT 的每 27届大模型岗面试准备五预训练全流程拆解——从数据清洗到 Tokenizer 再到 PT 的每一个环节面试官问讲讲预训练流程时他想听的不是收集数据然后训练这种一句话答案而是你能不能把数据管线、Tokenizer、训练配置三大块的关键决策点讲清楚。27届校招里即使岗位 JD 写的是微调/应用方向预训练流程依然是高频考点——因为它是判断候选人对大模型理解深度的分水岭。这篇按照真实预训练项目的执行顺序把每个环节的原理、工程实现和面试追问一次讲透。一、全流程鸟瞰预训练到底分几步先给出全景后面逐节展开数据获取网页Common Crawl、书籍、代码GitHub/The Stack、论文arXiv、百科、对话等多源采集数据清洗语种识别 → 质量过滤 → 去重 → 有害内容过滤 → 隐私信息PII脱敏数据配比与课程不同来源按比例混合可能分阶段调整курriculumTokenizer 训练BPE/BBPE/Unigram决定词表大小与压缩率预训练PTNext Token Prediction 目标配合学习率调度、混合精度、分布式并行评估与退火训练中持续评估 loss/下游任务末期用高质量数据做 learning rate annealing。面试官常从任意一环切入往下挖所以每一环都要有能讲三分钟的储备。二、数据清洗预训练成败的第一决定因素业界共识是数据质量 模型结构微创新。LLaMA、Qwen、DeepSeek 的技术报告里数据处理章节的篇幅都远超模型结构。清洗管线通常包含以下步骤语种识别用 fastText 的语言分类器打分保留目标语种置信度高的文档。中文模型通常保留中英双语因为英文语料在代码、学术领域的质量密度更高。质量过滤分两派规则派启发式Gopher 规则是代表——文档词数在 50~100k 之间、平均词长 3~10、符号占比不超标、含有足够多的常见停用词等。优点是便宜、可解释缺点是误伤高质量的特殊文本如诗歌、表格。模型派训练一个小分类器fastText 或 BERT 级别用高质量语料维基、书籍当正例随机网页当负例给每个文档打质量分。LLaMA 系列用的就是类似思路以维基引用页面为正例。去重是重中之重。重复数据会导致模型记忆而非泛化还会放大隐私泄露风险。三个层级URL 级直接对 URL 去重最便宜文档级MinHash LSH局部敏感哈希做近似去重容忍轻微改写段落/行级精确哈希去掉模板化内容导航栏、版权声明。面试高频追问MinHash 为什么能近似 Jaccard 相似度答案要点MinHash 的核心性质是两个集合的最小哈希值相等的概率等于它们的 Jaccard 相似度。对每个文档的 n-gram 集合取 k 个独立哈希函数的最小值组成签名两个签名逐位比较的相等比例就是 Jaccard 的无偏估计。再配合 LSH 分band把候选对检索从 O(n²) 降下来。三、数据配比不是越多越好而是配得越准越好不同来源的数据对模型能力的贡献不同配比是预训练的核心超参之一数据源典型占比主要贡献风险网页CC 清洗后50%~70%语言多样性、世界知识质量参差、噪声多代码10%~20%逻辑推理、结构化输出占比过高伤自然语言流畅度书籍5%~10%长文本连贯性、叙事能力版权风险学术论文3%~8%专业知识、严谨表达领域分布偏 STEM百科2%~5%事实密度高体量有限数学3%~10%数学推理高质量数学语料稀缺两个面试要点一是代码数据被证明能提升非代码任务的推理能力多个消融实验支持这是为什么纯 NLP 模型也要混代码的标准答案二是多轮退火annealing阶段用高质量小数据——训练末期把学习率降下来的同时切换到教科书级语料能显著提升下游 benchmarkMiniCPM、Llama 3 都公开过这个技巧。四、Tokenizer被低估的关键组件Tokenizer 决定了模型看世界的粒度。主流选择是 BBPEByte-level BPEGPT 系列、LLaMA、Qwen 都在用。BPE 训练过程从单字符或字节词表出发统计语料中相邻 token 对的共现频率迭代合并最高频的对直到词表达到目标大小。BBPE 的改进是以字节为初始单元任何 UTF-8 字符都能表示彻底消灭 OOV代价是中文等非拉丁文字可能被切成多个字节。词表大小的权衡词表越大压缩率越高同样文本的 token 数越少等效上下文更长、推理更省但 embedding 矩阵参数越多、低频 token 训练不充分。LLaMA-2 是 32k对中文很不友好一个汉字常被拆成 2~3 个 tokenQwen 用 152k 的大词表显著提升了中文压缩率DeepSeek-V3 用 128k。中文压缩率是国产模型面试的高频考点同一段中文LLaMA-2 tokenizer 的 token 数可能是 Qwen 的 1.7 倍以上直接影响推理成本和有效上下文。五、可运行代码迷你数据清洗 BPE 训练管线下面这段代码用纯 Python 标准库实现一个可运行的迷你管线启发式质量过滤 → MinHash 近似去重 → 简化版 BPE 训练。直接python pipeline.py即可运行。import re import hashlib from collections import Counter # ---------- 1. 启发式质量过滤Gopher 风格规则的简化版 ---------- def quality_filter(doc: str) - bool: words doc.split() if not (10 len(words) 100000): # 词数范围 return False avg_len sum(len(w) for w in words) / len(words) if not (1.0 avg_len 12.0): # 平均词长 return False symbol_ratio len(re.findall(r[#$%^*], doc)) / max(len(doc), 1) if symbol_ratio 0.1: # 符号占比 return False return True # ---------- 2. MinHash 近似去重 ---------- def minhash_signature(doc: str, num_hashes: int 64, ngram: int 3): tokens doc.split() shingles { .join(tokens[i:ingram]) for i in range(len(tokens)-ngram1)} if not shingles: return None sig [] for seed in range(num_hashes): min_h min( int(hashlib.md5(f{seed}:{s}.encode()).hexdigest(), 16) for s in shingles ) sig.append(min_h) return tuple(sig) def jaccard_est(sig1, sig2): return sum(a b for a, b in zip(sig1, sig2)) / len(sig1) def dedup(docs, threshold: float 0.8): kept, sigs [], [] for d in docs: sig minhash_signature(d) if sig is None: continue if all(jaccard_est(sig, s) threshold for s in sigs): kept.append(d) sigs.append(sig) return kept # ---------- 3. 简化版 BPE 训练 ---------- def train_bpe(corpus: str, num_merges: int 50): # 初始每个词拆成字符序列词尾加 /w words Counter(corpus.split()) vocab {tuple(w) (/w,): c for w, c in words.items()} merges [] for _ in range(num_merges): pairs Counter() for word, cnt in vocab.items(): for i in range(len(word) - 1): pairs[(word[i], word[i1])] cnt if not pairs: break best max(pairs, keypairs.get) merges.append(best) new_vocab {} for word, cnt in vocab.items(): w, i [], 0 while i len(word): if i len(word)-1 and (word[i], word[i1]) best: w.append(word[i] word[i1]); i 2 else: w.append(word[i]); i 1 new_vocab[tuple(w)] cnt vocab new_vocab return merges if __name__ __main__: raw_docs [ the quick brown fox jumps over the lazy dog again and again in the field, the quick brown fox jumps over the lazy dog again and again in the park, # 近重复 #### $$$$ spam spam spam, # 低质量 language models are trained with next token prediction on large corpora, ] cleaned [d for d in raw_docs if quality_filter(d)] print(f质量过滤: {len(raw_docs)} - {len(cleaned)}) deduped dedup(cleaned, threshold0.6) print(fMinHash 去重: {len(cleaned)} - {len(deduped)}) merges train_bpe( .join(deduped), num_merges20) print(fBPE 前 5 个合并规则: {merges[:5]})运行结果会展示4 篇文档过滤掉 1 篇低质量、去掉 1 篇近重复最终用 2 篇干净文档训练出 BPE 合并规则。虽然是玩具规模但过滤→去重→分词训练的骨架和工业界完全一致面试手撕环节写出 MinHash 或 BPE 任意一个都非常加分。六、预训练目标与训练动力学训练目标就是 Next Token Prediction最大化 P(x_t | x_t)损失是交叉熵。看似简单但有几个面试深挖点Scaling LawChinchilla 定律指出给定算力预算模型参数量 N 和训练 token 数 D 应大致满足 D ≈ 20N 才算算力最优。但推理成本的存在让业界普遍过训练over-train——LLaMA 3 8B 训了 15T token远超 Chinchilla 最优点因为小模型多训省下的是部署后每一次推理的钱。这个训练最优 vs 推理最优的权衡是高频考点。学习率调度主流是 warmup cosine decay。warmup通常几百到几千步防止训练初期梯度爆炸cosine 衰减到峰值的 10% 左右。近年 WSDWarmup-Stable-Decay调度兴起中段恒定学习率方便随时分叉做退火MiniCPM 与 DeepSeek 系列使用。混合精度与稳定性BF16 已成为标配比 FP16 动态范围大不易溢出梯度裁剪clip norm 1.0、z-loss、QK-norm 等手段防 loss spike。遇到 loss 突刺的标准处理回滚到最近 checkpoint 跳过问题数据批次。七、面试答题框架与自检清单被问如果让你从零预训练一个 7B 模型你会怎么做时推荐按这个框架作答明确目标通用还是领域模型决定数据配比与词表设计算力核算用 6ND 估算 FLOPsN 参数量、D token 数反推 GPU 时数据管线采集 → fastText 语种/质量过滤 → MinHash 去重 → PII 脱敏产出比目标训练量多 20% 的 token 备用TokenizerBBPE中文场景 100k 词表先在样本语料上测压缩率训练配置BF16、AdamWβ20.95、warmupcosine、序列长度分阶段拉长先 4k 后 32k省算力监控loss 曲线、梯度范数、下游任务小评测集出现 spike 有回滚预案收尾退火阶段上高质量数据产出 base 模型再进入 SFT。自检清单能手推 BPE 合并过程吗能解释 MinHash 原理吗能说出 Chinchilla 结论和它为什么被违背吗知道为什么混代码数据吗这四个问题全能答上预训练环节基本稳了。下一篇讲 SFT数据怎么构造、损失怎么算、什么样的 SFT 数据是好数据。

相关新闻

最新新闻

UART串口通信全解析:从异步原理到嵌入式实战应用

UART串口通信全解析:从异步原理到嵌入式实战应用

1. 项目概述:从零开始理解UART如果你刚开始接触嵌入式开发,或者玩过一些单片机开发板,那么“串口”这个词你一定不陌生。它几乎是所有微控制器(MCU)或片上系统(SoC)最基础、最古老,也…

2026/7/28 3:00:44
树莓派4B读取LM35模拟温度传感器:ADC与SPI实战指南

树莓派4B读取LM35模拟温度传感器:ADC与SPI实战指南

1. 项目概述:从数字到模拟的跨越玩树莓派的朋友,对DS18B20这类数字温度传感器肯定不陌生,接上几根线,读个文件就能拿到温度值,简单直接。但这次,咱们换个玩法,来点“复古”的——用树莓派4B去读…

2026/7/28 3:00:44
如何在浏览器中免费体验完整的macOS桌面系统:终极Web版指南

如何在浏览器中免费体验完整的macOS桌面系统:终极Web版指南

如何在浏览器中免费体验完整的macOS桌面系统:终极Web版指南 【免费下载链接】macos-web 项目地址: https://gitcode.com/gh_mirrors/ma/macos-web 你是否想过在Windows电脑或Linux系统上体验macOS的优雅界面?现在,通过macOS Web桌面系…

2026/7/28 3:00:44
从零打造全向移动麦轮战车:Arduino与Mixly实战指南

从零打造全向移动麦轮战车:Arduino与Mixly实战指南

1. 项目概述:为什么选择麦轮战车作为创客入门项目?如果你对机器人、智能小车感兴趣,并且已经玩腻了普通的四轮或两轮差速小车,那么“麦轮战车”绝对是一个能让你技术水平和成就感都上一个台阶的绝佳项目。我是Maker-T,…

2026/7/28 3:00:44
如何用Anime.js在5分钟内为你的Web项目注入专业动画体验?

如何用Anime.js在5分钟内为你的Web项目注入专业动画体验?

如何用Anime.js在5分钟内为你的Web项目注入专业动画体验? 【免费下载链接】anime JavaScript animation engine 项目地址: https://gitcode.com/GitHub_Trending/an/anime 你是否曾面对过这样的困境:产品经理要求为按钮添加微妙的悬停反馈&#x…

2026/7/28 3:00:44
项目文档:基于MATLAB的语音信号智能降噪分析系统设计与实现

项目文档:基于MATLAB的语音信号智能降噪分析系统设计与实现

摘要:语音信号在采集与传输过程中不可避免地会受到各类噪声干扰,噪声不仅降低语音的可懂度与舒适度,也会显著劣化后续语音识别等上层应用的性能。针对目前商业降噪软件普遍以黑盒形式提供、缺乏中间过程可视化与量化指标反馈的问题&#xff0…

2026/7/28 2:55:44

月新闻