直接截断的效果
若模型没有针对前缀训练,删掉尾部维度可能丢掉关键方向。能不能用要按自己的检索集测,并同时记录索引成本。
v[:k]
DEEP 01 / REPRESENTATION GEOMETRY
这一页把 token embedding、上下文隐藏状态、pooling、normalize 和最终检索接口拆开。 沿着这些步骤,可以看清一个句向量如何形成,以及哪些操作会改变它。
切换聚合规则。二维图只用来展示方向;真实模型里的 [T,d] 是在 d 个坐标上一起聚合。
POOLING RULE
H [T, d]
输出v [d]
再一步v / ||v||₂
TOKEN AVERAGING
每个位置等权。稳定、常见,也容易把虚词、标点和无关 token 一起平均进去;对短句与长句的方差也不同。
训练目标应作用于最终使用的 pooled 向量。
从 token 状态到句向量:BERT 的 last_hidden_state 包含逐位置状态,公开 API 的 embedding 通常还经过 pooling、投影和归一化。若只拿最后一层状态随手平均,任务效果取决于模型后续是否在这个接口上训练过。
各向异性会让向量挤在相似的锥形区域。切换原始表示与去均值表示,看同一对向量怎样变化。
原始向量共享一个很强的公共方向,即使内容不同,cosine 也可能很高。判断细粒度语义时,还需结合训练目标和任务评估。
用一个八维教学向量比较完整向量与前缀向量。普通 embedding 截断后的效果需要单独评估。
ACTIVE DIMENSIONS
当前使用前 4 维。下标较小的维度在玩具数据里信息更密集,但真实模型不保证这个性质。
Matryoshka Representation Learning 会在多个前缀长度上共同优化,让前 64、128、256 维都成为可用的重要子表示。
若模型没有针对前缀训练,删掉尾部维度可能丢掉关键方向。能不能用要按自己的检索集测,并同时记录索引成本。
v[:k]
训练时联合优化多个前缀维度的目标,使较短前缀也承担任务。前缀是否保留足够信息、完整维度是否受影响,都要用各维度的任务结果验证;不保证每一维按可解释的重要性排序。
Σk∈K L(v[:k])
低维前缀可以降低索引内存与距离计算成本;高维向量或 cross-encoder 再精排。收益和损失都要实测。
128D recall → full rerank
训练时的 prompt、query/doc 角色、最大长度和 normalize 都属于模型接口,应在部署时保持一致。
“两句话是否相似”通常两边同分布;“query 能否检索到 passage”则一边短、一边长,可显式训练非对称编码与指令前缀。
一些检索模型训练时要求给 query 加任务提示。漏掉 prefix 可能在原训练分布外,是否需要 prefix,以模型卡和复现实验为准。
编码器只能看到某个 token 上限。超长文档需要分块或显式处理截断;标题、小节名和正文是否一起编码也要按答案单元决定。
训练与索引应使用匹配的度量。非零向量重复做 L2 归一化在精确数学上不改变方向;需要检查的是漏归一化、先截断后未重新归一化、或误把去均值/标准化当作 normalize。零向量要另行处理。
排障时把表示生成和检索系统拆开,优先找“哪一段的假设不一致”。
| 现象 | 先检查 | 常见修复 | 单独做仍不足的调整 |
|---|---|---|---|
| 所有 cosine 都很高 | normalize、公共均值、是否拿错层 | 按模型要求归一化;评估去均值/whitening;检查输出层 | 仅凭高余弦认定度量失效 |
| 相关块排不进 Top-k | chunk 边界、query/doc 角色、难负样本 | 改为语义单元分块;加标题;按任务做对比后训练 | 只提高 embedding 维度 |
| 短 query 噪音大 | prefix、池化、是否使用 query encoder | 按模型卡加 instruction;测试对称/非对称编码器 | 直接平均词向量 |
| 换维度后排序大幅变化 | 是否用 MRL 训练、是否重新建索引 | 用匹配的维度和归一化方式重建全库索引 | 只改查询端而不重建文档 |
本页介绍 pooling、归一化与维度接口。去均值和截断图使用教学向量;相应操作在具体模型上的检索效果需实测。