从 DIET 到部署:训练你的第一个 Rasa NLU 模型

发布: (2026年2月16日 GMT+8 21:30)
5 分钟阅读
原文: Dev.to

Source: Dev.to

CRF 向我们展示了结构化实体抽取。DIET 向我们展示了意图与实体的联合学习。现在是时候将理论付诸实践了。

理解模型很重要,但没有数据模型毫无用处——这正是实际 NLU 开发的起点。

我们已经讨论了 DIET 在内部是如何工作的。实际问题是:我们到底该如何训练它?

Rasa 的训练包括三个核心步骤:

  1. 创建结构化训练数据
  2. 配置 NLU 流水线
  3. 训练模型

下面我们将逐步演示每个步骤。

生成训练数据

Rasa 模型完全从标注的示例中学习。与其编写规则,不如提供能够说明你期望的意图和实体的示例。

NLU 文件

训练数据存放在 YAML 文件中,通常是 data/nlu.yml

version: "3.1"

nlu:
  - intent: book_flight
    examples: |
      - Book a flight to [Paris](location)
      - I want to fly to [Berlin](location)
      - Get me a ticket to [London](location)

  - intent: greet
    examples: |
      - Hello
      - Hi
      - Hey there

注意事项

  • 意图 是顶层标签。
  • 实体 通过内联标注 ([text](entity))。
  • 不需要单独的实体文件;DIET 从这个单一数据集学习两个任务。

需要多少数据?

没有固定的数字,但常见的指导原则是:

用例每个意图的示例数
最小原型10–15
生产基线50–100

多样的表达方式远比重复的模式更有价值。

不好的示例(重复):

  • 预订飞往巴黎的航班
  • 预订飞往柏林的航班
  • 预订飞往伦敦的航班

好的示例(多样):

  • 我需要去巴黎旅行
  • 你能帮我查找去柏林的航班吗?
  • 帮我买一张飞往伦敦的机票
  • 明天把我送到罗马

变化教会模型进行泛化。

训练模型

一旦数据和管道配置就绪,训练只需一个命令:

rasa train

在幕后,Rasa 会:

  1. 读取 NLU 数据并构建词汇表。
  2. 初始化 DIET 模型并运行多个训练 epoch。
  3. 优化意图和实体预测的联合损失。
  4. 保存训练产物(例如 models/20260215-123456.tar.gz),其中包含 NLU 和对话模型。

训练期间会发生什么?

  • 文本被分词。
  • 词元被向量化。
  • Transformer 层处理上下文。
  • 意图和实体的损失被联合计算。
  • 梯度更新共享权重。

常见的可调超参数:

  • epochs
  • learning_rate(高级)
  • embedding_dim
  • batch_size

测试模型

训练完成后,启动交互式 NLU 测试服务器:

rasa shell nlu

输入一个示例,例如 “预订明天飞往马德里的航班”,你将收到类似以下的响应:

{
  "intent": {
    "name": "book_flight",
    "confidence": 0.94
  },
  "entities": [
    {
      "entity": "location",
      "value": "Madrid"
    }
  ]
}

这就是 DIET 的实际运行效果,已在你的数据上进行训练。

常见初学者错误

陷阱为何有害
示例太少模型无法学习变异性。
意图重叠导致歧义和低置信度。
复制‑粘贴变体使模型在狭窄的表述上过拟合。
将业务逻辑混入 NLU模糊了关注点分离。
忽视真实用户表述模型在生产环境中失效。

关注数据质量:多样的表述、平衡的意图、清晰的实体边界,以及最小的重叠。记住迭代循环:

训练 → 测试 → 改进 → 再训练.

接下来我们要做什么

现在你已经了解如何:

  • 生成训练数据
  • 配置 DIET
  • 训练 Rasa 模型

下一步是将 NLU 连接到对话管理:

  • Domain 文件
  • Stories 与规则
  • 槽位填充

意图预测仅是第一步;构建行为是第二步。敬请期待完整的助手教程。

0 浏览
Back to Blog

相关文章

阅读更多 »

n8n 是纯粹的精彩

!Miguel Valdeshttps://media2.dev.to/dynamic/image/width=50,height=50,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2...