理解 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
内部工作原理
- 获取原始用户消息。
- 遍历 YAML 文件中定义的每个正则表达式模式。
- 将模式应用于文本。
- 若找到匹配:
- 提取匹配的子字符串。
- 将其标记为实体。
- 记录起始和结束字符索引。
示例
用户消息:
My phone number is 9876543210
提取的实体:
{
"entity": "phone_number",
"value": "9876543210",
"start": 19,
"end": 29
}
与 EntitySynonymMapper 结合使用
RegexEntityExtractor提取原始实体。EntitySynonymMapper将其规范化为标准值。
这种组合提供了:
- 高精度
- 一致性
- 干净的下游数据
何时应使用 RegexEntityExtractor?
- 实体格式可预测时。
- 精度比召回更重要时。
- 想要降低机器学习复杂度时。
- 需要确定性行为时。
下一个主题
我们将探讨 CRFEntityExtractor,其中实体是通过统计学习而不是显式匹配得到的。