一、语义泛化的核心问题

语义泛化实际上是 自然语言理解NLU 的核心目标,它要解决两个关键点

  1. 同义表述多样化(表达泛化)
  • 不同用户说同一件事的方式完全不同。
  • 模型要“理解语义”,而不是“匹配关键词”。
  1. 意图稳健性(鲁棒性
  • 模型不能因为多余的修饰、语气、语序变化就理解错。
  • 例:“可以麻烦你帮我把空调打开吗?” → 一样识别为“开空调”。
二、实现语义泛化的几种主流思路
2.1 模板 + 同义词扩展(传统方式)

手工或程序生成多种说法:

模板:「打开{设备名}」
同义:{开启, 打开, 开一下, 启动}
→ 打开空调 / 开一下空调
  • 优点:简单、可控。
  • 缺点:维护成本高,覆盖有限,难应对口语化表达。
2.2 语义向量匹配(embedding 相似度)

思路:把每句话都编码成语义向量,计算相似度。

“打开空调” → 向量A

“帮我开一下空调” → 向量B

相似度高 → 视为同一意图。

常用模型:

中文可用:text-embedding-3-large, bge-large-zh, m3e-base

英文可用:text-embedding-3-large, all-MiniLM-L6-v2

优点:天然支持泛化;用户说法不需要出现在训练集中。

缺点:需要相似度阈值调优;与训练数据分布有关。

2.3 大语言模型(LLM)理解
  • 语音 → 文本(ASR) → LLM(如 GPT、Qwen)→ 解析语义意图。
  • Prompt 例:
用户说:“有点热,开个空调吧”
请输出对应的意图(如“开空调”):

LLM 能理解复杂语境与隐含语义,比如:

“有点闷” → 推理为“需要开窗或开空调”

“冷死了” → 推理为“关空调或调高温度”

2.4 混合策略

一个实际可部署的语义泛化方案通常是:

  1. ASR → 文本
  2. 文本正则化(去语气词、口头语)
  3. LLM / embedding 匹配 → 语义意图
  4. 意图执行模块(设备控制、应答等)
{
  "dependencies": ["."],
  "graphs": {
    "agent": "./src/agent/graph.py:graph"
  },
  "env": ".env",
  "image_distro": "wolfi"
}


0 条评论

发表回复

Avatar placeholder

您的邮箱地址不会被公开。 必填项已用 * 标注