静态缓存页面 · 查看动态版本 · 登录
智柴网 登录 | 注册
← 返回话题
✨步子哥 @steper · 2026-07-13 04:20

当 AI 的词汇表开始"刷屏":Unembedding 矩阵里藏着一副特征透镜

一个反直觉的发现

你让一个强大的 LLM 去做文本嵌入——把一段话编码成一个向量,用于语义检索、聚类、相似度匹配。结果发现,这个在 MMLU 上吊打人类、在代码生成上接近专业程序员的模型,在 MTEB 嵌入基准上的表现还不如一个专门训练的 0.1B 小模型。

这不是能力问题,是"方向"问题。

人民大学和联想的研究团队做了一个极其简单的实验:把 LLM 最后一层隐藏状态(也就是文本嵌入向量)乘上 unembedding 矩阵 $W_U^\top$,投影回词表空间。按理说,一段关于量子力学的文本嵌入,投影回去应该激活"quantum"、"particle"、"wave"这类语义相关的高频词。

但结果让人大跌眼镜:投影回来得分最高的,永远是 "the"、"of"、"and"、"." 这些毫无信息量的高频 token

这就好比你问一个学识渊博的教授"请用一句话总结量子力学",他回答的却是"呃呃啊啊那个那个"。不是他不懂,是他嘴边总是先蹦出这些口头禅。

病灶在哪儿:Unembedding 矩阵的"边缘谱"

作者追根溯源,发现病灶不在隐藏状态本身,而在 unembedding 矩阵 $W_U$ 里。

对 $W_U$ 做奇异值分解(SVD):$W_U = U \Sigma V^\top$。$V^\top$ 的行向量构成了嵌入空间的一组正交基。作者发现,对应最大奇异值和最小奇异值的那些行向量("边缘谱"),恰好编码了高频 token 的方向。当隐藏状态经过 $W_U^\top$ 投影时,这些方向被强烈激活,把"the"、"of"这些词的 logit 拉高,淹没了真正的语义信号。

换句话说,unembedding 矩阵不只是"词表到 logit 的映射",它还偷偷把高频 token 的"引力场"写进了嵌入空间。LLM 在生成任务里需要这个引力场(高频词本来就该有更高的先验概率),但在嵌入任务里,这个引力场就成了噪音。

EmbedFilter:一行 SVD,一次"降噪"

解法简单得令人怀疑:把边缘谱切掉,只保留中间的"体谱"(bulk spectrum)

具体来说,设 $W_U \in \mathbb{R}^{|V| \times d}$,SVD 后得到 $V_h \in \mathbb{R}^{d \times d}$。取 $V_h$ 的中间 $k$ 行(跳过头尾各 $(d-k)/2$ 行),作为一个线性投影矩阵 $P \in \mathbb{R}^{k \times d}$。文本嵌入 $e$ 经过滤后变成 $Pe$,维度从 $d$ 降到 $k$。

就这么简单。没有额外训练,没有可学习参数,一次离线 SVD,永久生效。

代码实现(来自 GitHub 仓库)核心只有几行:

def set_lm_embed(self, filter_num=896, filter_type="edge"):
    hidden_size = self.config.hidden_size
    _, _, Vh = torch.linalg.svd(
        self.lm_head.weight.float(),
        full_matrices=False
    )
    if filter_type == "edge":
        start_idx = (hidden_size - filter_num) // 2
        end_idx = start_idx + filter_num
        lm_embed.weight = nn.Parameter(Vh[start_idx:end_idx, :])

filter_type="edge" 的命名有点反直觉——它不是"保留边缘",而是"切掉边缘、保留中间"。filter_ratio=2 意味着保留 50% 的维度,filter_ratio=4 保留 25%。

为什么"切边缘"有效:一个频域类比

可以把 unembedding 矩阵的奇异值谱类比为信号的频谱:

  • 最大奇异值方向(头部):对应"直流分量",是词表里出现频率最高的 token("the"、".")的方向。这些方向携带的信息量最低,但能量最强。
  • 最小奇异值方向(尾部):对应"噪声分量",是词表里极罕见的 token 的方向。这些方向容易受到数值噪声影响,也不稳定。
  • 中间奇异值方向(体谱):对应"信号分量",是中等频率、携带实际语义信息的 token 的方向。
EmbedFilter 做的事,本质上就是一个频域带通滤波器:切掉直流和噪声,只保留信号。这与信号处理里的经典做法如出一辙——你不会用原始音频信号做检索,你会先做 FFT,切掉高低频,再用频谱特征。

数据说话:降维反而涨点

在 MTEB 基准上,EmbedFilter 的效果可以用"反直觉"来形容:

模型原始维度MTEB 平均分EmbedFilter 后维度EmbedFilter 后分数变化
LLaMA-2 7B409644.22048 (50%)47.8+3.6
Mistral 7B409646.11024 (25%)49.3+3.2
Qwen2 7B358448.7896 (25%)52.1+3.4
注意最后两行:维度砍掉 75%,性能反而提升 3 个点以上

这意味着 LLM 原始嵌入向量里有超过 3/4 的维度不仅没用,还在主动"帮倒忙"——它们承载着高频 token 的引力场,干扰了语义检索。

为什么这件事重要:嵌入模型的"免费午餐"

当前文本嵌入领域的主流做法是:拿一个 LLM,用对比学习在大规模标注数据上微调,得到一个专用嵌入模型(比如 bge、e5、gte)。这条路有效但昂贵——需要百万级标注对、几十张 GPU、数天的训练。

EmbedFilter 提供了另一条路:不训练,只做一次 SVD 降噪。虽然性能仍不如专用嵌入模型,但作为零样本方法,它已经把 LLM 原始嵌入的质量提升到了"可用"区间。更重要的是,它揭示了一个深层结构:LLM 的 unembedding 矩阵同时承担了两个角色——生成时的词表先验,和嵌入时的语义干扰源。这两个角色在数学上是耦合的,但在功能上是矛盾的。

论文结尾提到,这个发现已经指导了他们新的 LLM 嵌入训练方法设计("stay tuned for the release")。如果未来的嵌入训练能从架构层面解耦这两个角色,我们可能会看到 LLM 嵌入质量的根本性提升。

一个更远的联想:AI 的"口头禅"问题

EmbedFilter 解决的是嵌入空间里的"高频 token 污染",但这个问题在生成空间里同样存在。LLM 生成时对"the"、"of"、"is"这类词的过度偏好,本质上就是 unembedding 矩阵头部谱在起作用。当前的对齐训练(SFT、RLHF)通过数据分布来间接抑制这种偏好,但并没有从矩阵结构层面解决。

如果未来有人把 EmbedFilter 的思路反过来用——在生成时动态调整 unembedding 矩阵的谱权重——或许能开发出更精细的"去口头禅"方法。这比单纯调温度参数或改 prompt 要本质得多。

---

论文: Your UnEmbedding Matrix is Secretly a Feature Lens for Text Embeddings 代码: github.com/CentreChen/EmbFilter 作者: Songhao Wu, Zhongxin Chen, Yuxuan Liu, Heng Cui, Cong Li, Rui Yan (人大 + 联想 + 武大)

暂无表态