别再说“AI听不懂人话”:从0到1手把手搭一个意图识别 + 槽位提取系统

简介: 别再说“AI听不懂人话”:从0到1手把手搭一个意图识别 + 槽位提取系统

别再说“AI听不懂人话”:从0到1手把手搭一个意图识别 + 槽位提取系统

说句实话,我见过太多所谓“智能对话系统”,本质就是:

关键词匹配 + if-else 地狱

用户说一句:“帮我订明天去上海的机票”

系统回一句:“你是要查天气吗?”

——这不叫AI,这叫“人工智障”。

今天我们就来聊一个对话系统里最核心、也是最容易被低估的能力:

👉 意图识别(Intent Recognition) + 槽位提取(Slot Filling)

说白了就是:

  • 你想干嘛?(意图)
  • 你说了哪些关键信息?(槽位)

如果这两件事没做好,后面什么大模型、推荐系统,全是空中楼阁。


一、先把问题讲明白:什么是意图 + 槽位?

举个最简单的例子:

“帮我订一张明天从北京到上海的机票”

我们要解析成:

{
   
  "intent": "book_flight",
  "slots": {
   
    "date": "明天",
    "from_city": "北京",
    "to_city": "上海"
  }
}

你看,本质上就是一个“结构化理解”。


二、为什么这件事很难?

很多人一开始觉得:

👉 不就分类 + NER 吗?

但真正做起来你会发现:

1️⃣ 表达太多样

  • 明天去上海
  • 我要飞上海
  • 帮我订张去魔都的票

👉 全是一个意图


2️⃣ 槽位不完整

  • “帮我订票” → 缺日期
  • “明天去上海” → 缺出发地

👉 系统必须能“追问”


3️⃣ 噪声极多

  • “我想大概后天 maybe 去上海吧?”

👉 NLP 的现实就是 messy


三、先来一个最朴素版本(能跑最重要)

我们先不用大模型,直接用传统方法搞一版。


Step 1:意图识别(文本分类)

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import LogisticRegression

texts = [
    "帮我订机票",
    "我要买机票",
    "查一下天气",
    "今天上海天气怎么样"
]

labels = [
    "book_flight",
    "book_flight",
    "check_weather",
    "check_weather"
]

vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(texts)

model = LogisticRegression()
model.fit(X, labels)

def predict_intent(text):
    x = vectorizer.transform([text])
    return model.predict(x)[0]

print(predict_intent("帮我订一张票"))

👉 这一步解决:

  • 用户“想干嘛”

Step 2:槽位提取(规则版)

import re

def extract_slots(text):
    slots = {
   }

    # 简单城市识别
    if "北京" in text:
        slots["from_city"] = "北京"
    if "上海" in text:
        slots["to_city"] = "上海"

    # 日期识别
    if "明天" in text:
        slots["date"] = "明天"

    return slots

print(extract_slots("帮我订明天从北京到上海的机票"))

👉 很土,但有效


四、升级一下:用深度学习做联合建模

真正工业级的做法是:

Intent + Slot 一起建模(Joint Model)

为什么?

👉 因为它们是强相关的。


一个简单的 BiLSTM + CRF 示例

import torch
import torch.nn as nn

class JointModel(nn.Module):
    def __init__(self, vocab_size, hidden_dim, num_intents, num_slots):
        super().__init__()
        self.embedding = nn.Embedding(vocab_size, 128)
        self.lstm = nn.LSTM(128, hidden_dim, bidirectional=True, batch_first=True)

        self.intent_fc = nn.Linear(hidden_dim * 2, num_intents)
        self.slot_fc = nn.Linear(hidden_dim * 2, num_slots)

    def forward(self, x):
        emb = self.embedding(x)
        output, _ = self.lstm(emb)

        # intent 用最后一个 hidden
        intent_logits = self.intent_fc(output[:, -1, :])

        # slot 用每个 token
        slot_logits = self.slot_fc(output)

        return intent_logits, slot_logits

👉 核心思想:

  • 一次输入
  • 两个输出(intent + slot)

五、再往上走一步:用预训练模型(推荐)

现在还手写 LSTM 的人,说实话已经不多了。

直接上 BERT:

from transformers import BertTokenizer, BertModel
import torch.nn as nn

class BertNLU(nn.Module):
    def __init__(self, num_intents, num_slots):
        super().__init__()
        self.bert = BertModel.from_pretrained("bert-base-chinese")

        self.intent_fc = nn.Linear(768, num_intents)
        self.slot_fc = nn.Linear(768, num_slots)

    def forward(self, input_ids, attention_mask):
        outputs = self.bert(input_ids=input_ids, attention_mask=attention_mask)

        sequence_output = outputs.last_hidden_state
        pooled_output = outputs.pooler_output

        intent_logits = self.intent_fc(pooled_output)
        slot_logits = self.slot_fc(sequence_output)

        return intent_logits, slot_logits

👉 优点:

  • 少量数据也能起飞
  • 表达能力强
  • 更鲁棒

六、对话系统真正难的,其实不是模型

我讲点“踩坑经验”,这部分很多文章不会说。


1️⃣ 槽位标准化(巨坑)

用户说:

  • “魔都” → 上海
  • “帝都” → 北京

你要统一:

city_map = {
   
    "魔都": "上海",
    "帝都": "北京"
}

👉 否则系统逻辑全乱


2️⃣ 多轮对话状态管理(核心)

dialog_state = {
   
    "intent": "book_flight",
    "slots": {
   
        "from_city": "北京"
    }
}

用户下一句:

“明天的”

👉 你必须补齐:

dialog_state["slots"]["date"] = "明天"

3️⃣ 缺失槽位要追问

required_slots = ["from_city", "to_city", "date"]

def check_missing(slots):
    return [s for s in required_slots if s not in slots]

👉 这才像“会聊天”


七、一个完整流程(工程视角)

我帮你总结一个落地架构:

用户输入
   ↓
意图识别
   ↓
槽位提取
   ↓
状态管理(多轮)
   ↓
缺失补齐(追问)
   ↓
业务执行

八、说点真心话:大模型时代,这一套还重要吗?

很多人现在会问:

有大模型了,还需要意图识别吗?

我的答案是:

👉 更需要了。

原因很现实:

  • 大模型不稳定
  • 成本高
  • 可控性差

而:

意图 + 槽位 = 可控的“确定性系统”

最佳实践是:

👉 小模型做结构化理解 + 大模型做补充理解


九、我的一点感受

我做对话系统这么多年,有一个越来越深的体会:

对话系统不是“让机器更聪明”,而是“让系统更可控”。

很多团队一味追求 fancy:

  • 用最牛的模型
  • 做最复杂的 pipeline

结果:

👉 一上线就崩

反而是那些:

  • 意图清晰
  • 槽位干净
  • 流程简单

的系统,活得最长。


十、结尾:别做“听不懂人话”的系统

如果你现在的系统:

  • 靠关键词匹配
  • 经常理解错
  • 无法处理多轮对话

那你真的该重构一遍了。

因为:

对话系统的本质,不是“说话”,而是“理解”。

而“理解”的第一步,就是:

👉 意图识别 + 槽位提取

目录
相关文章
|
8天前
|
机器学习/深度学习 人工智能 自然语言处理
手撕 Transformer:从原理到代码,一步步造一个“小型大模型”
手撕 Transformer:从原理到代码,一步步造一个“小型大模型”
228 6
|
24天前
|
机器学习/深度学习 算法
标签脏了,模型再牛也白搭:聊聊训练样本标签质量的评估与修正(把信噪比狠狠干上去)
标签脏了,模型再牛也白搭:聊聊训练样本标签质量的评估与修正(把信噪比狠狠干上去)
332 14
|
11天前
|
存储 人工智能 关系型数据库
OpenClaw怎么可能没痛点?用RDS插件来释放OpenClaw全部潜力
OpenClaw插件是深度介入Agent生命周期的扩展机制,提供24个钩子,支持自动注入知识、持久化记忆等被动式干预。相比Skill/Tool,插件可主动在关键节点(如对话开始/结束)执行逻辑,适用于RAG增强、云化记忆等高级场景。
624 55
OpenClaw怎么可能没痛点?用RDS插件来释放OpenClaw全部潜力
|
18天前
|
人工智能 自然语言处理 安全
“养龙虾玩Skill”指南!OpenClaw(Clawdbot)阿里云/本地部署+新手3种 Skill 挖掘AI工具核心价值
OpenClaw(昵称“龙虾”)的爆火,让“养龙虾玩Skill”成了2026年的新潮流——有人用它自动化处理工作,有人靠定制部署服务变现,甚至闲鱼上500元一次的上门部署生意都应运而生。但多数新手入手后,只停留在基础对话层面,殊不知OpenClaw的核心价值藏在Skill生态中——这些可执行的“能力单元”,就像一个个专属机器人,能将自然语言指令转化为实际操作,从文档处理到硬件控制,覆盖全场景需求。
2530 4
|
11天前
|
人工智能 自然语言处理 IDE
养虾只需丢给 Qoder 1个 Skill:安装、配置、上手OpenClaw 一次性搞定
本文介绍如何用Qoder快速对接OpenClaw:三步完成——安装Qoder IDE、配置OpenClaw与钉钉/飞书机器人、通过ACP协议接入Qoder CLI。无需手动部署,丢个Skill文件,泡杯茶的功夫,AI虾塘就跑起来了!
1186 59
|
13天前
|
机器学习/深度学习 人工智能 PyTorch
写 PyTorch 总像在写脚本?试试 PyTorch Lightning,把模型训练变成“工程化项目”
写 PyTorch 总像在写脚本?试试 PyTorch Lightning,把模型训练变成“工程化项目”
198 14
写 PyTorch 总像在写脚本?试试 PyTorch Lightning,把模型训练变成“工程化项目”
|
9天前
|
人工智能 安全 Linux
OpenClaw(龙虾)云端/本地保姆级部署+阿里云百炼Coding Plan 免费大模型API配置+4大办公场景实测解析
2026年,开源AI智能体OpenClaw(昵称“龙虾”)以“能落地、真干活”的核心优势引爆全网,彻底颠覆了人们对AI工具的认知。过去的AI仅能充当“参谋”,提供思路与大纲,最终落地仍需人工收尾;而OpenClaw已进化为“执行型助理”,能直接接管文件整理、日程安排、PPT制作等具体工作,将80%的办公脏活累活一键搞定。
457 13
|
4天前
|
机器学习/深度学习 数据采集 人工智能
别再从零训练了:用迁移学习“借力打力”,小数据也能玩转大模型
别再从零训练了:用迁移学习“借力打力”,小数据也能玩转大模型
110 15
|
11天前
|
Arthas 人工智能 Java
我们做了比你更懂 Java 的 AI-Agent -- Arthas Agent
Arthas Agent 是基于阿里开源Java诊断工具Arthas的AI智能助手,支持自然语言提问,自动匹配排障技能、生成安全可控命令、循证推进并输出结构化报告,大幅降低线上问题定位门槛。
551 61
我们做了比你更懂 Java 的 AI-Agent -- Arthas Agent
|
11天前
|
存储 安全 Linux
OpenClaw Skill 安全指南:阿里云/Win11/MacOS/Linux部署步骤+8类高危Skill黑名单+安全避坑FAQ
“给OpenClaw装Skill,就像给陌生人开家门——门开得越大,风险越高”——这是2026年OpenClaw用户最该牢记的安全准则。作为开源AI智能体的核心优势,Skill生态让OpenClaw能解锁翻译、办公、自动化等多样功能,但参考文章作者的实测与真实安全案例警示:海量Skill中混杂着大量“埋雷”工具,可能窃取密钥、访问隐私文件、植入恶意程序,甚至造成财产损失。
1011 6