例如,我想了解属于同一实体的两种产品的重量和价格,称为产品
惠普笔记本电脑和价格联想笔记本电脑的重量。在上面的话语中,我需要跟踪两个不同的问题。
1)惠普笔记本电脑的重量
其中实体是产品 - hp,意图是权重。
2)联想笔记本电脑的价格
其中实体是产品 - hp和意图是价格。
我如何在LUIS中处理此问题?
我找到了以下链接
https://blogs.msdn.microsoft.com/benjaminperkins/2017/02/15/how-i-improved-my-chatbot/
有人可以使用节点js指导如何执行此操作。
答案 0 :(得分:0)
为了处理您的方案,您可以创建一个LUIS应用程序,然后为2个意图price
和weight
训练它。要了解如何训练意图,请查看create new intent in LUIS。您需要create an entity product
,然后使用多个话语训练LUIS应用。
要在node.js中使用LUIS,您可以查看recognize luis intent in node js文档。
附上示例luis培训的截图。
您还可以尝试使用词组列表来实现实体,因为这有助于提供更多实体建议。
Weight
意图训练话语
Price
意图训练话语
示例训练显示未经训练的话语的正确意图和实体
答案 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模型的清洁和语义。