百度 FactorEngram 把 n-gram 记忆拆成共享基向量,硬检索 NIAH-3 比 Engram 高 43 点

FactorEngram: Factorized N-gram Memory with Basis-Level Gating for Language Models

Bowen Yang, Jingbo Zhou, Qinghong Miao, Hua Wu

cs.CL, cs.AI

2026-09-29

百度提出 FactorEngram,把 n-gram 记忆拆成共享字典上的稀疏系数,并用隐藏状态对每个基向量单独门控。340M 上 NIAH-3 从 Engram 的 15.0 升到 58.3,WikiText PPL 从 23.19 降到 21.29。

这篇在解决什么

标准 Transformer 遇到「埃菲尔铁塔」「珠穆朗玛峰」这类反复出现、语义相对固定的短语,只能一层层算出来。Lookup-based memory 走另一条路:把 n-gram 哈希进一张可学习表,直接查出表征,当辅助分支加进 backbone。Engram 是这条线里被 DeepSeek-V4.1Flash 用过的代表实现。

但 Engram 把每条查出的向量当成一整块:一个哈希槽、一个标量门。多义词没办法按上下文只放出相关分量,「the bank」在金融和河岸两种语境下只能整段放大或整段压掉。参数共享也只发生在哈希碰撞上,语义相近的 n-gram 反而没有共享通道。两件事的根因一样:记忆的最小单位是整条 n-gram 向量。

方法

百度与南洋理工提出 FactorEngram。每条局部模式不再存一个稠密向量,改成存一组系数,去乘同一层共享的字典基向量。以前每个短语独占一格抽屉,现在共用一套积木。系数表按模式寻址,unigram 直接索引,2-gram 和 3-gram 走哈希,每种长度多个 lookup head,查出后按固定顺序拼接。字典在同一层内被所有模式共用。训练时对拼接后的系数加 L1 惩罚,逼每条模式只用少数几个基。

门控和重建共用这本字典。当前 hidden state 经线性投影和 RMSNorm 变成 query,跟每个基向量做点积,再过 sigmoid,得到 0 到 1 的逐基门,去乘对应系数。上下文因此可以单独缩放每个记忆分量。门控后的系数与字典做线性组合,投影回 backbone 宽度,再过一个短的 depthwise causal convolution(带残差,只用到当前及过去位置),加回残差流。Attention 和 FFN 保持原样。

默认插在中层、attention 之前。340M 是 24 层 backbone,插第 10 和 12 层。训练目标是 next-token 负对数似然加上 λ 乘 L1,默认 λ=1e-3。系数表、字典、投影和卷积跟 backbone 一起从零训。

结果

340M 用 30B FineWeb-Edu token,1B 用 120B,上下文 8K。340M 配 1B 查找表参数,2-gram 和 3-gram 表各 25 万槽;1B 配 2B 查找表,2-gram 25 万槽、3-gram 75 万槽。对照是同规模纯 Transformer,以及他们复现的 Engram。下游均准覆盖 PIQA、HellaSwag、WinoGrande、ARC-Easy/Challenge、Social IQA、BoolQ。NIAH-1/2/3 是 8K Needle-in-a-Haystack 的三档递增难度。

设置WikiText↓LAMBADA↓下游均准↑NIAH-1NIAH-2NIAH-3
340M Transformer23.1924.9048.1044.247.722.1
340M Engram22.2923.9449.0669.837.615.0
340M FactorEngram21.2921.6949.8270.679.158.3
1B Transformer15.5711.7355.6147.572.825.7
1B Engram15.6011.8355.8145.875.216.6
1B FactorEngram15.5711.3955.8072.084.544.2

340M 上 WikiText 从 Transformer 的 23.19 降到 21.29,LAMBADA 从 24.90 降到 21.69,下游均准从 48.10 升到 49.82。硬检索拉开最大:NIAH-2、NIAH-3 比 Engram 分别高 41.5 和 43.3 点。Engram 在这两档上甚至低于纯 Transformer(37.6 vs 47.7,15.0 vs 22.1)。

1B 上 WikiText 与 Transformer 持平,都是 15.57;下游均准 55.80,比 Engram 的 55.81 低 0.01。检索增益还在:相对 Engram,NIAH-1 从 45.8 到 72.0,NIAH-2 从 75.2 到 84.5,NIAH-3 从 16.6 到 44.2,大约 9.3 到 27.6 点。

消融全在 340M。把逐基门换成标量门(先重建再整段缩放,门的形式对齐 Engram),NIAH-3 从 58.3 掉到 9.4,下游均准从 49.82 掉到 48.15,LAMBADA 甚至差过 Transformer。去掉 unigram,NIAH-2/3 掉到 44.2 和 23.0。给 Engram 补上 unigram,三档 NIAH 都升,但困惑度和均准略差。λ 从 0 调到 1e-3,多数指标变好;1e-4 的 WikiText 最低(21.18),1e-2 全面变差,WikiText 23.89,已经差过无正则。

插层扫描:单层往中层走更好,第 12 层是单层最优;再加一层,10 加 12 的 NIAH-3 最高,成为默认。层内位置:attention 前在准确率和 LAMBADA 上最好;FFN 前 WikiText 几乎一样(21.28 vs 21.29),NIAH-3 只有 18.8;塞进 SwiGLU 的 up-projection,WikiText 23.34,NIAH-3 12.2,各项都最差。

为什么重要

这是对 Engram 路线的一次表示层改造。已经在用 n-gram lookup 的人(DeepSeek-V4.1Flash 用过 Engram)值得看两处改动:语义相近的模式可以通过共享基共用参数;门控从整段开关变成按分量开关。收益主要落在长上下文检索。语言建模和下游是小幅改进,到 1B 几乎抹平。

能直接抄的工程结论也具体:覆盖 unigram 到 trigram;插中层、attention 之前;L1 取 1e-3 量级,过强会把表训废。代价是额外 1B 到 2B 查找表参数。论文没有报延迟、带宽或显存。对 1B 以上、以及生产级规模,这篇还没有证据。

局限与存疑

作者自己写了:只测了 340M 和 1B。1B 仍可用于端侧,但大尺度收益是否还在,留给后续。结合主表,1B 上语言建模和下游已经不再领先 Engram,检索是目前唯一站得住的卖点。

Engram 在 NIAH-2/3 上弱于 Transformer,复现是否公平、哈希碰撞是否伤了检索,没有单独诊断。NIAH 停在 8K,没有更长上下文;PIQA、HellaSwag 等单条分数只进了平均,没有拆开。字典基有没有学出可解释的语义分量,只有 L1 和任务指标,没有 SAE 式的特征分析。TN-gram 同样做了分解但保留标量门,related work 点了名,主实验没有直接比。查找表比 backbone 还大,没有把同等参数加进 FFN 或 MoE 的对照。

术语

原文与代码

社区讨论

相关论文

全部论文解读