代码之家  ›  专栏  ›  技术社区  ›  Deven

在rasa-nlu中检测同义词

  •  0
  • Deven  · 技术社区  · 6 年前

    我有一个工作装置 rasa_nlu ,在macOS High Sierra上运行Python3.6.5。我能让示例教程正常工作。我在使用同义词时遇到了麻烦。

    first-model.md .

    ## intent:select
    - what is the [max](operator) rating?
    
    ## synonym:max
    - best
    - highest
    - maximum
    

    拉萨 正确检测问题的意图和实体,如 what is the max rating?

    {'intent': {'name': 'select', 'confidence': 0.9542820453643799},
     'entities': [{'start': 12,
       'end': 15,
       'value': 'max',
       'entity': 'operator',
       'confidence': 0.8146240434922525,
       'extractor': 'ner_crf'}],
     'intent_ranking': [{'name': 'select', 'confidence': 0.9542820453643799},
      {'name': 'identity', 'confidence': 0.036332450807094574}],
     'text': 'what is the max rating?'}
    

    但是,当我在问题中使用同义词时,它不会检测到实体。例如, what is the best rating?

    {'intent': {'name': 'select', 'confidence': 0.9382177591323853},
     'entities': [],
     'intent_ranking': [{'name': 'select', 'confidence': 0.9382177591323853},
      {'name': 'identity', 'confidence': 0.10226328670978546}],
     'text': 'what is the best rating?'}
    

    别跟同义词掷骰子。我都试过了 spacy_sklearn tensorflow_embedding

    非常感谢你的指点。

    更新:

    ## intent:select
    - what is the [max](operator) rating?
    - what is the [highest](operator:max) rating?
    - what is the [maximum](operator:max) rating?
    - what is the [best](operator:max) rating?
    

    虽然它改善了情况,但并不能完全解决问题。现在系统返回每个同义词(例如。 highest , maximum , best max ). 例如,如果我问 ,我想 最大值 作为实体值,而不是 . 不幸的是,系统返回 最好的 .

    {'intent': {'name': 'select', 'confidence': 0.9736428260803223},
     'entities': [{'start': 12,
       'end': 16,
       'value': 'best',
       'entity': 'operator',
       'confidence': 0.9105035376516767,
       'extractor': 'ner_crf'}],
     'intent_ranking': [{'name': 'select', 'confidence': 0.9736428260803223},
      {'name': 'identity', 'confidence': 0.0}],
     'text': 'what is the best rating?'}
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   Deven    6 年前

    我偶然发现了一个适用于我的用例的组合。

    1. 使用 json 格式化而不是 markdown
    2. 使用 spacy_sklearn 管道而不是 tensorflow_embedding (例如,见下文)

    我相信有一个很好的解释,为什么这种组合有效,而其他人没有,但我还没有掌握。或者,可能需要其他配置才能使其他组合工作。

    干杯。

    {
        "rasa_nlu_data": {
            "common_examples": [
                  {
                    "text": "what is the best rating?",
                    "intent": "select",
                    "entities": [
                      {
                        "start": 12,
                        "end": 16,
                        "value": "max",
                        "entity": "operator"
                      }
                    ]
                  },
                  {
                    "text": "what is the max rating?",
                    "intent": "select",
                    "entities": [
                      {
                        "start": 12,
                        "end": 15,
                        "value": "max",
                        "entity": "operator"
                      }
                    ]
                  },
                  {
                    "text": "what is the highest rating?",
                    "intent": "select",
                    "entities": [
                      {
                        "start": 12,
                        "end": 19,
                        "value": "max",
                        "entity": "operator"
                      }
                    ]
                  }
            ],
            "regex_features" : [],
            "entity_synonyms": [
                {
                    "entity": "operator",
                    "value": "max",
                    "synonyms": ["maximum", "most", "highest", "biggest", "best"]
                }
            ]
        }
    }
    

    这是我使用的管道(感谢@Caleb建议也包括它)。

    language: "en_core_web_md"
    pipeline: "spacy_sklearn"
    
        2
  •  0
  •   Caleb Keller    6 年前

    请看上面的便条 this page

    请注意,使用上述格式添加同义词不会改进这些实体的模型分类。实体必须正确分类,然后才能用同义词值替换它们。

    这意味着您需要在训练数据中包含这些其他单词中的一些,以便实体分类器学习将这些单词正确分类为该实体。一旦这个词被正确分类,同义词就可以进入并规范化它。

    也可以使用诸如 chatito