【问题标题】:How do I handle the special character ‘/’ in rasa?如何处理 rasa 中的特殊字符“/”?
【发布时间】:2020-04-29 06:53:23
【问题描述】:

例如,以下句子:“嗨,下午好,你好吗”。这个笑话的意图是“打招呼”。当我请求“模型/解析”的 API 时,它将返回正确的意图和实体。但是当我在这句话前面加上特殊字符'/',比如:“/hi good horse you how are you doing”时,'model/parse'返回的意图是'/ hi good please how are you doing'而不是“问候”。我看了rasa的源码,如下:

特殊字符'/'怎么处理才能兼顾源码的RegexInterpreter,我举这个例子?最好不修改源码就解决。请帮助我,谢谢。

回答:

我想同时实现以下三个功能:

  1. 当 message.text = '/greet {"people": "tom"}':

‘model/parse’返回的实际结果如下:

 {
        "text": "/ greet {\" people \ ": \" tom \ "}",
        "intent": {
            "name": "greet",
            "confidence": 1.0
        },
        "intent_ranking": [
            {
                "name": "greet",
                "confidence": 1.0
            }
        ],
        "entities": [
            {
                "entity": "people",
                "start": 6,
                "end": 22,
                "value": "tom"
            }
        ]
    }

2,当 message.text = '嗨,汤姆,下午好'

‘model/parse’返回的实际结果如下:

{
    "text": "Hi Tom, good afternoon",
    "intent": {
        "name": "greet",
        "confidence": 0.923
    },
    "intent_ranking": [
        {
            "name": "greet",
            "confidence": 0.923
        }
    ],
    "entities": [
        {
            "entity": "people",
            "start": 2,
            "end": 5,
            "value": "tom",
            "confidence": 0.8433478958,
            "extractor": "CRFEntityExtractor"
        }
    ]
}

3,当 message.text = '/嗨汤姆,下午好'

‘model/parse’返回的实际结果如下(这不是我想要的):

{
    "text": "/ Hi Tom, good afternoon",
    "intent": {
        "name": "Hi Tom, good afternoon",
        "confidence": 1.0
    },
    "intent_ranking": [
        {
            "name": "Hi Tom, good afternoon",
            "confidence": 1.0
        }
    ],
    "entities": []
}

但我期望的结果如下:

{
    "text": "Hi Tom, good afternoon",
    "intent": {
        "name": "greet",
        "confidence": 0.923
    },
    "intent_ranking": [
        {
            "name": "greet",
            "confidence": 0.923
        }
    ],
    "entities": [
        {
            "entity": "people",
            "start": 2,
            "end": 5,
            "value": "tom",
            "confidence": 0.8433478958,
            "extractor": "CRFEntityExtractor"
        }
    ]
}

注意第三个和第二个区别是第三个message.text只是在开头加了'/'

那么,有没有一种方法可以很好的解决这个问题,同时满足以上三种情况呢?

【问题讨论】:

  • 你想让用户无法直接使用/触发意图吗?仅当/ 位于用户消息的开头时才会发生这种情况,而不是在消息的后面。
  • 嗨,梅琳达。由于回复内容太长,我将回复内容添加到原问题中,您可以从'answer to'开始

标签: rasa-nlu rasa-core rasa


【解决方案1】:

/ 在用户消息开头的存在是直接触发意图的设置方式。从您给出的示例中,它看起来不像在真实用户情况下经常发生(如果有的话)。也就是说,如果您确实想确保只有实际意图可以使用/ 触发,您可以创建一个custom component,如果它后面没有在您的训练中已经存在的意图,则它会剥离任何前导/数据。

但是,在进行这项工作之前,我建议您检查一下这种情况实际发生的频率。

【讨论】:

  • 非常感谢。使用自定义 NLU 组件似乎是不可行的。因为 rasa.core.processor._parse_message 是在调用 NLU Components 之前执行的。
猜你喜欢
  • 2010-11-19
  • 2013-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多