一、语义泛化的核心问题
语义泛化实际上是 自然语言理解(NLU) 的核心目标,它要解决两个关键点
- 同义表述多样化(表达泛化)
- 不同用户说同一件事的方式完全不同。
- 模型要“理解语义”,而不是“匹配关键词”。
- 意图稳健性(鲁棒性)
- 模型不能因为多余的修饰、语气、语序变化就理解错。
- 例:“可以麻烦你帮我把空调打开吗?” → 一样识别为“开空调”。
二、实现语义泛化的几种主流思路
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 混合策略
一个实际可部署的语义泛化方案通常是:
- ASR → 文本
- 文本正则化(去语气词、口头语)
- LLM / embedding 匹配 → 语义意图
- 意图执行模块(设备控制、应答等)
{
"dependencies": ["."],
"graphs": {
"agent": "./src/agent/graph.py:graph"
},
"env": ".env",
"image_distro": "wolfi"
}
0 条评论