百度 AI Infra 校招 二面 (3)
Q: 减少大模型幻觉的方法?
幻觉(Hallucination)是 LLM 生成看似合理但事实错误内容的现象。根据成因可分为事实性幻觉(编造不存在的事实)和忠实性幻觉(不忠于输入上下文)。
减少方法(按效果和常用程度排列):
RAG(检索增强生成):将问题相关的真实文档作为上下文提供给模型,让生成有据可依(grounding)。最直接有效的方法,适合知识密集型问答。
Self-consistency(自一致性):对同一问题多次采样(temperature>0),取多数一致的答案。基于直觉:正确答案在多次采样中一致,幻觉则不稳定。
Chain-of-Thought(CoT):引导模型逐步推理而非直接跳到答案。显式推理链使得错误更容易被模型自身发现和修正。
RLHF/DPO 对齐:训练模型在不确定时输出”我不知道”而非编造答案。通过偏好数据让模型学会区分”确定可回答”和”应该拒绝”。
后处理验证:用 NLI(自然语言推理)模型检查生成内容与参考文档的一致性(entailment/contradiction)。检测到矛盾时标记或重生成。
结构化约束:约束解码空间(如只能生成知识库中存在的实体),从根本上避免编造。适合封闭域问答。
Q: Beam Search原理及与直接Sample的区别?
Beam Search:
- 每步维护 B 个(beam width)最高概率的候选序列
- 每步:将每个候选扩展 V 个词 -> 得到 B*V 个新候选 -> 保留 top-B
- 终止条件:所有 beam 生成 EOS 或达到最大长度
- 特点:近似搜索(非穷举)高概率序列,生成确定性强、质量稳定
Sampling(随机采样):
- 每步按概率分布 P(next_token|context) 随机采样一个 token
- 常配合:Temperature(控制分布平坦度)、Top-k(只从前 K 高概率 token 中采样)、Top-p/Nucleus(从累计概率达 p 的最小 token 集中采样)
- 特点:输出多样性好,适合创意场景
对比:
| 维度 | Beam Search | Sampling |
|---|---|---|
| 确定性 | 高(相同输入相同输出) | 低(每次不同) |
| 多样性 | 差(倾向安全/通用的输出) | 好(能生成新颖内容) |
| 质量一致性 | 稳定 | 波动大 |
| 重复问题 | 严重(高概率陷入循环) | 轻(随机性打破循环) |
| 适用场景 | 翻译、摘要等需要准确性的任务 | 对话、创作等需要多样性的任务 |
现代 LLM 推理几乎都用 sampling(配合 temperature + top-p),beam search 主要用在翻译等精确任务。
Q: 搜索准确性不高如何排查?
系统性排查框架(按搜索管道逐步定位):
Query 理解:分词是否正确(新词/专有名词)?意图识别是否准确(导航 vs 信息 vs 交易意图)?query 改写/扩展是否合理?
召回阶段:倒排索引覆盖率如何?是否存在漏建索引?向量检索的 embedding 质量如何?是否有足够的多路召回策略(文本匹配+语义+实体)?
排序模型:特征覆盖是否完整(文本相关性+用户行为+时效性+权威性)?模型是否过时(在线数据分布漂移)?是否存在 position bias?
数据质量:索引文档是否完整和最新?是否有 spam/低质量页面污染?更新频率是否匹配需求?
评测标准:评估指标是否合理(NDCG/MAP/MRR)?标注标准是否一致?是否用了足够多样的 query 样本?
快速定位方法:挑选 bad case,手动检查每个环节的中间结果(召回列表->特征值->排序分数),找到第一个出问题的节点。
Q: 召回和排序哪个阶段最可能出问题?
取决于具体症状:
- 相关文档完全未出现在候选集中 -> 召回问题。可能原因:索引缺失、query-document 语义 gap 大、向量检索 recall 不足。
- 相关文档在候选集中但排名靠后 -> 排序问题。可能原因:排序特征不足、模型能力弱、正负样本不均。
核心原则:召回决定天花板,排序决定实际效果。
- 召回阶段丢失的文档无论排序多好都救不回来
- 但排序阶段如果模型能力强,即使召回噪声多也能将好结果排在前面
实践经验:大部分系统改善来自召回优化(增加多路召回提升 recall)+ 精排优化(用更强的 cross-encoder)。粗排通常是简单模型快速过滤,影响相对小。
Q: BERT和GPT的预训练方式区别?
| 对比 | BERT | GPT |
|---|---|---|
| 架构 | Encoder-only(双向) | Decoder-only(单向) |
| 预训练任务 | MLM(Masked Language Model,随机 mask 15% token 预测) + NSP | CLM(Causal Language Model,从左到右预测下一个 token) |
| 上下文 | 看到完整上下文(双向 attention) | 只看左侧上下文(causal mask) |
| 训练效率 | 每步只有 15% token 有 loss 信号 | 每个 token 都有 loss 信号(更高效) |
| 适用任务 | 理解类(分类/NER/相似度) | 生成类(续写/对话/推理) |
| 推理方式 | 一次性编码整个输入 | 自回归逐 token 生成 |
为什么 GPT 范式胜出:(1) CLM 训练信号密度高(100% vs 15%)更适合大规模预训练;(2) 自回归天然支持生成(统一了理解和生成);(3) In-context Learning 只在自回归模型中自然涌现。
Q: 生成式搜索能否保证top-1准确性?如何提高?
不能绝对保证。生成式搜索(如 DSI/GENRE)让模型直接生成文档 ID 或标题,本质上受制于 LLM 的幻觉问题——模型可能生成不存在的文档或混淆相似文档。
提高准确性的方法:
- 约束解码(Constrained Decoding):限制每步只能生成索引库中存在的有效前缀(Trie 约束),从根本上避免生成非法 ID。
- 检索+验证:生成答案后回查知识库,确认答案有据可依。若找不到支撑文档则标记为不确定。
- 置信度估计:计算生成概率或 entropy,低置信度时 fallback 到传统检索排序管道。
- Fine-tune + 数据增强:用高质量 query-document 对微调模型,增加训练数据多样性和覆盖度。
- 混合架构:生成式检索作为召回通道之一,与传统向量/关键词检索合并后精排。
Q: Agent服务高可用和稳健性如何保证?
LLM Agent 系统相比传统服务有更多不确定性(LLM 输出不确定、工具调用可能失败、链路长),需要多层次保障:
重试机制:LLM API 调用失败(超时/限流/500错误)自动重试,指数退避(1s/2s/4s),最大重试 3 次。不同错误码区分处理(限流等待 vs 服务错误切换 provider)。
超时控制:每个环节设置独立超时——LLM 调用 30s、工具执行 10s、总链路 120s。超时后优雅降级而非无限等待。
降级策略:复杂 Agent(多步推理+工具调用)失败时 fallback 到简单流程(直接 LLM 回答/模板回答)。保证用户总能得到响应。
状态检查点:长链路 Agent(如 10 步以上的任务)保存中间状态到持久化存储。任何步骤失败后可从最近检查点恢复,无需从头重来。
监控告警:实时监控关键指标(成功率/P99 延迟/Token 用量/工具调用失败率),异常自动告警。建立 SLO(如 >99% 请求在 60s 内返回)。
多副本 + 负载均衡:Agent 服务无状态设计,水平扩展 + 健康检查 + 自动摘除故障实例。
Q: 生成式排序了解吗?
将排序问题建模为生成任务,利用 LLM 的强大语义理解能力做相关性判断。
代表工作:
- RankGPT:输入 query + N 个候选文档,让 LLM 通过 sliding window 方式输出排序后的文档 ID 列表。窗口大小如 20,逐步 bubble-sort 式精排。
- Listwise Ranking:一次性输入全部候选,LLM 输出排序结果。
- Pairwise Ranking:对每对文档判断谁更相关,统计胜负得出排序。
优点:利用 LLM 的zero-shot 语义理解,无需领域标注数据即可有强排序能力。在 BEIR 等 out-of-domain 评测中表现优异。
缺点:推理成本极高(每个 query 需要多次 LLM 调用),延迟不适合在线服务。通常作为离线评测或蒸馏教师使用。
Q: 如何构造排序模型训练数据?如何解决正负样本不均?
训练数据构造方法:
- 点击行为数据:用户点击为正样本,曝光未点击为负样本。注意 position bias(高位自然点击多)需要去偏。
- 人工标注:多级相关性评分(如 0-4 级:无关/稍相关/相关/很相关/完美匹配)。成本高但质量好。
- LLM 标注:用 GPT-4 等强模型评估 query-doc 相关性,作为弱标签。成本适中。
- 对比学习:从用户行为构造正负对(点击 vs 未点击、停留时间长 vs 短)。
正负样本不均解决方案:
负采样(Negative Sampling):从全量负样本中采样子集。策略:随机采样(简单)、困难负采样(选与 query 语义相似但不相关的文档,训练效果更好)。
Pairwise 训练:构造 (query, pos_doc, neg_doc) 三元组,用 margin ranking loss 训练。不依赖绝对标签,天然处理不均衡。
Listwise 训练:以整个排序列表为单位训练(如 LambdaRank),直接优化 NDCG 等排序指标。
Focal Loss:降低易分类样本的 loss 权重,让模型聚焦于难样本。相当于自动调节正负样本权重。
过采样/欠采样:过采样正样本或欠采样负样本使比例接近。简单但可能损失信息或引入过拟合。