跳转至

GS-Quant: Granular Semantic and Generative Structural Quantization for Knowledge Graph Completion

会议: ACL 2026
arXiv: 2604.21649
代码: https://github.com/mikumifa/GS-Quant (有)
领域: 图学习 / 知识图谱补全 / 量化
关键词: KGC、RQ-VAE、hierarchical clustering、codebook、LLM vocabulary 扩展

一句话总结

GS-Quant 把 KG 实体量化成"由粗到细"的离散 code 序列——用层次聚类树约束 RQ-VAE 让浅层 code 编码全局类别(如 "Person")、深层 code 编码细粒度属性(如 "Artist"),再用 GPT-style decoder 重构 entity + ancestor 强制 code 之间产生因果依赖,最后把这些 code 加到 LLM 词表里做 LoRA 微调,在 WN18RR / FB15k-237 上 Hits@1 比 SOTA SSQR 高 2.2-2.4 个点。

研究背景与动机

领域现状:知识图谱补全 (KGC) 把 LLM 引入后分两派——(1) text-based 把 triple 线性化成自然语言 prompt (KICGPT, DIFT, KG-FIT, MKGL),可读但 token 爆炸且打散图拓扑;(2) embedding-based 把 KG embedding 注入 LLM latent space (TransE/RotatE + adapter),高效但连续 embedding 和离散 token 模态不匹配

现有痛点:(1) text 方法平均一个 triple 几百 token,FB15k-237 上推不动;(2) embedding 方法把 holistic dense 向量塞进 LLM,但 LLM 实际上是序列 next-token 模型,单点 embedding 用不上 autoregressive 强项;(3) 最新 quantization 方法 (SSQR, ReaLM) 把 entity 编成 code 序列接近这个目标,但code 是 flat 数值压缩——把 entity embedding 投影成 4 个 code,相邻 code 之间没有语义层级关系,更像哈希签名而非"语言"。

核心矛盾:人类推理和 LLM 生成都遵循 coarse-to-fine 的层次结构(先分类后细化),而现有 quantization 把所有 code 都拍平用 Euclidean 最近邻找,code 间无层级、无因果——LLM 看到一串 code 也不知道哪个是"类别"哪个是"实例"。

本文目标:(1) 让 quantization 出来的 code 序列在语义上分层——浅层 code 编码 coarse-grained 类别、深层 code 编码 fine-grained 属性;(2) 让 code 之间有生成式因果依赖而非彼此独立;(3) 把这种"结构化 code"塞进 LLM 词表后做 KGC,验证比 flat code 更有效。

切入角度:基于 RQ-VAE(Residual Quantization 天然就有数值递归层级 \(\mathbf{r}_{l+1} = \mathbf{r}_l - \mathbf{v}_{c_l}^l\)),但作者认为光数值层级不够,必须显式注入语义层级。具体做法是先用 agglomerative clustering 在 entity embedding 上建一棵 hierarchy tree \(\mathcal{H}\),再让 RQ 的每一层对齐到这棵树的对应层。

核心 ideaGranular Semantic Enhancement (GSE) 把层次聚类树注入 codebook 学习;Generative Structural Reconstruction (GSR) 用 GPT-style decoder 重构 entity + ancestor 加上因果依赖;两者+RQ commitment loss 联合训练。

方法详解

整体框架

GS-Quant 的目标是把每个 KG 实体压成一串"像语言一样有层级、有因果"的离散 code,再喂给 LLM 做链接预测。流水线先把 RotatE 的关系 embedding 与 PLM 的文本 embedding 加权融合成实体表示 \(\mathbf{s}_x = \rho \mathbf{s}_x^{\mathcal{G}} + (1-\rho) \mathbf{s}_x^T\),在这些表示上离线做 agglomerative clustering 建一棵层次树 \(\mathcal{H}\) 作为语义骨架;随后把 \(\mathbf{s}\) 经 MLP 投影成 \(\mathbf{r}_0 = \mathbf{z}\),沿 \(m\) 层 codebook 做 Residual Quantization(每层选 \(c_l = \arg\min_k \|\mathbf{r}_l - \mathbf{v}_k^l\|_2\)、残差递归 \(\mathbf{r}_{l+1} = \mathbf{r}_l - \mathbf{v}_{c_l}^l\))得到 code 元组 \(\mathcal{I} = \{c_i\}_{i=0}^{m-1}\),并用 GSE / GSR 两个约束把树的层级语义和因果依赖注入这些 code。最终把整套 codebook 的 code 当作新词注入 LLM 词表,冻结主干、只训 code embedding 与 LoRA,让 LLM 在 KGC 候选列表里选出正确的头/尾实体。

%%{init: {'flowchart': {'rankSpacing': 24, 'nodeSpacing': 28, 'padding': 6, 'wrappingWidth': 400}}}%%
flowchart TD
    A["实体表示融合<br/>RotatE 关系 emb + PLM 文本 emb 加权"] --> B["层次聚类树 H<br/>agglomerative clustering 建语义骨架"]
    B --> C["RQ 残差量化<br/>MLP 投影 + m 层逐层选 code → code 元组"]
    C --> D["GSE 粒度语义增强<br/>把聚类树拧进每层 codebook(浅层粗类 / 深层细属性)"]
    C --> E["GSR 生成式结构重构<br/>GPT decoder 加因果依赖 + 重构实体与各级祖先"]
    D --> F["选 checkpoint + 词表扩展 + LoRA<br/>codebook entropy 选模型,code 注入 LLM 词表"]
    E --> F
    F --> G["LLM 链接预测<br/>在候选实体里选正确头/尾"]

关键设计

1. Granular Semantic Enhancement(GSE):把聚类树拧进 codebook 的每一层

vanilla RQ-VAE 的"层级"只是残差递归的数值层级,没有语义含义,同一层 codebook 里"Person"这种粗类和"Artist"这种细属性混作一团(图 4b)。GSE 把离线建好的层次树 \(\mathcal{H}\) 当作监督信号,强制 RQ 第 \(i\) 层的 code 对齐到树第 \(i\) 层的聚类中心 \(\boldsymbol{\mu}_e\)——浅层学 coarse 类别、深层学 fine 细节。由于 code 选择是离散的不可导,先构造直通 surrogate \(\tilde{\mathbf{v}}_i = \mathbf{r}_i + \operatorname{sg}[\mathbf{v}_{c_i}^i - \mathbf{r}_i]\) 让梯度穿过;再施加两条方向相反的对比约束:Coarse-to-Fine Alignment \(\mathcal{L}_1\)\(\tilde{\mathbf{v}}_i\) 拉向自身在 \(i\) 层的中心 \(\boldsymbol{\mu}_e\),权重取指数衰减的 \(\lambda_1^{i+1}/m\)\(\lambda_1\in(0,1)\))让浅层权重更大、优先凝聚同类;Hierarchical Separability \(\mathcal{L}_2\)\(\tilde{\mathbf{v}}_i\) 推离树上邻居中心 \(\mathbf{n}\in\mathcal{N}_e\),权重反向衰减为 \(\lambda_2^{m-i}/m\) 让深层权重更大、优先分离细类。两个方向一起约束后,codebook 可视化(图 4a)出现浅层 code 稀疏均匀、深层 code 密集判别的结构,正好对上语言"先分类后细化"的直觉。

2. Generative Structural Reconstruction(GSR):用 GPT decoder 给 code 之间加因果依赖

光有层级还不够——若 \(m\) 个 code 彼此独立,LLM 看到一串 code 也分不清谁该 condition 在谁之上。GSR 把 code 元组重构成"一句有序的语义句子":构造可学 query 序列 \(\mathcal{Q}=\{\mathbf{q}_i\}_{i=0}^L\),与 \(\tilde{\mathbf{v}}\) 拼接后喂进一个带 causal self-attention 的 Transformer decoder,强迫第 \(l\) 个 code 只能依赖 \(<l\) 的 code,形成"先粗后细"的自回归依赖,与 LLM 的生成动力学同构。decoder 的输出被分派到不同重构目标:\(\mathbf{o}_0\) 重构实体自身 \(\mathbf{s}\)\(\{\mathbf{o}_i\}_{i\ge 1}\) 重构该实体在 \(\mathcal{H}\) 上的各级祖先 \(\{\mathbf{h}_i\}\),损失为 \(\mathcal{L}_{\text{GSR}} = \|\tilde{\mathbf{o}}_0 - \mathbf{s}\|_2^2 + \lambda_s \|\tilde{\mathbf{o}}_1 - \mathbf{h}_0\|_2^2 + \lambda_h \sum_{i=2}^L \|\tilde{\mathbf{o}}_i - \mathbf{h}_{i-1}\|_2^2\),其中 \(\lambda_s \ll \lambda_h\)(因为 \(\mathbf{h}_0\) 已被 GSE 约束,不必重复施压)。重构祖先而非只重构自己,强制 code 序列保留多粒度信息、避免"只编码实体本身"的退化;消融里去掉 GSR 后 WN18RR Hits@1 掉 0.8%、FB15k-237 掉 1.1%,印证因果依赖确实让 code 更"语言化"。

3. Codebook Entropy 选 checkpoint + 词表扩展 + LoRA:把 code 接进 LLM

RQ-VAE 训练常出现"几个 code 吃掉所有激活、其余 code 死亡"的 collapse,传统靠 random restart 或 EMA 缓解。作者改用 codebook entropy \(\mathcal{Y} = -\frac{1}{M}\sum_m \sum_k p_k^m \log p_k^m\) 作为模型选择信号——它在所有 code 等概率被激活(\(p_k^m = 1/K\))时取最大,等价于"最大化 codebook 表达力",表 3 实测 \(\mathcal{Y}\) 与下游 MRR / Hits@K 正相关,于是只看这个自监督指标就能挑 checkpoint,不必每个 epoch 都跑下游评估。选定 codebook 后,把 \(M\times K\) 个 code 全部当作新 token 注入 LLM 词表,冻结 LLM 主体、只训新 token embedding 与作用在 attention/FFN 上的 LoRA adapter,既学到 KG 知识又不破坏通用能力;推理时直接让 LLM 在候选实体里做选择,候选集与指令模板和 DIFT 完全对齐以保证公平。

损失函数 / 训练策略

  • 量化阶段\(\mathcal{L}_{\text{total}} = \mathcal{L}_Q + \mathcal{L}_{\text{GSE}} + \mathcal{L}_{\text{GSR}}\)\(\mathcal{L}_Q\) 为标准 commitment loss),按 codebook entropy \(\mathcal{Y}\) 选 checkpoint。
  • LLM 阶段:冻原 LLM 参数,只更新新 code token 的 embedding 与 LoRA adapter,目标是 candidate selection 的语言模型 loss。
  • 关键超参:\(\lambda_1 = 0.8\)\(\lambda_2 = 0.4\)\(\lambda_s\) 小而 \(\lambda_h\) 大、\(\rho\) 控制 graph/text 融合比例。
  • 开销:GSE / GSR 各只带来约 4%-18% 额外训练时间,相对 vanilla RQ-VAE 没有 prohibitive overhead。

实验关键数据

主实验

WN18RR + FB15k-237 上的 KGC 主结果(候选集和指令模板对齐 DIFT):

方法 WN18RR MRR WN18RR H@1 WN18RR H@3 WN18RR H@10 FB15k-237 MRR FB15k-237 H@1 FB15k-237 H@3 FB15k-237 H@10
TransE 0.243 0.043 0.441 0.532 0.279 0.198 0.376 0.441
RotatE 0.476 0.428 0.492 0.571 0.338 0.241 0.375 0.533
CompGCN 0.479 0.443 0.494 0.546 0.355 0.264 0.390 0.535
MEM-KGC 0.557 0.475 0.604 0.704 0.346 0.253 0.381 0.531
CoLE 0.593 0.538 0.616 0.701 0.389 0.294 0.429 0.572
KICGPT 0.564 0.478 0.612 0.677 0.412 0.327 0.448 0.581
DIFT (LLM-base 强 baseline) 0.617 0.569 0.638 0.708 0.439 0.364 0.468 0.586
MKGL 0.552 0.500 0.577 0.656 0.415 0.325 0.454 0.591
SSQR (前作 quantization) 0.603 0.553 0.627 0.692 0.428 0.349 0.459 0.583
GS-Quant (ours) 0.635 0.594 0.649 0.712 0.455 0.386 0.479 0.592

vs DIFT:WN18RR Hits@1 +2.5、FB15k-237 Hits@1 +2.2;vs SSQR:WN18RR Hits@1 +4.1、FB15k-237 Hits@1 +3.7。

消融实验

配置 FB15k-237 MRR FB15k-237 H@1 WN18RR MRR WN18RR H@1 说明
Ours (full) 0.455 0.386 0.635 0.594 基线
w/o \(\mathcal{L}_1\)(去 coarse-to-fine alignment) 0.450 (-0.5%) 0.377 (-0.9%) 0.629 (-0.5%) 0.587 (-0.6%) GSE 半挂
w/o \(\mathcal{L}_2\)(去 hierarchical separability) 0.450 (-0.5%) 0.379 (-0.7%) 0.625 (-0.9%) 0.577 (-1.6%) GSE 另半挂
w/o \(\mathcal{L}_{\text{GSR}}\) 0.448 (-0.7%) 0.375 (-1.1%) 0.627 (-0.7%) 0.585 (-0.8%) code 间无因果
w/o Code(无量化全靠 LLM+LoRA) 0.404 (-5.1%) 0.303 (-8.3%) 0.607 (-2.7%) 0.541 (-5.2%) 量化 token 是最大贡献

关键发现

  • Quantized code 是最大贡献:w/o Code 在 FB15k-237 Hits@1 跌 8.3 个点,证明把 KG 知识编成离散 token 注入 LLM 词表是核心 mechanism,比所有 loss 增益加起来还重要。
  • GSE 和 GSR 各贡献 ~1 个点:单独看每个损失都"只"涨 0.5-1.6 个点,但累加起来 + 与 Code token 协同后让 Hits@1 比 SSQR 高 ~4 个点,说明这是个"少量精修"问题,结构性 inductive bias 比大模型蛮力更关键。
  • 超参鲁棒\(\lambda_1 \in [0.6, 0.9]\) / \(\lambda_2 \in [0.2, 0.5]\) 内性能波动小,\(\lambda_s < \lambda_h\) 一致更优——验证了 \(\mathbf{h}_0\) 不应被重复约束的设计直觉。
  • Codebook entropy 是好的 model selection 信号\(\mathcal{Y}\) 与 downstream MRR / Hits@K 正相关,意味着只看自监督指标就能选最佳 checkpoint,不用每个 epoch 都跑下游评估。
  • Codebook 可视化验证 disentanglement:图 4a (ours) 浅层 code 节点稀疏均匀、深层 code 密集判别;图 4b (vanilla RQ-VAE) 三层混作一团——直观证明 GSE 真的让 code 学到了层级语义。
  • 效率友好:删除单个 loss 训练时间只省 4-18%,意味着整套方法相对 vanilla RQ-VAE 没有 prohibitive overhead。

亮点与洞察

  • "让 code 像语言一样有结构"是核心思想:把 KGC 的 quantization 从"压缩 embedding"重新定义为"为 LLM 造一种新的子语言",这一 framing 比单纯堆 loss 更深刻——它要求 code 序列在三个维度同时满足语言学性质:层级(粗→细)、因果(左→右)、组合(不同 code 组合编码不同语义)。
  • 聚类树作为可微 inductive bias:用 agglomerative clustering 离线生成 hierarchy tree,再用对比 loss 强制 RQ 对齐到树——把"无监督结构发现"和"端到端量化"解耦,避免了"两件事同时学"导致的训练不稳。这一思路可迁移到任何需要"分层量化"的场景(图像 token、音频 codec、推荐系统 item 编码)。
  • Codebook entropy 当训练监督:这是个非常 portable 的小 trick——在所有用 VQ-VAE / RQ-VAE 的工作里都能直接套用 model selection,避免 codebook collapse 这个老大难问题。
  • GSR 的"重构祖先"目标:传统 GPT decoder 重构的是 next token,这里重构的是 hierarchy tree 上不同层的祖先 embedding——把"序列生成"和"层级抽象"统一在一个 decoder 里,是非常优雅的多目标设计。
  • LLM 词表扩展 + 冻 backbone:只学新 token embedding + LoRA 既保留通用能力又快速适配 domain,是个把 quantized 表示注入 LLM 的可复用 recipe,对所有"领域专属离散表示"的任务(化学分子、蛋白质、代码)都适用。

局限与展望

  • 依赖外部 KG embedding:作者用 RotatE 生成 \(\mathbf{s}^{\mathcal{G}}\),量化质量天花板就被 RotatE 锚定;换更弱的 backbone 会拖累整体效果。
  • Hierarchy tree 静态生成:agglomerative clustering 在训练前一次性建好,无法随 quantization 训练动态调整;如果初始聚类不准,后面 GSE 会沿错误方向优化。
  • 只验证了 WN18RR / FB15k-237 两个经典 benchmark:这两个数据集规模小(entity 数 4 万 / 1.5 万),实际工业 KG 动辄千万 entity,scalability 没验证;codebook size \(K\) 和层数 \(m\) 在大 KG 上是否需要 trade-off 未知。
  • 没和 text-based 强 baseline 在 token 成本上对比:作者强调 quantization 比 text 高效,但没量化 token 用量差距,readers 看不到效率优势的具体数字。
  • 改进思路:(i) 让 hierarchy tree 跟 codebook 端到端联合学习(differentiable clustering);(ii) 在更大 KG(Wikidata / NELL)上做 scaling study;(iii) 把 quantized code 用到下游 QA / reasoning 任务而非仅 link prediction;(iv) 探索 cross-KG transfer——同一套 codebook 能否给多个 KG 复用。

相关工作与启发

  • vs SSQR(前作 vector quantization):SSQR 用 flat VQ + 多次 FFN projection 得 code,code 间无层级;GS-Quant 用 RQ + GSE 强制层级 + GSR 加因果,在 WN18RR Hits@1 +4.1 个点直接证明"结构化 quantization">"flat quantization"。
  • vs ReaLM:ReaLM 也用 residual quantization 但没注入语义层级;GS-Quant 在同一架构上加 GSE/GSR,证明 codebook 设计才是 quantization 在 KGC 上work 的关键。
  • vs DIFT(embedding 注入式 SOTA):DIFT 把连续 embedding 通过 prompt 注入 LLM,Hits@1 0.569(WN18RR);GS-Quant 用离散 code 0.594,证明在 LLM context 下离散表示比连续 embedding 更好对齐生成动力学。
  • vs RQ-VAE 原作:原 RQ-VAE 用于图像生成,没考虑语义层级;GS-Quant 把它适配到结构化数据(KG)并加层级语义对齐,扩展了 RQ-VAE 的应用边界。
  • vs MKGL / KG-FIT (text-based):text 方法每条 triple 几百 token;GS-Quant 把 entity 压成 \(m\) 个 code(通常 4-8)token,效率提升显著且效果更优——说明"把图结构化为 LLM 子语言"比"把图描述成自然语言"更对路子。

评分

  • 新颖性: ⭐⭐⭐⭐ "code-as-language" framing 配合 GSE + GSR 是清晰的新组合;单个组件(RQ-VAE / hierarchical clustering / GPT decoder)都有先例,但用在 KGC 上把语义层级显式注入是首次。
  • 实验充分度: ⭐⭐⭐⭐ 两 benchmark + 5 组消融 + 4 超参敏感性 + codebook 可视化 + entropy 与性能相关性 + 效率对比都覆盖,缺大规模 scalability 和 cross-KG transfer。
  • 写作质量: ⭐⭐⭐⭐ 动机讲得很清楚(flat vs hierarchical),公式齐全,图 4 codebook 可视化对比很有说服力;个别地方文字表达冗余(如反复强调 coarse-to-fine)。
  • 价值: ⭐⭐⭐⭐ 开源 + 在两个经典 KG benchmark 上拿 SOTA,对所有想用 LLM 做 KGC 的工业方有直接借鉴;GSE/GSR 这套设计对图像 token、推荐系统 item code 等场景也有迁移潜力。