【发布时间】:2017-04-24 16:48:44
【问题描述】:
我正在使用 MS Bot 框架和节点 js 中的 LUIS 创建一个聊天机器人。我在 LUIS 中创建了两个名为“Book”和“Pending”的意图以及一个名为“Annual Leave”的实体。我已将 LUIS URL 添加到我的聊天机器人代码中,当我在控制台中对其进行测试时,我发现某些话语得到了响应,而有些则没有。
例如,当我说“我如何查看剩余的年假?”时,我收到的回复是“您可以在此处找到剩余的 A/L”。但是当我说“如何查看我的待处理年假?”时,我没有得到任何回复。
我对工作话语的 Git Bash 响应
ChatConnector:收到消息。
session.beginDialog(/)
/ - session.sendBatch() 发送 0 条消息
/ - IntentDialog.matches(待定)
/ - 瀑布()第 1 步,共 1 步
/ - session.beginDialog(BotBuilder:Prompts)
.Prompts.text - session.send()
.Prompts.text - session.sendBatch() 发送 1 条消息
我对无效话语的 Git Bash 响应
ChatConnector:收到消息。
.Prompts.text - session.endDialogWithResult()
/ - session.endDialogWithResult()
session.sendBatch() 发送 0 条消息
但是,当我在 LUIS 上测试完全相同的话语时,它会检测到具有高置信度分数的意图和实体。
这发生在很多话语中。我不知道是什么导致了这个问题。
我的聊天机器人代码
var restify = require('restify');
var builder = require('botbuilder');
//=========================================================
// Bot Setup
//=========================================================
// Setup Restify Server
var server = restify.createServer();
server.listen(process.env.port || process.env.PORT || 3978, function () {
console.log('%s listening to %s', server.name, server.url);
});
// Create chat bot
var connector = new builder.ChatConnector({
appId: 'MY_APP_ID',
appPassword: 'MY_APP_PASSWORD'
});
var bot = new builder.UniversalBot(connector);
server.post('/api/messages', connector.listen());
server.get('/', restify.serveStatic({
directory: __dirname,
default: '/index.html'
}));
//=========================================================
// Bots Dialogs
//=========================================================
var recognizer = new builder.LuisRecognizer('MY_LUIS_URL');
var intents = new builder.IntentDialog({ recognizers: [recognizer] });
bot.dialog('/', intents);
intents.matches('Book', [
function (session, args, next) {
var task = builder.EntityRecognizer.findEntity(args.entities, 'Annual Leave');
builder.Prompts.text(session, "You can book your A/L here.");
}
]),
intents.matches('Pending', [
function (session, args, next) {
var task = builder.EntityRecognizer.findEntity(args.entities, 'Annual Leave');
builder.Prompts.text(session, "You can find your remaining A/L here.");
}
]);
【问题讨论】:
-
嗨,Anish,您最近是否重新训练和更新了您的模型? (或者至少在您的示例话语之后?)
-
嗨@StevenG.,我已经在我的示例话语之后训练了它们,现在我再次训练了它们,我上面提供的示例现在可以工作,但某些新的话语不是。例如,我说“我想知道我还剩多少假期”,但没有得到任何回应,但 LUIS 以 0.95 的置信度正确回答。我已经用大约 30 句话训练了它。我应该用每一种可能性来训练它吗?
-
嗯,LUIS 是……一开始并不聪明,但你不应该对每一种可能性都进行训练。我应该在我最初的评论中问你这个问题,但你已经重新发布了你的模型,对吗?
-
是的,每次训练时都会重新发布。那么我应该在这里采取什么方法呢?用我遇到的每一个失败的话语来训练它?或者 LUIS 最终会学会吗?
-
请看下面 Pavel 的回答;我相信他的第二点是正确的。我猜想与你的机器人交谈它会识别第一个话语,然后就不起作用了?那是因为你没有打电话给
session.endDialog()或session.endConversation()。没有这些,你的机器人就会卡在当前的对话框中。
标签: node.js botframework azure-language-understanding