在rasa nlu中将新单词识别为意图

时间:2018-05-24 10:38:05

标签: chatbot rasa-nlu

一直在使用rasa nlu为我的聊天机器人分类意图和实体。一切都按预期工作(通过广泛的培训)但是对于实体,它似乎根据单词的确切位置和长度来预测值。这适用于实体有限的情况。但是当机器人需要识别一个单词(其长度不同而且尚未训练,例如新名称)时,它无法检测到。有没有一种方法可以让rasa根据单词的相对位置或更好的方式识别实体,然后插入一个单词列表,这些单词成为特定于实体的域以查找匹配(如LUIS中的短语列表)?

{"q":"i want to buy a Casio SX56"}

{
"project": "default",
"entities": [
    {
        "extractor": "ner_crf",
        "confidence": 0.7043648832678735,
        "end": 26,
        "value": "Casio SX56",
        "entity": "watch",
        "start": 16
    }
],
"intent": {
    "confidence": 0.8835646513829762,
    "name": "buy_watch"
},
"text": "i want to buy a Casio SX56",
"model": "model_20180522-165141",
"intent_ranking": [
    {
        "confidence": 0.8835646513829762,
        "name": "buy_watch"
    },
    {
        "confidence": 0.07072182459497935,
        "name": "greet"
    }       
]
}

但如果卡西欧SX56被Citizen M1取代:

{"q":"i want to buy a Citizen M1"}

{
"project": "default",
"intent": {
    "confidence": 0.8710909096729019,
    "name": "buy_watch"
},
"text": "i want to buy a Citizen M1",
"model": "model_20180522-165141",
"intent_ranking": [
    {
        "confidence": 0.8710909096729019,
        "name": "buy_watch"
    },
    {
        "confidence": 0.07355588750895545,
        "name": "greet"
    }       
]
}

谢谢!

2 个答案:

答案 0 :(得分:1)

确保在使用rasa_nlu进行训练之前,实际添加了每个实体值训练示例。

---对于成功的实体提取,我们需要创建至少2个或更多的上下文培训数据---

添加此例如。在rasa_nlu训练数据中,如果它没有正确提取

"text": "i want to buy a Citizen M1",
"model": "model_20180522-165141",
"intent_ranking": [
    {
        "confidence": 0.8710909096729019,
        "name": "buy_watch"
    },
    {
        "confidence": 0.07355588750895545,
        "name": "greet"
    }       
]

使用短语匹配进行实体提取确实可以在rasa_nlu中使用spacy_sklearn后端管道进行尝试

答案 1 :(得分:0)

我正在寻找的功能是短语匹配器,它允许我在训练模型中添加可能的实体列表。这样,如果弹出任何新名称,我们可以简单地将名称添加到短语列表中,并且模型将能够用所有可能的话语来识别它。虽然这仍处于开发阶段,但很快就会被添加到主人:https://github.com/RasaHQ/rasa_nlu/pull/822