理解 RASA 中的 RegexEntityExtractor

发布: (2026年1月19日 GMT+8 20:00)
2 min read
原文: Dev.to

Source: Dev.to

什么是 RegexEntityExtractor?

如果文本匹配预定义的模式,它会被提取为实体。
这使得该提取器:

  • 确定性
  • 快速
  • 极其精确(当模式定义良好时)

为什么需要它?

用于以下类型的实体:

  • 遵循固定格式
  • 是数值型或其他结构化的
  • 不需要机器学习的泛化能力

典型示例:

  • 电话号码
  • 电子邮件地址
  • 订单 ID
  • 日期
  • 邮政编码

为此类模式训练机器学习模型往往是大材小用。

YAML 配置示例

version: "3.1"

nlu:
  - regex: phone_number
    examples: |
      - abc@gmail.com
      - xyz@gmail.com

Pipeline 配置

pipeline:
  - name: WhitespaceTokenizer
  - name: RegexEntityExtractor

内部工作原理

  1. 获取原始用户消息。
  2. 遍历 YAML 文件中定义的每个正则表达式模式。
  3. 将模式应用于文本。
  4. 若找到匹配:
    • 提取匹配的子字符串。
    • 将其标记为实体。
    • 记录起始和结束字符索引。

示例

用户消息:

My phone number is 9876543210

提取的实体:

{
  "entity": "phone_number",
  "value": "9876543210",
  "start": 19,
  "end": 29
}

与 EntitySynonymMapper 结合使用

  • RegexEntityExtractor 提取原始实体。
  • EntitySynonymMapper 将其规范化为标准值。

这种组合提供了:

  • 高精度
  • 一致性
  • 干净的下游数据

何时应使用 RegexEntityExtractor?

  • 实体格式可预测时。
  • 精度比召回更重要时。
  • 想要降低机器学习复杂度时。
  • 需要确定性行为时。

下一个主题

我们将探讨 CRFEntityExtractor,其中实体是通过统计学习而不是显式匹配得到的。

Back to Blog

相关文章

阅读更多 »