题目重点:从因果hidden states选pooling,处理padding/EOS,设计对比训练与检索评估。
题意与假设
这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。
- 目标为独立编码query/document用于ANN检索,embedding维度固定;分类、cross-encoder打分是不同输出合同。
- 使用token hidden states,不把词表logits直接当语义embedding。因果mask和模型位置/tokenizer政策保持一致。
解题路线
- 取得某层hidden[B,T,d]与valid mask。last valid token含整个有效前缀上下文,可作简单起点;右padding不能固定取最后数组位置。EOS需模型训练与tokenizer实际支持,不临时加一个随机新token指望好效果。
- 平均pool仅对valid tokens。因果模型早期token只看到早期前缀,所以均值和末token语义不同;可比较位置加权pool,但权重是设计选择,需要评估而非证明总优。
- L2 normalize后余弦/内积检索是常见合同。若向量接近0需定义处理;均值向量长度受文本长度影响,不规范化直接点积可能排序偏向长度/范数。
- next-token预训练目标不保证句子相似度几何适合检索。用(query,positive,negative)对比目标适配表示,避免假负样本,把近重复同意图文档误惩罚;temperature、负样本难度和pooling需一起评估。
- 语义检索离线可按查询评Recall@k/MRR/nDCG,并分长短、多语言与新领域;按用户/时间/文档近重复划分,防训练检索库泄漏。在线看有用答案和检索延迟,不能只报embedding余弦更大。
- 生成式decoder是否经济要按prefill/批量吞吐评估;大模型embedding可离线批算doc,但query时仍有延迟。量化/降维/ANN提高效率同时测召回损失,embedding版本更新必须重建或区分索引空间。
手动走一遍
右padding序列[订单,已,取消,PAD,PAD],最后有效位置2而非数组位置4;pool前mask掉PAD。长文档截断可能丢末尾证据,须分chunk编码并用doc级聚合,不能单向量宣称覆盖未输入内容。
规模与取舍
每段编码继承decoder prefill成本,dense约O(LT²d+LTd²)。N文档存储O(Nd),原始float32约4Nd字节;ANN结构/副本另计。相似度全扫O(Nd),ANN需说明召回与索引取舍。
易错点与追问
容易失分的边界
- 取padding hidden。
- 词表logits当句向量。
- 未训练表示却保证语义余弦。
- 向量模型换版但复用旧doc索引。
继续深挖
- last valid与mean怎样做公平消融?
- query/doc可否使用不同instruction或pooling?
- 长文档chunk跨段信息怎样保留?
- 负样本中有多个正确文档如何改目标?
技术参考
- SGPT(原论文):decoder检索表示方法参考;本文pooling/部署选择需按任务消融。
