2026大模型面试:数据工程与合成数据必考25题(含答案)
资深大佬咖啡厅聊天风格 | 一句话秒答 + 展开来说 + 面试加分 | 覆盖预训练数据清洗、去重去污染、数据配比、合成数据、Tokenizer、偏好标注六大板块
一、预训练数据处理与清洗(5题)
Q1. ⭐ [高频] 大模型预训练数据一般来自哪些数据源?主流预训练语料库各自有什么特点?
一句话秒答: 五大来源------网页爬取、书籍、代码、学术论文、百科,核心差异在于规模、质量和多样性的取舍。
展开来说:
你可以把预训练数据想象成做一锅大杂烩。原料的种类和配比直接决定了味道。
- Common Crawl:互联网上最大的公开爬虫数据,每个月爬几十亿网页。量是真大,但噪声也真大------广告、导航栏、Cookie弹窗啥都有,必须下重手清洗,最终能用的往往只有原始数据的3%~10%。
- C4(Colossal Clean Crawled Corpus):Google从Common Crawl里清洗出来的约800GB英文语料,T5就是用它训出来的。算是"有人帮你洗好的菜"。
- The Pile:EleutherAI搞的800GB多源混合语料,包含22个子集------ArXiv论文、GitHub代码、PubMed医学文献全有。多样性是它的核心卖点。
- RedPajama:开源社区复刻LLaMA训练数据配比搞出来的1.2T token语料库,方便大家复现。
- RefinedWeb:Falcon团队的作品,核心理念是"只要清洗得足够好,光靠网页数据就能训出好模型",约5T token。
- CulturaX:多语言清洗语料,覆盖167种语言,做多语言模型的必备。
面试加分: 提一句"RefinedWeb证明了数据质量比数据来源多样性更重要,它只用清洗后的网页数据就超过了混合多源数据的效果"------面试官会觉得你真读过论文。
Q2. ⭐⭐ [高频] Common Crawl数据的清洗流程一般包含哪些步骤?从原始WARC到最终可用文本的完整pipeline是什么样的?
一句话秒答: 五步走------解析提取、语言识别、规则过滤、去重、质量打分,最终只留3%~10%。
展开来说:
清洗Common Crawl就像淘金,你得从一吨沙子里筛出几克金子:
- 解析提取:原始数据是WARC格式(Web ARChive),先把HTML提出来,再用trafilatura或resiliparse这类工具把正文和"垃圾"分开------导航栏、广告、侧边栏全扔掉,只留正文文本。
- 语言识别:用fastText语言分类器判断这段文本是什么语言。你训中文模型,英文网页就没必要留了。
- 规则过滤:硬规则大刀砍------文档太短的砍、特殊字符比例太高的砍、包含色情暴力关键词的砍。这一步能干掉大部分垃圾。
- 去重:先做URL精确去重(同一个网页爬了N次),再做MinHash近似去重(内容高度相似但URL不同的页面)。
- 质量打分:用KenLM算困惑度,或者训一个fastText质量分类器给每篇文档打分,低分的直接淘汰。
面试加分: 补一句"实践中这五步的顺序很讲究------先做便宜的规则过滤把数据量砍下来,再做昂贵的质量打分,否则计算成本扛不住"。这说明你有工程思维。
Q3. ⭐⭐ [字节/高频] 预训练数据的质量过滤有哪些常见方法?
一句话秒答: 三板斧------规则启发式、分类器打分、困惑度过滤,实战中先粗后细组合着来。
展开来说:
质量过滤这事儿,就像招聘筛简历,得分层:
- 规则启发式:相当于HR先看硬条件------学历不够的、工作年限不够的直接pass。对应到数据就是文档长度太短的、特殊字符太多的、重复n-gram比例太高的,一刀切。简单粗暴但高效,能快速干掉80%的噪声。
- 分类器过滤:相当于让部门leader面试。训一个fastText或BERT分类器,拿Wikipedia当"好文本"的例子,拿随机网页当"差文本"的例子,让模型学会区分。粒度比规则细得多。
- 困惑度过滤:相当于拿一把尺子量"这段文本像不像正常人说的话"。在高质量语料上训一个语言模型(比如KenLM),文本在这个模型下困惑度越高,质量越可疑。
- 去毒过滤:用Perspective API之类的毒性分类器,把有害内容过滤掉。
面试加分: 说"先规则粗筛再分类器精筛"是标准做法,但更高级的是提到"这些方法都有偏------困惑度过滤会偏向Wikipedia风格,会误杀口语、方言和小众领域的好内容"。展示你理解局限性。
Q4. ⭐⭐ [高频] 如何利用困惑度(Perplexity)做数据质量过滤?KenLM在数据清洗中扮演什么角色?
一句话秒答: 在高质量语料上训语言模型,困惑度越高说明文本越"不像好文本",KenLM因为速度极快成为TB级过滤的首选工具。
展开来说:
这个思路其实特别朴素:你先找一批公认的好文本(比如Wikipedia),在上面训一个语言模型。然后拿这个模型去"读"每一篇候选文档------如果模型读得很顺畅(困惑度低),说明这篇文档的风格和质量接近Wikipedia;如果模型读得磕磕绊绊(困惑度高),说明这文档大概率是垃圾。
KenLM 是这个流程的灵魂工具,原因就一个字:快。它是一个N-gram语言模型,每秒能处理百万级token,面对TB级数据也能扛住。相比之下,你要拿个BERT去算困惑度,没个几百张GPU根本跑不完。
典型做法:在Wikipedia上训一个5-gram KenLM,对每篇文档算PPL,把PPL最高的30%~50%文档扔掉。CCNet和RefinedWeb都是这么干的。
面试加分: 主动说出这个方法的"暗坑"------PPL过滤有系统性偏见,它本质上是在说"像Wikipedia的就是好的",这会导致口语化文本、方言内容、小众领域专业文本被误杀。所以实战中一定要和其他方法配合使用。
Q5. ⭐ [高频] 基于规则的启发式数据过滤通常包含哪些规则?
一句话秒答: 长度、字符比例、重复度、脏词、格式异常,五大类硬规则就是数据清洗的第一道防线。
展开来说:
启发式规则就是你凭经验总结出来的"一看就知道这数据不行"的特征:
- 长度规则:字符数<50或token数<20的文档基本没有信息量,直接丢。
- 字符比例:特殊字符或数字占比超过30%?大概率是代码残片、乱码或者表格数据。大写字母比例异常?可能是全大写的广告。
- 重复检测:文档内重复行超过30%,或者重复n-gram比例很高------典型的SEO垃圾或者广告模板,同一句话复制粘贴十几遍。
- 脏词/黑名单:维护一个敏感词和有害内容关键词列表,命中就过滤。虽然粗糙但有效。
- 格式异常:段落太少、平均句长离谱、HTML标签残留、明显乱码。
面试加分: 提DeepMind的Gopher论文------它详细列了大约20条启发式规则,是业界最重要的参考之一。面试的时候你说"我参考的是Gopher的规则集",显得你不是闭门造车。
二、数据去重与去污染(5题)
Q6. ⭐ [高频] 预训练数据为什么需要去重?数据重复对模型训练有什么影响?
一句话秒答: 不去重会导致记忆泄露、训练效率下降、分布偏移和benchmark虚高,去重后用更少数据反而训得更好。
展开来说:
这么说吧,去重是数据工程里ROI最高的操作,没有之一:
- 记忆与隐私泄露:重复数据会被模型死记硬背。有研究证明,攻击者可以通过特定prompt把训练数据原文"逼"出来(extractable memorization)。数据重复次数越多,被提取出来的概率越高。
- 训练效率下降:假设你有100B token数据,其中30%是重复的,那你等于只拿70B的有效数据花了100B的算力。纯亏。
- 分布偏移:某些网站的内容被爬了几百次(比如维基百科的镜像站),不去重的话模型会严重偏向这些来源的风格。
- benchmark污染:测试集的数据如果在训练集里出现了好几遍,你的评测分数就是假的。
Lee et al. (2022) 做了个很有说服力的实验:去重后用更少的数据训练出来的模型,反而比不去重用全量数据训练的模型更好。
面试加分: 补一句"去重不仅仅是节省存储,更关键的是它直接影响模型的泛化能力和安全性",把格局拉高。
Q7. ⭐⭐ [高频] 什么是MinHash?请描述MinHash算法的原理及其在大规模文本去重中的应用。
一句话秒答: MinHash通过局部敏感哈希(LSH)高效估计文档间的Jaccard相似度,把O(n^2)的两两比较降到近线性复杂度。
展开来说:
MinHash的精髓用大白话说就是:我不需要完整比较两篇文档的每一个词,我只需要用一种"聪明的摘要"方式,让相似的文档大概率产生相似的摘要。
具体流程分五步:
- Shingling:把文档切成n-gram集合(通常5-gram)。比如"今天天气不错"切成"今天天气不"和"天天气不错"。
- MinHash签名:对n-gram集合施加多个(比如128个)随机哈希函数,每个函数取最小哈希值,组成一个128维的签名向量。数学上可以证明,两个文档签名的一致率就是它们Jaccard相似度的无偏估计。
- LSH分桶:把128维签名切成b个band(比如8个band,每个16行)。只要任意一个band完全相同,就把这两篇文档标记为"候选相似对"。这一步是性能的关键------避免了n篇文档两两比较的O(n^2)噩梦。
- 候选对验证:对候选对做精确Jaccard计算,确认真的相似。
- 聚类去重:把相似文档组成连通分量,每个连通分量只保留一篇。
面试加分: 能说出典型参数设置------"5-gram、128维签名、8 band * 16行、Jaccard阈值0.8",面试官会觉得你是真干过这事的。RefinedWeb、RedPajama、Dolma都是用这套方案。
Q8. ⭐⭐ [字节/高频] 数据去重有哪几种粒度?(精确vs近似、句子级vs文档级vs数据集级)各自适用什么场景?
一句话秒答: 两个维度交叉------方法上分精确和近似,粒度上分句子级、文档级和数据集级,实战中从粗到细组合使用。
展开来说:
去重不是一个动作,是一套组合拳:
方法维度:
- 精确去重:算哈希值(MD5/SHA256),完全匹配才算重复。快是真快,但你改了一个标点它就认不出来了。适合URL去重和完全复制粘贴的场景。
- 近似去重:MinHash、SimHash、Suffix Array,能发现"高度相似但不完全相同"的内容。比如同一篇新闻被十个网站各改了改标题转载,近似去重能把它们全抓出来。
粒度维度:
- 句子级:用Suffix Array找高频重复子串,主要用来去boilerplate------网站版权声明、Cookie提示这种每个页面都有的东西。
- 文档级:MinHash是主流方案,找重复/近重复的整篇网页。
- 数据集级:跨数据源去重。比如你同时用了Common Crawl和GitHub数据,得确保代码片段没有在两边都出现。
面试加分: 说出标准实战流程------"先URL精确去重(最便宜),再文档级MinHash近似去重(核心),最后句子级子串去重(精修)"。这三步的顺序是有讲究的,先便宜后昂贵。
Q9. ⭐⭐ [高频] 什么是数据去污染?为什么在大模型训练中需要进行数据去污染?
一句话秒答: 去污染就是从训练数据中移除与benchmark测试集重叠的内容,确保评测分数是真实能力而不是"背答案"。
展开来说:
想象一下,你考试之前偷看了答案,考了100分------这分数能说明你学得好吗?数据去污染就是要防止这种情况。
互联网数据里很可能包含MMLU、GSM8K、HumanEval这些benchmark的题目和答案。怎么混进去的?渠道太多了------博客引用了题目、论坛讨论了解法、GitHub上有人刷题提交了代码、教育网站放了题库。这些内容被Common Crawl一爬,就混进训练数据了。
如果不做去污染,模型在这些benchmark上的分数就是虚高的,不能反映真实能力。GPT-4、LLaMA-2、Qwen的论文都专门有一节讲去污染,说明业界对这事极其重视。
常见做法:把所有benchmark测试集的N-gram集合和训练数据做匹配,重叠超过阈值的训练样本直接移除。
面试加分: 说一句"不做去污染的模型,其benchmark成绩在学术界基本不被认可"------这话虽然尖锐但确实是事实,说明你懂学术界的规矩。
Q10. ⭐⭐⭐ [高频] 如何检测预训练数据中是否包含benchmark的测试集数据?常用的检测方法有哪些?
一句话秒答: 主流方法分字面匹配和语义匹配两类,以N-gram重叠为主力,Embedding相似度做补充。
展开来说:
检测数据污染就像抓作弊,得有多种手段:
- N-gram重叠(最常用):计算训练样本和测试样本的N-gram(比如13-gram)重叠率,超过70%就判定为污染。GPT-3和LLaMA-2都用这个方法。简单有效,但抓不到改写型作弊。
- 精确子串匹配:取测试样本中一段比较长的子串(比如连续50个token),在训练数据里做精确检索。可以用Bloom Filter或Suffix Array加速。
- Embedding相似度:用Sentence-BERT算训练样本和测试样本的余弦相似度。这个能抓到改写型污染------题目被人改了改措辞但意思一样。
- 困惑度异常检测:如果模型在某些测试样本上的困惑度异常低(低到不正常),可能暗示训练数据里有这些样本。
标准流程:先用N-gram粗筛(速度快,处理量大),再用Embedding对可疑样本精筛。
面试加分: 提到"去污染也有代价------过度去污染会误删大量合法训练数据,阈值设置是个工程权衡"。每次你主动提出某个方法的trade-off,面试官都会加分。
三、数据配比与课程学习(4题)
Q11. ⭐⭐ [高频] 预训练数据的数据配比为什么重要?不同配比对模型能力有什么影响?
一句话秒答: 数据配比直接决定模型的能力分布,是预训练阶段最关键的超参数之一,比学习率还重要。
展开来说:
你可以这样理解------模型的能力是"吃"出来的。你喂它什么、喂多少,它就长成什么样:
- 代码数据占比拉高 :推理和代码能力显著提升。LLaMA-2把代码占比从5%提到10%,推理能力直接上了一个台阶。这也是为什么很多模型都在加大代码数据占比。
- 学术论文/书籍占比拉高:知识密度和长文本理解能力增强,但可能导致输出风格过于正式。
- 多语言配比:中文占比太低,中文能力就是废的。很多早期开源模型中文差就是这个原因。
- 对话数据占比:影响模型的对话流畅度,但占比太高会让模型"话痨"。
常见配比参考:网页60%70%,书籍5%10%,代码5%15%,学术5%,百科3%5%,对话2%5%。
面试加分: 提DoReMi这个工作------它尝试用小模型自动学习最优数据配比,不再靠人拍脑袋。说明你关注最新研究趋势。
Q12. ⭐⭐ [面经] Chinchilla Scaling Law对预训练数据量有什么指导意义?给定参数量如何确定所需Token数?
一句话秒答: Chinchilla定律说参数量和数据量应该1:20等比例缩放,但现在业界主流已经转向"over-training"策略。
展开来说:
Chinchilla Scaling Law是DeepMind 2022年的一个重磅发现,核心结论其实就一句话:你的模型有多大,数据就该有多多。 最优比例大约是1:20------1B参数对应20B tokens,7B参数对应140B tokens,67B参数对应约1.4T tokens。
这个发现当时很反直觉。之前GPT-3那一代模型普遍是"参数很多但数据没喂够"(过大欠训练),Chinchilla说你应该用更小的模型配更多的数据。
但有趣的是,现在大家已经不严格遵守1:20了。LLaMA带头搞了"over-training"------7B模型用了1T tokens,远超理论最优的140B。为什么?因为训练是一次性的成本,但推理是反复使用的。训练时多花点算力,换来一个更小但更强的模型,推理时省的钱远超训练多花的钱。
面试加分: 说出"Chinchilla优化的是训练算力,而LLaMA优化的是推理效率------trade training compute for inference efficiency"。这句话精准概括了两种策略的哲学差异。
Q13. ⭐⭐⭐ [高频] 领域大模型预训练时,通用语料和领域语料的比例一般如何设置?比例不当会导致什么问题?
一句话秒答: 典型配比领域:通用 = 1:1到1:5,核心挑战是平衡领域专业性和通用能力,比例失调会导致灾难性遗忘。
展开来说:
做领域大模型就像培养一个专科医生------你既要他精通心脏外科,又不能让他连感冒都不会看。
- 领域占比太高(>80%) :专业能力是上去了,但通用能力崩了。用户问个日常问题模型一脸懵逼,多轮对话能力也大幅退化。这就是经典的灾难性遗忘。
- 领域占比太低(<10%):领域知识注入不够,专业术语理解不到位,还不如直接用通用模型。
- 实战策略:采用"replay"机制------在领域数据中按比例混入通用数据。BloombergGPT就是用了约50%金融数据+50%通用数据。
- 退火(annealing)技巧:训练末期逐步提高高质量领域数据的占比,实现从通用到专业的平滑过渡。
面试加分: 提到"实战中必须同时监控领域benchmark和通用benchmark(如MMLU),两条线都不能塌"。这说明你有工程落地经验,不是只会调参。
Q14. ⭐⭐ [高频] 预训练数据量不够时,是增大epoch数还是增加合成数据?两种策略各有什么利弊?
一句话秒答: 业界现在更倾向合成数据扩充,多epoch训练超过4轮后收益显著递减甚至有害。
展开来说:
数据不够用是个非常现实的问题,尤其是做领域模型的时候。两条路各有各的坑:
多epoch训练(反复学同一批数据):
- 优点:最简单,不需要额外数据。
- 坑:Muennighoff et al. (2023)发现超过4个epoch后收益断崖式下降,甚至有害。本质上就是过拟合------模型开始背答案而不是学知识。
合成数据扩充(用强模型生成补充数据):
- 优点:可以定向补充稀缺领域,增加多样性。比如你缺医疗数据,让GPT-4生成一批。
- 坑:模型偏见会被继承,而且多轮迭代合成有模型坍塌风险。
实战建议: 首选方案其实是既不加epoch也不加合成数据------先回去把现有数据的质量提上来。更好的清洗和过滤往往比增加数据量更有效。如果确实要扩充,合成数据占比控制在20%30%以内,多epoch不超过24轮。两者可以结合使用。
面试加分: 说"首选优化数据质量,其次合成数据补充稀缺领域,最后才考虑多epoch"------这个优先级排序体现了成熟的工程判断。
四、合成数据与指令构造(5题)
Q15. ⭐⭐ [高频] 什么是Self-Instruct?请描述Self-Instruct的完整流程。
一句话秒答: Self-Instruct让LLM自己给自己生成训练数据------从175条种子指令出发,通过迭代扩充到52K+,大幅降低人工标注成本。
展开来说:
Self-Instruct的核心思想特别妙:既然LLM已经很强了,为什么不让它自己生产训练数据呢?
完整流程分五步,像一个自我增殖的循环:
- 种子指令池:人工写175条高质量的"指令+输入+输出"三元组,作为启动种子。
- 指令生成:从种子池随机抽几条当示例,塞进prompt让LLM生成新指令。"你看这些例子,给我再编几条类似但不同的指令。"
- 分类判断:判断新指令是否需要用户输入("翻译这段话"需要输入,"写一首诗"不需要)。
- 实例生成:对每条新指令,让LLM生成对应的输入-输出实例。
- 质量过滤:用ROUGE-L和已有指令比对,去掉太像的;去掉格式不对的、输出太短太长的。
通过过滤的新指令加回种子池,继续迭代。175条种子最终能"膨胀"到52K+。Stanford Alpaca就是用这个方法,花不到500美元就搞出了一个能用的指令微调数据集。
面试加分: 说"Self-Instruct的成功验证了一个重要假设------LLM在预训练阶段已经学到了足够的知识,缺的只是指令遵循的格式"。这和LIMA的Superficial Alignment Hypothesis遥相呼应。
Q16. ⭐⭐ [字节/高频] 什么是Evol-Instruct?WizardLM中的Evol-Instruct如何通过"进化"策略逐步提升指令复杂度?
一句话秒答: Evol-Instruct对已有简单指令施加多种"进化"操作(加深度、加宽度、具体化、加推理),逐步升级难度。
展开来说:
如果说Self-Instruct是"从无到有"地生产数据,那Evol-Instruct就是"从简单到复杂"地升级数据。思路很像游戏里的"进化"系统:
- 深度进化(Deepening):增加推理步骤。"计算1+1" -> "计算一个等差数列的前20项之和"。
- 宽度进化(Widening):增加约束条件。"写一封邮件" -> "写一封邮件,要求正式语气、不超过200字、包含三个要点"。
- 具体化(Concretizing):抽象变具体。"分析一个算法的复杂度" -> "分析快速排序在最坏情况下的时间复杂度,并和归并排序做对比"。
- 增加推理:要求多步逻辑。"这个代码有bug吗?" -> "找出bug,解释原因,给出修复方案,并分析修复后的边界情况"。
- 反向进化:也会生成更简单的版本,增加数据的难度多样性。
流程:简单种子指令 -> 随机选一种进化策略 -> LLM执行进化 -> 质量检查 -> 多轮迭代。
面试加分: WizardLM在复杂任务上表现突出,核心原因就是Evol-Instruct让训练数据覆盖了从简单到困难的完整难度梯度。提一句"难度多样性比主题多样性更被低估",这是一个有深度的观点。
Q17. ⭐⭐ [高频] 合成数据的质量控制有哪些常见方法?如何评估和过滤合成数据中的低质量样本?
一句话秒答: 七种武器------规则过滤、一致性验证、交叉验证、难度校准、多样性检测、人工抽检、反向验证,层层把关。
展开来说:
合成数据最怕的就是"垃圾进垃圾出"。你用GPT-4生成了十万条数据,里面有多少是真能用的?质量控制必须做到位:
- 规则过滤:最基本的一关。长度异常的、格式错误的、包含"As an AI language model"这种模型身份泄露的,直接扔。
- 一致性验证(Self-Consistency):同一个问题让模型生成多次,只保留答案一致的。如果模型自己都答不稳定,这条数据大概率有问题。
- 交叉验证(LLM-as-Judge):用另一个模型(比如GPT-4)对合成数据打分,低分的淘汰。这其实就是"让老师改学生的作业"。
- 难度校准:确保生成的数据难度分布合理,不能全是简单题或者全是变态难题。
- 多样性检测:算embedding分布,确保数据覆盖了足够多的主题和风格,而不是一万条数据在说同一件事。
- 人工抽检:随机抽5%~10%人工审核,建立质量基线。贵但不可替代。
- 反向验证:终极检验------用这批合成数据训练一个模型,在held-out测试集上看效果。效果差就说明数据不行。
面试加分: 说"质量控制的成本通常是数据生成成本的2~3倍,但这个钱不能省"。这种cost-aware的思维方式是高级工程师的标志。
Q18. ⭐⭐ [高频] LIMA论文的核心发现是什么?"Less Is More for Alignment"对SFT数据工程有什么启示?
一句话秒答: LIMA用仅1000条精选数据做SFT就接近了52K条数据的效果,证明了SFT数据质量远比数量重要。
展开来说:
LIMA这篇论文对整个SFT数据工程领域的影响是颠覆性的。核心实验简单到令人震惊:
拿65B的LLaMA,只用1000条手工精选的高质量数据做SFT,效果居然接近甚至超过了用52K条数据训练的Alpaca,以及其他用更多数据训练的模型。
这背后是一个非常深刻的假说------Superficial Alignment Hypothesis(表面对齐假说):模型的知识和能力在预训练阶段就已经学到了,SFT的作用不是"教模型新东西",而只是"教模型用正确的格式和语气说话"。
打个比方:一个博士毕业的人什么都懂,但你得教他"跟客户说话别用学术腔调"------这就是SFT在干的事。教这个不需要十万个例子,一千个精选示范就够了。
对数据工程的启示:
- 精选远胜海量。投资源在数据筛选上比增加数据量回报高得多。
- 多样性极其重要------1000条数据必须覆盖尽可能多的任务类型。
- 人工筛选的边际收益极高,值得花钱请标注专家。
面试加分: 把LIMA和Self-Instruct串起来讲------"Self-Instruct解决了数据从0到1的问题,LIMA告诉我们从1到精的方向比从1到万更重要"。
Q19. ⭐⭐⭐ [面经] 合成数据是否存在"模型坍塌"问题?多轮迭代合成数据对模型多样性有什么影响?
一句话秒答: 确实存在,模型坍塌是合成数据的核心风险------多轮迭代会导致输出分布逐步收窄,尾部多样性消失。
展开来说:
模型坍塌这个概念理解起来很直观。想象一个复印机:原稿复印一次还行,但你拿复印件去复印复印件,再拿那个去复印...几轮下来字迹就糊了。
- 模型坍塌的过程:用模型A的输出训练模型B,用B的输出训练模型C...每一轮都相当于对数据分布做了一次"有损压缩"。高概率的主流模式被保留,低概率但合理的尾部模式逐渐消失。
- 具体表现:输出越来越同质化,创造性断崖式下降,某些token或短语的频率异常升高(模型开始"口头禅"化),尾部分布直接消失。
- Shumailov et al. (2023) 在Nature上发了论文系统证明了这个现象,引起了业界对合成数据的广泛警惕。
缓解策略:
- 最有效的方法:始终在合成数据中混入一定比例的真实人类数据。这是目前公认的最佳实践。
- 控制迭代轮数,一般不超过2~3轮。
- 生成时把temperature和top-p调大一些,增加采样多样性。
- 对合成数据做多样性筛选,用embedding聚类去掉过于相似的样本。
面试加分: 说"模型坍塌的本质是信息论问题------每一轮合成都是一次有损信道传输,信息熵单调递减"。这个视角很学术,面试官一般会眼前一亮。
五、Tokenizer与词表设计(4题)
Q20. ⭐ [高频] Tokenize有哪三种粒度(word、subword、char)?各自的优缺点是什么?为什么subword是目前主流?
一句话秒答: Subword在词表大小、OOV问题和语义完整性之间取得了最佳平衡,所以主流LLM全部采用subword方案。
展开来说:
分词粒度的选择本质上是一个三角权衡------词表大小、序列长度、语义完整性,你不可能三个都要:
- Word级(词粒度):词表巨大(轻松超过100K),而且碰到没见过的词(OOV)就傻了。德语那种超长复合词直接废了。唯一的优点是每个token都有完整语义。
- Char级(字符粒度):词表极小(几百个),永远不会有OOV问题。但代价是序列变得巨长------一个句子可能变成几百个token,建模效率极低,也很难在字符层面捕捉到词级语义。
- Subword级(子词粒度):两者折中的"甜蜜点"。词表大小适中(32K~128K),高频词保持完整("the"就是"the"),低频词被拆成有意义的子单元("unhappiness" -> "un" + "happiness"),几乎不会出现OOV。
目前所有主流LLM都用subword:GPT系列用BPE,BERT用WordPiece,T5和LLaMA用SentencePiece(支持Unigram和BPE两种算法)。
面试加分: 补一句"subword的'有意义拆分'特性还带来了一个bonus------它能天然处理形态变化,比如'running'、'runner'、'runs'都共享'run'这个子词,相当于隐式学到了词形变化规律"。
Q21. ⭐⭐ [字节/高频] BPE算法的核心思想和具体步骤是什么?请手动演示一个BPE合并的例子。
一句话秒答: BPE从字符级出发,反复合并频率最高的相邻符号对,自底向上构建词表。
展开来说:
BPE(Byte-Pair Encoding)的算法其实非常简洁,四步循环:
- 把所有词拆成字符序列,加上结束符。
- 统计所有相邻字符对的出现频率。
- 把频率最高的那一对合并成一个新符号。
- 重复2-3,直到词表达到目标大小。
手动演示: 假设语料中有 "low"(5次), "lower"(2次), "newest"(6次), "widest"(3次)
初始拆分:l o w, l o w e r, n e w e s t, w i d e s t
- 第1轮:统计相邻对------(e,s)出现9次最高,合并 ->
l o w,l o w e r,n e w es t,w i d es t - 第2轮:(es,t)出现9次最高,合并 ->
l o w,l o w e r,n e w est,w i d est - 第3轮:(l,o)出现7次最高,合并 ->
lo w,lo w e r,n e w est,w i d est - 继续下去...
每一轮合并都在构建一个"更大的积木块",最终高频词会被合并成完整的token,低频词则保留为几个子词的组合。
面试加分: GPT-2/3/4用的是Byte-level BPE------直接在UTF-8字节上做BPE,而不是在字符上。好处是天然支持所有语言和特殊字符,不需要预分词。面试时说出"byte-level"和"character-level"BPE的区别,能体现你对细节的掌握。
Q22. ⭐⭐ [高频] WordPiece与BPE的核心区别是什么?WordPiece选择合并子词对的依据公式是什么?
一句话秒答: BPE看频率,WordPiece看互信息------合并后频率除以各自频率的乘积,本质上选的是"在一起比分开显著更频繁"的对。
展开来说:
两者的唯一区别就在于"怎么选择下一对要合并的符号":
- BPE :直接选
freq(A, B)最大的对。谁出现得多就合并谁,简单粗暴。 - WordPiece :选
score(A, B) = freq(AB) / (freq(A) * freq(B))最大的对。这其实就是点互信息(PMI)。
直觉上理解:假设"t"和"h"都是超高频字符,BPE可能很早就把它们合并了,因为"th"的绝对频率确实很高。但WordPiece会想:"t和h各自本来就高频,它们凑在一起频率高是理所当然的,不能说明它们'应该'在一起。" WordPiece更关心的是:这两个符号在一起出现的频率,是否显著高于它们各自独立出现时的期望?
效果上说,WordPiece倾向于合并语义关联更强的子词对,BPE倾向于合并统计频率高的对。但实际性能差异不大,更多是工程选择。
BERT用WordPiece(非首子词有"##"前缀,如"play" + "##ing"),GPT系列用BPE。
面试加分: 能把WordPiece的公式和信息论中的PMI(点互信息)联系起来,说明你理解了算法背后的统计学本质,而不只是在背公式。
Q23. ⭐⭐ [高频] 词表大小如何选择?词表太大和太小分别会带来什么问题?
一句话秒答: 主流在32K~128K之间,太大浪费参数和显存,太小导致序列过长和语义碎片化。
展开来说:
词表大小是效率和表达力的经典权衡:
词表太大(>200K)的问题:
- Embedding层参数暴增------vocab_size * hidden_dim,词表翻倍embedding参数就翻倍。
- 低频token的embedding根本训不充分,因为它们在训练数据中出现次数太少。
- 推理时显存占用增加。
词表太小(<10K)的问题:
- 同一段文本需要更多token来表示------序列变长,attention计算量暴增。
- 拆分过细导致语义碎片化,"人工智能"被拆成四五个无意义的片段。
- 对中文影响尤其大:32K词表下,一个汉字可能被拆成3~4个token。
典型选择参考: GPT-2约50K,LLaMA-1/2约32K,LLaMA-3约128K,Qwen 150K+(大词表专门为了支持多语言和中文)。
选择原则: 在保证目标语言文本压缩率(tokens/characters比)可接受的前提下,尽量用较小词表以节省参数。如果要做多语言模型,词表得往大了开。
面试加分: 提"tokens/characters压缩率"这个指标------"中文在32K词表下的压缩率通常只有英文的1/2到1/3,这意味着处理同样长度的中文文本,计算成本是英文的2~3倍。这也是为什么Qwen选择了150K+的大词表。"
六、偏好数据与RLHF标注(2题)
Q24. ⭐⭐ [高频] RM(奖励模型)训练数据的格式是什么样的?偏好数据通常包含哪些字段?
一句话秒答: 核心是偏好对------一个prompt配两个回答(chosen和rejected),人类标注哪个更好,就这么简单。
展开来说:
RM训练数据的格式是整个RLHF流水线里最好理解的部分。每条数据本质上就是一个"A/B测试"的结果:
基本三元组:
prompt:用户输入的问题或指令chosen:人类认为更好的那个回答rejected:人类认为更差的那个回答
实际例子:
json
{
"prompt": "解释量子纠缠",
"chosen": "量子纠缠是指两个或多个粒子在量子层面上建立了一种特殊的关联...(准确、清晰、有层次的回答)",
"rejected": "量子纠缠就是两个东西连在一起...(过于简化、不准确的回答)"
}
扩展字段:
chosen_rating/rejected_rating:标注者打的分(如1~7分),提供更细粒度的质量信号。metadata:标注者ID、标注时间、任务类型等,用于质量审计。- 多轮格式:prompt可以是完整的多轮对话历史,chosen/rejected是最后一轮的两个候选。
- 排序格式:部分数据集(如RLHF-V)提供K个回答的完整排序,可以从中构造C(K,2)个偏好对。
主流公开数据集:Anthropic HH-RLHF、OpenAssistant、UltraFeedback。
面试加分: 提到"从K个回答的排序中构造偏好对时,排名差距大的对(如第1名vs第4名)比差距小的对(如第1名vs第2名)对RM训练更有效"------这是一个实战中很有用的细节。
Q25. ⭐⭐ [字节/高频] RLHF中人类标注者的标注流程是怎样的?对比排序和打分有什么优缺点?
一句话秒答: 标准流程是"读prompt -> 看多个回答 -> 排序或打分 -> 质量审核",业界主流选排序因为人类更擅长相对比较。
展开来说:
标注流程说白了就是让标注者当"评委",但当评委有两种方式:
方式一:对比排序(Comparison Ranking)
- 做法:给标注者2~4个回答,让他从好到差排个序。
- 优点:人类天生就更擅长说"A比B好",而不是说"A值7.3分"。标注者之间的一致性(inter-annotator agreement)明显更高。另外不需要统一评分标准,降低了培训成本。
- 缺点:只有序数信息(谁在前谁在后),丢失了"好多少"的量级信息。K个回答排序需要O(KlogK)次比较,标注工作量随K增长。
方式二:打分(Scalar Rating)
- 做法:对每个回答独立打分,比如1~7分,可以分多维度(有用性、真实性、安全性)。
- 优点:提供绝对量级信息,可以直接做回归训练,支持多维度评估。
- 缺点:最大的问题是标注者偏差------同一个回答,老张给6分老李可能只给4分。一致性通常远低于排序。
业界主流选排序:InstructGPT/ChatGPT用的就是排序方式,因为一致性更高,而且和Bradley-Terry模型天然兼容------Bradley-Terry本来就是建模"谁赢谁"的概率。
面试加分: 说"排序适合训练RM,打分适合细粒度质量分析和数据筛选,最佳实践是两者结合------先排序训RM,再用打分数据做数据集质量审计"。这种不二选一而是组合使用的回答,体现了成熟的工程判断。
以上25题覆盖了数据工程与合成数据领域的核心考点。面试时记住:这个领域的核心哲学是**"数据质量 > 数据数量"**,几乎所有问题的答案都围绕这个中心展开。祝面试顺利!