碱基互补语言模型

用 DNA 配对规则,从无标注文本中发现语法

"如果语言也有一条双螺旋------我们只是还没有找到它?"


引子:一个从来没有人问过的问题

有一个事实如此明显,以至于没有人想到去质疑它。

DNA 用四个碱基存储生命的全部信息。它们两两配对:A--T、G--C。从这一条规则------互补性------诞生了复制、转录、蛋白质折叠、遗传......生命的全部复杂性,都从碱基配对开始。

现在看语言。词语排列成序列。有些相邻的词组合自然("那只猫"),有些则别扭("猫那只")。语言中存在一套看不见的规则------句法------决定哪些词可以做邻居。我们花几年学习它们。企业花数十亿美元标注语料库,好让机器也能学会它们。

但如果句法不过是另一套互补配对系统呢?

如果每一个词都携带一个潜在的"碱基类型",组合自然的词对,碱基恰好互补------就像 A 配 T,锁配钥匙?

这就是碱基互补语言模型 的出发点:一个只有 48 万参数的模型,从原始无标注文本中自动发现词性、捕获局部句法兼容性、将 3 万词的词表压缩到约 4500 个候选------不需要任何标注,不需要预训练词向量,不需要注意力机制。

只需要离散碱基配对。


第一幕 困境:为什么语言模型需要结构

现代 LLM 的悖论

当代语言模型强大得令人惊叹。它们生成流畅的文本,回答问题,编写代码。但这种能力来自暴力堆叠:

模型 参数量 训练数据
GPT-2 15 亿 40GB 文本
GPT-3 1750 亿 570GB 文本
GPT-4 ~1.7 万亿(估计) ~13 万亿 token

每一句流畅的句子背后,都是一片连续、无差别的概率海洋 。模型知道"猫"经常出现在"那只"后面,但它不知道为什么。它没有"名词"或"冠词"的概念。句法结构被溶解在光滑的向量空间中,不可恢复。

这带来三个实际问题:

  1. 不可解释。 你无法打开一个 Transformer 问:"你把这个词归为什么句法类别?"
  2. 无法组合泛化。 如果模型见过"一只红色的猫"但从未见过"一只蓝色的猫",它没有原则性的理由知道后者合法------除非它见过足够多的相似样本来插值。
  3. 无法压缩。 每一步,模型都要评估全部 V 个 token。V=30000 意味着每个位置 30000 次比较。没有内在机制说"这里只需要看名词"。

缺失的要素:离散结构

我们需要的不是更多参数,而是结构------具体来说,一种机制,能够:

  • 为每个词分配离散的、可解释的类别
  • 在相邻词之间强制执行兼容性约束
  • 不需要任何标注数据
  • 可以扩展到任意词表大小

生物学在这里给出了一个意想不到的答案。


第二幕 方法:当碱基互补遇上语言

核心洞察

在分子生物学中,互补碱基配对是最简单的兼容性规则:

复制代码
A 配 T
G 配 C

两个符号。一个配对矩阵。由此,万物生长。

我们提出,同样的原则可以用于语言。具体来说:

每个词 w 被分配一个"左碱基"和一个"右碱基"------从 B 种碱基类型中抽取的离散潜在类型。相邻词兼容,当且仅当 w_t 的右碱基与 w_{t+1} 的左碱基配对。

配对由一个固定的互补矩阵 C ∈ {0,1}^{B×B} 控制,其中 Ci,j=1 表示碱基 i 与碱基 j 配对。C 是一个对称对合(完美匹配),与 DNA 碱基配对完全一致。

从离散到可微:Gumbel-Softmax

挑战在于 argmax(选择单个碱基类型)不可微分。我们使用 Gumbel-Softmax 技巧产生连续的可微近似:

复制代码
对于每个词 w:
  左碱基(w) = GumbelSoftmax(logits_左[w], τ)  ∈ ℝ^B
  右碱基(w) = GumbelSoftmax(logits_右[w], τ)  ∈ ℝ^B

温度 τ → 0 时,分布趋向 one-hot(单个碱基类型)。τ → ∞ 时,分布趋向均匀。训练过程中退火 τ,从高温(探索)到低温(承诺)。

亲和力分数

相邻 token 的兼容性计算如下:

复制代码
亲和力(w_t, w_{t+1}) = 右碱基(w_t)^T · C · 左碱基(w_{t+1})

这是"w_t 的右碱基在寻找什么"(通过互补矩阵变换)与"w_{t+1} 的左碱基实际是什么"之间的点积。配对则高(≈1),不配对则低(≈0)。

训练:对比学习

模型使用简单目标训练:真实句子的亲和力应高于被破坏的句子。

  1. 计算真实序列的亲和力分数 → pos_scores
  2. 破坏序列(替换随机 token)→ 计算亲和力 → neg_scores
  3. 间隔排序损失:pos_scores 应至少比 neg_scores 高出间隔 m

为防止坍塌(所有 token 获得相同碱基),添加:

  • 熵正则化:鼓励每个 token 承诺到特定碱基(单 token 低熵)
  • 全局熵奖励:鼓励所有 B 种碱基类型均匀使用(全局高熵)

完整架构

复制代码
┌─────────────────────────────────────────────────┐
│              输入:token_ids                     │
│              [batch, seq_len]                    │
└──────────────────┬──────────────────────────────┘
                   │
                   ▼
┌─────────────────────────────────────────────────┐
│         GumbelSoftmaxBase                       │
│  left_logits  [vocab_size, B] → 左碱基分布      │
│  right_logits [vocab_size, B] → 右碱基分布      │
│  (唯一的可学习参数)                            │
└──────────┬───────────────────────┬──────────────┘
           │                       │
      left[b,s,B]           right[b,s,B]
           │                       │
           │    ┌──────────┐       │
           │    │  矩阵 C  │       │
           │    │ (固定) │       │
           │    └────┬─────┘       │
           │         │             │
           ▼         ▼             ▼
    left[t+1]   right[t]@C
           │         │
           └────┬────┘
                │ 点积
                ▼
         亲和力分数 [batch, seq_len-1]
                │
                ▼
         log(亲和力) → 对比损失

总参数量:2 × 词表大小 × B。 V=30000、B=8 时仅 48 万------比 GPT-2 少五个数量级。


第三幕 结果:模型发现了什么

实验设置

在中文对话数据集(30000 词表,jieba 分词)上评估,扫描碱基类型数 B ∈ {8, 12, 16, 24}。

主要结果

B 匹配率 随机基线 倍数 PPL 候选集大小 词表覆盖率
8 0.8078 0.1250 6.46× 11.47 4,571 / 30,000 15.2%
12 0.7918 0.0833 9.50× 20.19 3,964 / 30,000 13.2%
16 0.7821 0.0625 12.51× 32.53 3,567 / 30,000 11.9%
24 0.7752 0.0417 18.61× 56.94 3,378 / 30,000 11.3%

解读这张表:

  • 匹配率 = 0.8078 (B=8):给定一个词的右碱基,模型能正确预测下一个词的左碱基,准确率 80.78% 。随机基线只有 12.5%。比随机好了 6.46 倍
  • 候选集 = 4,571 / 30,000 :碱基约束将下一个词的搜索空间从 30000 缩小到约 4571。候选词减少了 84.8%
  • PPL = 11.47(B=8):模型的互补困惑度与一个训练好的 LSTM 语言模型相当------而它只用了查找表。

更深的发现:碱基类型 ≈ 词性

在英语受控数据集(80 句,4 种词性:DT、JJ、NN、VB)上,我们测量了学习到的碱基类型与黄金词性标签的对齐程度:

指标 数值 随机基线
NMI(标准化互信息) 0.474 0.0
ARI(调整兰德指数) 0.249 0.0

NMI = 0.474 意味着模型的碱基分配与真实词性标签共享了近一半的信息量------完全从无标注文本中发现,没有任何句法监督。

模型不知道什么是"名词"。它从未见过词性标签。但它自发地将词汇聚类为与语言句法对齐的类别。

权衡格局

结果揭示了一个由单一超参数 B 控制的清晰而优雅的权衡:

复制代码
B ↑  →  匹配率 ↓(略降)    但 ×随机 ↑(剧升)
B ↑  →  PPL ↑(不确定性增)  但 候选集 ↓(压缩更强)
  • B=8 是原始预测的甜点:最高匹配率,最低 PPL
  • B=24 是压缩的甜点:18.61× 随机,词表仅覆盖 11.3%
  • B 的选择是精度与效率之间的旋钮

第四幕 对比:为什么这很重要

vs. Bigram 模型

一个自然的问题:这不就是 bigram 模型多了几步吗?

不是。 碱基互补的瓶颈改变了一切:

特性 普通 Bigram 碱基互补
参数量 V²(V=30K 时 9 亿) 2VB(B=8 时 48 万)
未见组合泛化 ❌ 零泛化 ✅ 通过碱基聚类泛化
候选压缩 ❌ 必须评估全部 V ✅ 过滤到 ~15%
发现潜在类别 ❌ 无 ✅ NMI=0.47 与词性对齐
可解释性 ❌ 查找表 ✅ 碱基类型 = 句法角色

核心差异是信息瓶颈。通过强制所有 token 经过 B 种碱基类型,模型必须学会将扮演相似句法角色的词归为一类。这不是缺陷------这正是它的设计。

具体例子: 假设训练数据包含"一只红色的猫"但从未出现"一只蓝色的猫"。

  • Bigram:P(蓝色 | 一只) ≈ 0。无法预测。
  • 碱基互补:"红色"和"蓝色"被分配了相同的碱基类型(都是形容词)。"一只"的右碱基与该类型配对。因此"一只蓝色的猫"获得高亲和力。无需插值的泛化。

vs. 神经语言模型(LSTM、Transformer)

特性 LSTM / Transformer 碱基互补
上下文窗口 无限(LSTM)/ 固定(Transformer) 仅 bigram(当前)
句法可解释性 ❌ 连续隐状态 ✅ 离散碱基类型
参数效率 百万--万亿级 48 万
需要预训练
发现词性 隐式(需探测) 直接可观

碱基互补模型不是在流畅性上与 Transformer 竞争。它占据一个不同的定位:用最少参数做结构发现。

它的定位

碱基互补模型是:

  1. 一个句法探针:无监督发现词性
  2. 一个候选过滤器:将下一词搜索压缩 85%+
  3. 一个结构先验:可以前置到任何语言模型,注入离散句法约束
  4. 一个研究方向:"语言的离散潜在结构"的最简实例

第五幕 未来:从 Bigram 到无限上下文

当前模型有一个明确的局限:只对相邻 token 配对。用 DNA 的话说,它只建模了一级结构------碱基的线性序列。

但 DNA 的力量在于其二级结构:线性序列中相距很远的碱基可以配对,形成环、发夹和复杂的三维形状。RNA 核酶通过长程碱基配对催化化学反应。

三条通往无限上下文的路径:

1. 递归碱基状态

将碱基信息注入递归隐状态:

复制代码
state[t] = GRU(state[t-1], base_embedding(token[t]))
亲和力(t, t+1) = state[t]^T · C · state[t+1]

状态携带整个左上文的信息,碱基配对提供离散约束。架构改动最小。

2. 栈式配对(RNA 二级结构)

每个 token 选择三种动作之一:

  • PUSH:将右碱基压入栈,等待未来匹配

  • POP:左碱基与栈顶配对(长程配对)

  • PASS:标准相邻配对

    "那只 我 昨天 看到 的 猫 坐在 那里"

    那只 → PUSH(等待主语动词)
    猫 → PUSH(等待定语从句动词)
    的 → PASS
    看到 → POP(与"猫"配对 ✓)
    坐在 → POP(与"那只"配对 ✓,跨越 7 个 token 的主谓一致)

这是一个可微分下推自动机------能表示任意嵌套结构。

3. 多尺度膨胀配对

借鉴膨胀卷积:

复制代码
层级 0:token_i ↔ token_{i+1}    (距离 1,当前已有)
层级 1:token_i ↔ token_{i+2}    (距离 2)
层级 2:token_i ↔ token_{i+4}    (距离 4)
层级 k:token_i ↔ token_{i+2^k}  (距离 2^k)

仅需 O(log L) 个层级即可覆盖长度为 L 的序列。每个层级学习自己的碱基类型和互补矩阵。


终章

以下是我们已经证明的:

  • 一个 48 万参数的模型(GPT-2 的 0.03%)从原始文本中发现了词性
  • 一个超参数 B 像旋钮一样在精度与压缩之间切换
  • 在 3 万词表的中文数据集上匹配率达到 80.78% ------随机基线的 6.46 倍
  • 候选词从 30000 压缩到 4571(减少 85%)
  • 与 DNA 碱基配对的直接类比,开启了长程结构的路径

以下是我们尚未证明的:

  • 超越 bigram 的长程依赖
  • 扩展到数十亿 token
  • 作为结构先验集成到现有语言模型中
  • 碱基互补是语言的基本属性还是有用近似

剩下的问题是:

如果 48 万参数和一条配对规则能在 30 个 epoch 中挖出潜在句法,那么加上递归状态、栈式配对和一亿条句子,会发生什么?

DNA 的类比暗示了答案:从碱基配对开始,万物生长。


技术摘要

架构

复制代码
BaseComplementModel
├── GumbelSoftmaxBase(2 × V × B 可学习参数)
│   ├── left_logits  [V, B]   --- "我在左侧寻找什么碱基"
│   └── right_logits [V, B]   --- "我在右侧提供什么碱基"
└── 互补矩阵 C [B, B] --- 固定对称配对(对合置换)

损失 = 对比间隔损失
     + λ₁ × 熵正则化(承诺到特定碱基)
     - λ₂ × 全局熵奖励(均匀使用所有碱基类型)

核心公式

复制代码
亲和力:  a(t) = right(w_t)^T · C · left(w_{t+1})
匹配率:  P[left(w_{t+1}) 与 C · right(w_t) 匹配]
候选集:  {w : left(w) ∈ support(C · right(w_t))}

超参数

参数 符号 默认值 作用
碱基类型数 B 8 控制精度-压缩权衡
温度 τ 2.0 → 0.5 Gumbel-Softmax 退火
间隔 m 1.0 对比损失间隔
熵正则权重 λ₁ 0.01 鼓励碱基承诺
全局熵权重 λ₂ 0.005 防止碱基坍塌

项目结构

复制代码
base_complement_lm/
├── config.py          超参数配置(dataclass)
├── data.py            数据加载器(toy/custom/wikitext/jsonl)
├── model.py           碱基互补模型 + Gumbel-Softmax + 损失
├── train.py           训练循环 + τ 退火 + 早停
├── evaluate.py        评估:匹配率、PPL、候选生成、POS NMI
├── baselines.py       LSTM 基线模型
├── toy_data.py        玩具文法数据生成器
├── run.py             CLI 主入口
└── run_jsonl_fast.py  中文 JSONL 快速实验脚本

引用

bibtex 复制代码
@article{base_complement_lm_2026,
  title={碱基互补语言模型:离散碱基配对约束用于无监督句法发现},
  author={碱基互补语言模型研究},
  year={2026},
  note={一个用 DNA 碱基互补配对从无标注文本中发现潜在句法的最小模型。}
}

本项目开放合作。如果"语言作为互补配对系统"的想法与你的研究产生共鸣,欢迎联系。

相关推荐
小刘|1 小时前
ChatClient和ChatModel区别解析
人工智能
小飞侠在吗1 小时前
AI Agent Plan-and-Execute 技术范式详细文档总结
人工智能·agent·ai编程
ん贤1 小时前
深度学习入门笔记(一)
人工智能·笔记·深度学习
Java面试题总结1 小时前
Python 文件基本操作
大数据·人工智能·python
weixin_509138341 小时前
科技报道:从“概率生成”到“认知领航”
人工智能·agi·智能体·智能体认知
MartinYeung51 小时前
[论文学习]差分隐私在机器学习中的演进:从符号式AI到大型语言模型
人工智能·学习
AdCj31 小时前
GitHub 日榜速递 (2026-06-08):AI 基础设施正在“下沉“
人工智能·github·agent
实在智能RPA1 小时前
RPA-Agent的自主规划边界在哪里?——2026:从指令执行到目标驱动的技术跨越
大数据·人工智能·ai·rpa
星川皆无恙1 小时前
基于BERT+LSTM+CRF与知识图谱的医疗智能问答系统实战:Neo4j图数据库+实体识别+意图分析完整项目
数据库·人工智能·深度学习·bert·lstm·知识图谱·neo4j