词级语言生成引擎 · VITA 人工情感核心的语言表达器官
Turning intent & emotion into words — 一个从脉冲动力学中生长出来的语言器官。
LoCo(逻各斯皮质,Logos Cortex)是一个把 「意图 + 情感」转化为语言 的词级语言生成引擎,用 CUDA 单文件实现(loco.cu,约 9000 行)。它不是一个通用大语言模型,而是一个 语言器官:为拥有自我意愿与情感的 AI 提供"开口说话"的能力。
项目的原始定义:将 VITA 的自我意愿转化为语言表达。
LoCo 是更大的 AI 意识架构中的一个器官,与两个项目深度绑定:
┌─────────────────────────────────────────┐
│ SOMA(整体器官架构) │
│ │
用户话语 ────────▶│ 驱力回路 ┌──────────────┐ │
│ (何时说: urge) ──▶│ │ │
│ │ LoCo 表达器官 │ │
VITA 情感核心 ───▶│ (说什么: 意图 + │ 意图+情感 ⟶ 语言 │ ────▶ 语言输出
9维调质/PAD ─────▶│ 情感 18 维) ────▶│ │ │
│ └──────┬───────┘ │
│ │ │
│ SOMA Phase B2 ◀──────┘ │
│ ("问什么"素材 = N400 惊讶流) │
└─────────────────────────────────────────┘
- VITA(姊妹项目,人工情感核心) — VITA 维护一个 9 维
AffectiveState:6 种神经调质(DA 多巴胺 / 5HT 血清素 / NE 去甲肾上腺素 / ACh 乙酰胆碱 / GABA 抑制 / OXT 催产素)+ PAD 心理空间三轴(愉悦 P / 唤醒 A / 主导 D)。LoCo 通过E_Δ通路接收这份情感态(含一阶差分共 18 维),学会 "什么情感说什么话"。 - SOMA(整体器官合同) — SOMA 把 LoCo 定义为 表达器官 + 惊讶传感器:读 = urge + 情感态;写 = 外部行为(语言)。同时 LoCo 逐词输出的 N400 惊讶流,作为 SOMA 学习回路 Phase B2 的 "问什么"素材源——它知道自己哪里"看不懂"。
- 职责边界 — "何时说是驱力回路的事,说什么是 LoCo 的事。" LoCo 不学"忍不住要说",只学"自发意图到达时忠实说出状态"。
| 类型 | 触发源 | 条件向量 | 优先级 |
|---|---|---|---|
| 响应式 | 用户话语 | (对话摘要, 意图, 情感) | Tier 1 |
| 自发式 | 内驱力越阈 | (自身状态轨迹摘要, 意图, 情感) | Tier 1(同等优先) |
| 内心言语 | N400 误差热点 | (惊讶热点, 意图=自问, 情感) | Tier 3 |
其中自发式与响应式同等优先——"将自我意愿转化为语言"是本项目存在的理由,不是附属功能。
输入: 意图嵌入 (8 意图) + 情感 E_Δ (18 维 = 9 调质/PAD + 9 一阶差分)
│ │
▼ ▼
┌──────────────────────────────────────────┐
│ 12 层选择性 SSM 状态层 (d=1024, Mamba 式) │ ← 情感/意图逐层注入
│ h_t = A(x,emo) h_{t-1} + B(x,emo) x_t │
└──────────────────┬───────────────────────┘
▼
┌──────────────────────────────────────────┐
│ 语义树输出层 (Huffman 层级, O(log n)) │ ← 5 万词表只在输出出现一次
│ P(w) = ∏ σ(v_edge · h_t) 沿树路径 │ 最大路径深度 17
└──────────────────┬───────────────────────┘
▼
top-K 温度采样 + 重复抑制 + EOS 自然收尾 (4–64 词变长句)
│
├──▶ 语言输出
└──▶ N400 逐词惊讶流 (预测置信度缺口)
| 组件 | 说明 |
|---|---|
| 选择性 SSM 状态层 | 12 层 d=1024,约 1.4 亿参数;连续状态可并行 scan,消除"词表贯穿全程"的带宽黑洞 |
| 语义树输出 | 5 万词组织成 Huffman 树(由词嵌入聚类构建),层级 softmax 把输出复杂度降到 O(log n) |
| E_Δ 情感通路 | 18 维 = 9 维调质/PAD + 9 维一阶差分(情感动力学:"骤起的恐惧"与"钝化的恐惧"说不同的话) |
| 意图嵌入 | 8 意图 per-layer 投影:应答支(回答/追问/澄清)+ 自发支(孤独陪伴/不适求助/分享喜悦/好奇自问/提议邀约) |
| N400 惊讶传感器 | 逐词预测置信度缺口输出为惊讶流;违反共现的词惊讶度显著更大(植错实验 3.06×) |
| 学习规则 | 树层级交叉熵反向传播 + 预测编码 + STDP 共现自组织 + GSO(保留无梯度时代的生物学机制) |
| 生成协议 | top-K 截断 softmax 温度采样(防 5 万词表绝对概率稀释)、句号胜出即 EOS 收尾、纯推理零学习(防自举污染) |
语言是节律,不是矩阵。 项目从无梯度、无 attention、无 backprop 的脉冲动力学起步(θ 词时钟 + WTA 词竞争 + STDP),证明语言行为可以从 SNN 动力学中自生长;v8 起为突破计算瓶颈引入选择性 SSM 与层级 softmax,但保持两条底线:训练与推理同构、机制尽量有生物对应(膜电位动力学、预测编码、N400、神经调质调制)。
条件生成(指定意图+情感),由 Qwen3-4B 盲判情感类别:
| 条件 | 生成 |
|---|---|
| 喜悦·分享 | 我笑出声来,觉得特别开心。 |
| 恐惧·不适 | 这声音像影子一样跟着我,让我更害怕。 |
| 愤怒·不适 | 我生气地说,这不公平。 |
| 平静·陪伴 | 我感觉好温暖,像被阳光晒着。 |
| 追问·好奇 | 你是不是觉得不公平,怎么突然这么生气呢。 |
| 提议·邀约 | 我就是想和你一起去海边。 |
如实说明:当前版本存在相邻词复读问题("我我"),上文样例已人工去除重复词;完整原始输出见训练日志。
| 指标 | Tier 1 验收线 | 当前 | 状态 |
|---|---|---|---|
| 情感盲判(Qwen3-4B 5 分类) | ≥ 50% | 63%(随机基线 20%) | ✅ 达标 |
| N400 植错放大 | ≥ 3× | 3.06×(植错词为句内最惊讶词 98%) | ✅ 达标 |
| EOS 自然收尾 | ≥ 90% | 100% | ✅ 达标 |
| 意图盲判 | ≥ 75% | 31% | 🚧 进行中 |
| 主题命中 | ≥ 70% | 进行中 | 🚧 进行中 |
训练吞吐:63,000 词/min(RTX 5090,含 15× kernel 优化:块内归约替代同地址原子、树前向批量化、device 端 loss 累计)。情感条件化历程:r4 的 E_Δ 通路被诊断为"哑"(盲判 19%,低于随机)→ 通路扩容 + 三维条件语料重训 → r8 达 63%。
| 版本 | 核心机制 | 关键结果 |
|---|---|---|
| v0.5 | θ 词时钟 + LexWTA 词竞争 + STDP | bigram 命中 0.919 |
| v1.0 | HPL 五层预测皮层 + N400 误差 | 词序 0.828;N400 违反效应 p<0.001 |
| v2.0 | AMP 情感调制(节律/词偏向/音系三路) | 恐惧语速 8.4 vs 平静 5.4 词/s |
| v7.x | 预测编码 PC-SNN + BP 信用分配 | bigram ×302;发现"词表贯穿"带宽黑洞 |
| v8a/b | 选择性 SSM 状态层(Mamba 式) | 计算瓶颈解除 |
| v8c | 语义树输出 + 12 层 | CE 6.34,EOS 100% |
| v8d | 条件表达器(E_Δ 18 维 + 意图嵌入 + N400 流 + 三维条件语料) | 情感盲判 63%,植错 3.06× |
各阶段完整设计文档见 docs/ 与 .trae/specs/。
- NVIDIA GPU + CUDA 12.x + cuBLAS
- Windows:MSVC 2022 Build Tools(
vcvarsall.bat);Linux:GCC - Python 3.8+(语料工具:jieba / paramiko 等)
:: Windows (sm_86, RTX 30/40 系)
build.bat &:: 训练版 -> bin\loco.exe
build.bat gen &:: 生成版 -> bin\loco_gen.exe
build_gc.bat &:: 数值梯度校验版 (gradcheck)# Linux / 云端 (sm_120, RTX 50 系)
nvcc -arch=sm_120 -O3 -std=c++17 -lcublas -o loco loco.cu
nvcc -arch=sm_120 -O3 -std=c++17 -lcublas -DLOCO_GEN_WORDS=4000 -o loco_gen loco.cu./loco # 训练(回放语料 + 生成交替;checkpoint -> logs/loco_pc_weights.bin)
LOCO_STEPS=6000000000 ./loco # 指定训练步数
LOCO_REPLAY_WORDS=0 ./loco_gen # 纯生成(零学习,防自举污染)
LOCO_GEN_INTENT=5 LOCO_GEN_EMO=3 ./loco_gen # 锁定条件生成(意图/情感/情感轮廓)运行所需小数据(词典/音素表/意图词域)已入库于 logs/;回放序列与语义树由工具再生成(见下)。
三源混合语料,因版权与体积原因原始语料不入库,全部可由工具链再生成:
| 来源 | 工具 | 用途 |
|---|---|---|
| 中文维基百科 | tools/extract_wiki_mdx.py → tools/prepare_lexicon.py | top-50K 词表 |
| 网络小说(叙述文本,保 SVO 句型) | tools/build_basecorpus.py + tools/clean_novel.py | 通用语言能力 |
| DeepSeek 合成三维条件语料 v3 | tools/gen_corpus_v3.py(logs/synth_v3.jsonl 已入库,3933 篇) | 8 意图 × 5 情感 × 50 主题,带情感锚点向量 |
回放序列生成:python tools/mix_replay_v3.py(60/20/20 三源混合,条件标记嵌入 token 流:-1 句界 / -2-i 意图 / -20-e 情感 / -40-p 情感轮廓)。语义树构建:python tools/build_semantic_tree.py。
python tools/judge_v8d.py # 情感盲判(Qwen3-4B 裁判)
python tools/judge_intent_v8d.py # 意图盲判
python tools/analyze_v8d_gen.py # 生成分析(情感词命中/Jaccard 分化)
python tools/n400_analyze.py # N400 植错实验分析loco/
├── loco.cu # 全部实现:SSM/语义树/情感通路/意图/训练/生成(单文件)
├── loco_config.h # 参数常量(词表 5 万/12 层/学习率/调制增益…)
├── build.bat # Windows 构建
├── cloud_*.sh # 云端 GPU 管线(构建/训练/生成/评测,r6→r10 各轮)
├── docs/ # 设计文档(v7 PC-SNN / v8 SSM / 金种子语料规范…)
├── .trae/specs/ # 各版本实施 spec(v7.1→v8d 演进全记录)
├── tools/ # Python 工具链(语料/词表/回放/评测/SSH 运维)
└── logs/ # 词典/音素表/意图词域(入库小数据)+ synth_v3 条件语料
- 情感输入:
logs/host_emotion.csv(每 θ 周期读入,9 维调质/PAD,由 VITA 导出;差分在引擎内计算) - 意图输入:8 意图词表(应答支/自发支),当前由训练标签站位,将来由 SOMA 驱力回路动作空间接管(对齐进行中)
- 惊讶输出:N400 逐词惊讶流(
logs/loco_n400_*.txt),供 SOMA Phase B2 选"问什么"
- 意图盲判 31% → 75%:瓶颈已定位在生成表达而非梯度通路(意图特征词未进 top-K 采样),下一步是意图专属词采样偏置
- 相邻词复读("我我"):生成侧重复抑制(REP 罚)需加强
- 情感混淆对:恐惧/愤怒(D 轴)、喜悦/平静(DA 轴)锚点间距继续拉大
- 意图-情感零和竞争:单通路容量下两者此消彼长,考虑意图独立容量
- 与 SOMA 驱力回路的词表对齐(轨道 4 合同缺口)
CC-BY-4.0(署名即可,商用自由)。语料再生成脚本涉及的外部数据(维基百科、小说、DeepSeek API)遵循各自许可。
- VITA 人工情感核心(姊妹项目)——情感状态定义与调制哲学
- SOMA 器官架构——表达器官合同与 N400 素材回路
- Mamba(选择性状态空间模型)——SSM 选择性机制灵感