You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rasa实体提取异常求助:RegexEntityExtractor识别结果不符合预期

问题解决方法

核心问题分析

输入「Boston High School」时,RegexEntityExtractor会优先匹配lookup表中的「Boston」并标记为location实体,而DIETClassifier虽能正确识别整个短语为highschool,但受管道顺序影响,实体结果被前者覆盖。此外,use_word_boundaries=True的配置让RegexEntityExtractor仅匹配独立的城市词,无法区分城市是作为学校名称一部分还是独立地址的场景。

具体解决方案

1. 调整管道组件顺序,让DIET优先识别实体

将DIETClassifier移至RegexEntityExtractor之前,利用DIET的上下文理解能力优先处理实体,避免规则匹配干扰上下文相关的实体识别。修改后的pipeline配置如下:

pipeline: 
  - name: WhitespaceTokenizer
  - name: RegexFeaturizer
  - name: LexicalSyntacticFeaturizer
  - name: CountVectorsFeaturizer
  - name: CountVectorsFeaturizer
    analyzer: char_wb
    min_ngram: 1
    max_ngram: 4
  - name: DIETClassifier
    epochs: 100
    constrain_similarities: true
  - name: RegexEntityExtractor
    case_sensitive: False
    use_lookup_tables: True
    use_regexes: False
    use_word_boundaries: True
    overwrite_entities: false  # 禁止覆盖已识别的实体
  - name: EntitySynonymMapper
  - name: ResponseSelector
    epochs: 100
    constrain_similarities: true
  - name: FallbackClassifier
    threshold: 0.3
    ambiguity_threshold: 0.1

2. 禁止RegexEntityExtractor覆盖已识别实体

添加overwrite_entities: false配置,确保Regex匹配到的location不会覆盖DIET已经识别的highschool实体。

3. 优化lookup表的匹配规则

针对location的lookup表,添加负向断言的正则规则,排除城市名后紧跟学校相关词汇的情况。例如,在NLU配置中新增location专属正则:

- regex: location_exclude_school
  examples: |
    - \b(Boston)\b(?! High School)
    - \b(Georgia)\b(?! High School|city school)

同时将RegexEntityExtractor的use_regexes设为True,启用自定义正则过滤误匹配场景。

4. 补充训练数据强化模型区分能力

在NLU.yml的provide_details意图中添加更多对比示例,让模型明确区分城市作为独立地址和作为学校名称一部分的场景:

- intent: provide_details
  examples: |
    - [Boston](location) is a city
    - [Boston High School](highschool) is a school
    - [Georgia](location) is a state
    - [Georgia city school](highschool) is a school

内容的提问来源于stack exchange,提问作者Yash Patel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 13:22:13