外观
LLM 进阶面试题
内容整理自学习笔记,仅供面试备考参考;不构成录用、培训或考试承诺。
1. 大模型如何让生成文本丰富而不单调?
训练层面
- 海量参数:基于 Transformer 的模型参数量巨大(Billion 级),有助于学习多样化的语言模式与结构
- 微调技术:P-Tuning、LoRA 等技术降低了微调成本,使模型在垂直领域获得更强的生成能力
- 精心设计的损失函数:在训练过程中加入特定 Loss 项,有效抑制单调内容生成
推理层面
- Temperature(温度):调节输出概率分布的平滑程度,温度越高输出越多样
- Nucleus Sampling(Top-P):从累积概率超过 P 的 token 集合中采样,兼顾多样性与质量
- Top-K Sampling:从概率最高的 K 个 token 中随机采样
- Contrastive Search:限制与历史 token 相似度高的 token,鼓励多样性
2. LLM 复读机问题
2.1 什么是复读机问题?
复读机问题指大模型在生成文本时出现的不正常重复现象,分为四个层级:
| 层级 | 表现 |
|---|---|
| 字符级重复 | 对一个字或词反复生成 |
| 语句级重复 | 对一句话反复生成 |
| 章节级重复 | 对相同 prompt 输出完全相同或高度相似的内容 |
| 跨 prompt 重复 | 对不同 prompt 也生成相似内容,信息熵低 |
典型案例:
- 电商翻译场景:出现 "steckdose steckdose steckdose..."
- 多模态理解:不断重复 "这是一个杯子,这是一个杯子..."
- 文本创作:生成结果千篇一律
2.2 为什么会出现复读机问题?
数据层面:
- 训练数据偏差:训练语料中大量重复文本导致模型倾向于复制常见模式
- 缺乏多样性:训练数据缺乏足够的语言多样性和语境变化
训练目标层面:
- 自监督学习限制:预测下一个词的训练目标使模型倾向于生成与输入相似的文本
- Induction Head 机制:模型倾向于从前文已预测的词中挑选最佳匹配
信息论层面:
- 信息熵角度:对于语句连贯性弱、词序堆叠的文本(如电商标题),信息熵很高。当模型无法准确预测下一词时,Softmax 分布趋于平坦,模型倾向于从前文选取已有词
- 语义不变性:添加重复词后文本语义基本无变化(TSNE 分布几乎不变),模型缺乏修正动力
2.3 如何缓解复读机问题?
训练层面
Unlikelihood Training
通过修改训练损失函数,在模型学习真实标签语言逻辑的同时,抑制其生成某些不希望出现的 token 集合 C:
- Token 级:抑制重复 token 的生成
- Sentence 级:抑制重复句子的生成
- 注意:Token 级和 Sentence 级叠加训练会降低重复率,但句子困惑度升高、准确率下降
效果:能显著降低 4-gram 重复率,但集合 C 的设计较为困难,不同任务需精心设计。此方法仅能解决字符级和语句级重复。
引入噪声
在生成时引入随机性或噪声(如随机采样、随机变换),增加输出的多样性。
推理层面
Repetition Penalty(重复惩罚)
通过惩罚因子对 Softmax 结果进行修正,降低历史 token 再次被选中的概率:
- θ 通常设为 1.2
- 在 HuggingFace 中设置
repetition_penalty参数即可 - 仅能解决字符级和语句级重复
Contrastive Search
通过对比机制在解码阶段限制与历史 token 相似度过高的候选 token:
- 第一项为模型原始概率
- 第二项为惩罚项:当前 token 与历史 token 相似度越高,惩罚越大
- 在 HuggingFace 中设置
penalty_alpha参数(0 < α < 1)
训练 + 推理双重机制:训练时加入对比 Loss 降低 token 嵌入相似度,推理时用对比搜索限制相似 token 生成,有效提升创造性。
Beam Search(束搜索)
每个时间步保留 num_beams 个最优候选序列,相比贪心搜索降低了部分重复率。Beam Search 本质是折中算法,理论上不专门解决重复问题,但实践中能在一定程度上优化输出分布。
Top-K Sampling
从 Softmax 后概率最高的 K 个 token 中采样。简单有效,但概率分布极端时(模型非常确定下一 token)可能造成生成错误。生成句子的通顺度和对 Prompt 的忠实度不可控。
在 HuggingFace 中:do_sample=True, top_k=50。
Nucleus Sampling(Top-P 采样)
Top-K 的改进版本。不固定 K 值,而是累积概率,当累积概率超过 P 时停止。当模型确定时 K 值小,不确定时 K 值大,灵活适应不同场景。
在 HuggingFace 中:do_sample=True, top_p=0.9。
Temperature(温度参数)
调节 Softmax 输出概率分布的平滑程度:
- T < 1:分布更尖锐,输出更确定性,适合摘要、翻译等有明确答案的任务
- T = 1:原始分布
- T > 1:分布更平坦,输出更多样化,适合创意写作
- 模型自我重复说明温度过低;偏离主题说明温度过高
No Repeat N-Gram Size
强制限制指定大小的 n-gram 不能重复,若出现重复则选择概率次大的 token。一般建议开启此参数防止连续重复。
在 HuggingFace 中:no_repeat_ngram_size=N。
后处理与过滤
使用文本相似度计算或规则检测并去除重复内容。在检测到异常时,通过加入特殊字符或修改 Prompt 重新生成。
重复率指标监测
| 指标 | 含义 |
|---|---|
| seq-rep-N | N-gram 重复率 |
| uniq-seq | 不同词的个数 |
| rep | 前词重复率 |
| wrep | 加权前词重复率 |
人工干预
对于关键任务或敏感场景,引入人工审查和筛选确保输出质量。
3. Llama 输入句子长度理论上可以无限长吗?
理论上:使用 RoPE 位置编码的 Llama 可以处理任意长度。
实际上存在以下限制:
- 计算资源:长序列需要更多显存和计算时间
- 训练限制:训练时处理的序列长度有限,处理长序列可能导致梯度消失或爆炸
- 上下文建模:长序列的语义结构更复杂,模型捕捉长距离依赖的能力有限
实际优化方案:
- 分块处理:将长序列分段处理
- 增加计算资源
- 改进 Attention 机制(如 Linear Attention)
4. BERT vs LLaMA/ChatGLM 如何选择?
| 维度 | BERT | LLaMA/ChatGLM |
|---|---|---|
| 参数量 | ~110M(BERT-base) | 6B-70B |
| 推理速度 | V100 约 2000+ 条/秒 | V100 约 1 条/秒 |
| 部署成本 | 低(单卡 GPU) | 高(需大显存 GPU) |
| 适合任务 | NLU(分类、NER、信息抽取) | NLG 及复杂 NLU |
选型建议:
- NLU 任务(实体识别、信息抽取、文本分类):BERT 性能已足够,无需大模型,部署成本低、速度快
- NLG 任务(文本生成、对话):
- 纯中文 → ChatGLM-6B
- 中英文 → Chinese-Alpaca-Plus-7B
- 需要英文能力 → LLaMA 系列
5. 各专业领域是否需要独立的大模型?
需要,原因如下:
- 领域知识:不同领域有特定的知识体系和术语
- 语言风格:各领域有独特的表达方式和惯用语
- 需求差异:金融关注数据处理,法律关注条款解析
- 数据稀缺:某些领域数据不足以训练通用模型
实践方案:通用大模型 + 领域微调。在通用模型基础上,用领域数据进行微调和定制,兼顾通用性和专业性。
6. 如何让大模型处理更长的文本?
核心思路
保持位置信息的相对关系,将新长度映射到原训练长度范围:
Position Interpolation:将位置 ID 按比例缩放。如从 2048 扩展到 16384(8 倍),position_id 变为 position_id / 8,值为 10000 的 position_id 被压缩为 1250。
代码修改只需一行:
python
query_states, key_states = apply_rotary_pos_emb(
query_states, key_states, cos, sin, position_ids / ratio
)然后用对话语料进行微调,超过目标长度的文本截断。
发展方向
- 稀疏化:GPT-3 论文提到的稀疏 Attention
- MoE 架构:GPT-4 曾被推测使用 MoE(如 100B×16E 一类传闻配置),以提升长序列训练效率
- Multi-Query Attention:PaLM、Falcon 通过权重共享提升效率
- Linear Attention:将复杂度从 O(N²) 降至 O(N),代表方案有 Linear Transformer、RWKV
- ALiBi:简单优雅的外推方案,无需重新训练