如何处理rasa中的特殊字符“ /”?

时间:2020-04-29 06:53:23

标签: rasa-nlu rasa-core rasa

例如,以下句子:“嗨,下午好,你好吗”。这个笑话的目的是“打招呼”。当我请求“模型/解析”的API时,它将返回正确的意图和实体。但是,当我在这句话前添加特殊字符“ /”时,例如:“ /嗨,下午好,你好吗”,“ model / parse”返回的意图是“ /嗨,下午好,你好吗”。而不是“打招呼”。我阅读了rasa的源代码,如下所示: enter image description here

在考虑源代码的RegexInterpreter的情况下,如何处理特殊字符“ /”,我引用了此示例?最好在不修改源代码的情况下解决它。请帮助我,谢谢。

答案:

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

  1. 当message.text ='/问候{“ people”:“ tom”}':

“模型/解析”返回的实际结果如下:

 {
        "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 =“汤姆,你好,下午好”

“模型/解析”返回的实际结果如下:

{
    "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 ='/汤姆,嗨,下午好'

“模型/解析”返回的实际结果如下(这不是我想要的):

{
    "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仅在开头添加'/'

因此,有没有一种方法可以很好地解决此问题,并且可以同时满足上述三种情况?

1 个答案:

答案 0 :(得分:0)

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

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