你担心的问题很关键,直觉也很有道理:如果“句式容器”里要装有具体的“单元词语”,那是不是得把可能出现在这个句式里的所有词都装进去?如果是,那词汇量一大就崩溃了。这确实是早期基于符号规则匹配的思路会遇到的窘境。

但在我们讨论的 QKV 可学习容器架构下,并不会形成需要穷举词语的问题。原因在于,这里的“单元词语”并不是一个显式枚举的词典,而是连续空间中的原型向量


1. 容器里的“词语单元”不是离散词条,而是可学习的原型

在设计中,每个句式容器内可以有一组词级 Key 向量(例如 ki,1,ki,2,...,ki,Mki,1​,ki,2​,...,ki,M​),数量 M 是固定的超参数(比如 32、64)。
这些向量不是在存储具体词语(如“把”“被”“了”),而是在高维空间中学习成为语法功能的吸引子

训练时:

  • 一个容器负责捕捉“被动含义”,它的这些词级 Key 会在梯度驱动下,逐渐靠近那些频繁出现在被动语境中的词的嵌入(“被”“给”“受”等)所在的区域。

  • 但它不是只记住“被”这个词,而是记住了一种分布模式:“被”字的嵌入靠近它,“给”字的嵌入也靠近它,甚至模型从未见过的某个网络新词“被XX”,只要上下文让它扮演被动标记,其嵌入就会落在这个原型附近,从而激活该容器。

这本质上是聚类中心,而不是词汇列表。它把千万个词语压缩成了少量的、可泛化的原型。


2. 嵌入空间的连续性天然避免穷举

现代语言模型用分布式表示,词与词之间的相似性可以通过余弦距离衡量。
句式容器里的词级 Key 就是在和这些连续向量做点积匹配。
效果是:

  • 哪怕训练时没见过“被忽悠”,只见过“被欺骗”和“被蒙蔽”,但“忽悠”的嵌入和“欺骗”“蒙蔽”很接近,那么它依然会与被动容器的词级 Key 产生较高相似度。

  • 不需要在容器里显式地存“被忽悠”这个组合,而是靠向量空间的泛化能力自然覆盖。

这种机制就像你记住“水果”原型的特征,而不需要穷举世界上所有水果的名字。


3. 容器匹配的是“语法角色”,不是词汇本身

再往深一层说,句式容器根本不必直接匹配具体词语,而是可以通过针对句法上下文的编码来运作。
我们可以让容器的词级 Key 去吃的是每个词的上下文表示(已融合了该词前后信息),而不是静态词嵌入。这时:

  • 同一个词在不同句式中会有不同的上下文表示,会被不同容器匹配。例如“鱼”在主动句“猫吃鱼”中是宾语,在被动句“鱼被猫吃”中是主语,它的上下文表示不同,会分别匹配到主动容器的宾语槽原型,或被动容器的主语槽原型。

  • 容器完全不需要储存“鱼”这个词,它只储存“被动句中的主语词通常长什么样”的模式原型。

这就是典型的基于角色的匹配,从而彻底脱离具体词汇的穷举。


4. 只有在一种情况下才会趋向穷举

如果你的设计非要让每个容器明确列出一批固定的词(比如显式特征向量,“把”= [0,0,1,0...]),并且只接受完全相等的匹配,那确实会陷入穷举和未登录词困境。
但这正是我们避免的做法,也是 QKV 软匹配完全超越传统模板匹配的地方。


总结

  • 不会穷举词语。 容器里存的是少量的、可训练的连续原型向量,它们是语法功能的抽象聚类中心。

  • 数量可控: M 个原型就能覆盖几乎无限多的具体词汇,因为它们学会了“模式”而非“列表”。

  • 泛化来源: 嵌入空间的语义平滑性 + 上下文敏感的原型匹配。

这样,你既有显式可解释的“句式容器”结构,又不必担心词典爆炸的问题,这正是神经符号融合思路的优势所在。

更多推荐