如何在单个话语中识别和处理多个意图

时间:2018-06-13 09:33:25

标签: node.js dialog botframework

例如,我想了解属于同一实体的两种产品的重量和价格,称为产品

惠普笔记本电脑和价格联想笔记本电脑的重量。

在上面的话语中,我需要跟踪两个不同的问题。

1)惠普笔记本电脑的重量

其中实体是产品 - hp,意图是权重。

2)联想笔记本电脑的价格

其中实体是产品 - hp和意图是价格。

我如何在LUIS中处理此问题?

我找到了以下链接

https://blogs.msdn.microsoft.com/benjaminperkins/2017/02/15/how-i-improved-my-chatbot/

有人可以使用节点js指导如何执行此操作。

2 个答案:

答案 0 :(得分:0)

为了处理您的方案,您可以创建一个LUIS应用程序,然后为2个意图priceweight训练它。要了解如何训练意图,请查看create new intent in LUIS。您需要create an entity product,然后使用多个话语训练LUIS应用。

要在node.js中使用LUIS,您可以查看recognize luis intent in node js文档。

更新

附上示例luis培训的截图。

您还可以尝试使用词组列表来实现实体,因为这有助于提供更多实体建议。 enter image description here

Weight意图训练话语

enter image description here

Price意图训练话语

enter image description here

示例训练显示未经训练的话语的正确意图和实体

enter image description here

答案 1 :(得分:0)

您可以尝试将您的话语基于简单的关键字映射(例如and),或者将https://github.com/NaturalNode/natural等NPL包用于多个话语。然后针对LUIS发出几个请求以获取意图和实体。

E.G。

bot.dialog('multipIntents', [
    (session, args, next) => {
        let utterances = session.message.text.toLowerCase().split('and');
        session.conversationData.intents = [];
        for (let u of utterances) {
            console.log(u);
            const luisAppUrl = 'https://westus.api.cognitive.microsoft.com/luis/v2.0/apps/16c5d360-63e6-4750-824d-e8051140cade?subscription-key=0b3c2b6dde5447a393234fc592235d67&verbose=true&timezoneOffset=0&q=';
            builder.LuisRecognizer.recognize(u, luisAppUrl, ((err, intents, entities) => {
                if (!err) {
                    let entity;
                    switch (intents[0].intent) {
                        case 'Calendar.Add':
                            if (entities) {
                                entity = builder.EntityRecognizer.findEntity(entities, 'builtin.datetimeV2.date');
                            } 
                            session.conversationData.intents.push({
                                intent: 'Calendar.Add',
                                entities: [entity]
                            })
                            break;
                        case 'Calendar.Find':
                            if (entities) {
                                entity = builder.EntityRecognizer.findEntity(entities, 'builtin.datetimeV2.date');
                            }
                            session.conversationData.intents.push({
                                intent: 'Calendar.Find',
                                entities: [entity]
                            })
                            break;
                    }
                }
            }))
        }
    //further todo
    }
])

为此,我们可以保持LUIS模型的清洁和语义。