训练 LUIS 以了解"I am interested"和"I am not interested"之间的区别



我有一个方案,我必须训练 LUIS 模型以了解"我感兴趣"和"我不感兴趣"之间的区别。如何在不直接提及 Intents 中的话语的情况下实现它。

可以尝试使用另一个认知服务终结点来检测sentiment。看一看:http://www.pveller.com/smarter-conversations-part-1-sentiment/

您正在询问情绪分析。据我了解,如果不训练积极和消极的意图,就不可能训练 LUIS 模型来破译积极或消极的情绪。正如 Pavel 所指出的那样,还有另一种Microsoft提供的服务,即文本分析 API。

此 API 提供多种服务,但在这种情况下,将采用您提供的字符串,测量情绪,并以 0 到 1 之间的数字返回测量值(按id)。接近 0 的数字比接近 1 的数字更负。数字越大,字符串越正。为了包含文本分析,我为 API 调用使用了Promise

let sentimentAnalysis = function (string) {
let payload = {
"documents": [{
"id": "1",
"text": string ? string : 'No string? This is sad...'
}]
}
return new Promise(function(resolve, reject) {
request.post(
'https://westus.api.cognitive.microsoft.com/text/analytics/v2.0/sentiment/', 
{
"headers": {
"Ocp-Apim-Subscription-Key": process.env.TEXT_ANALYTICS_KEY,
"Content-Type": "application/json",
"Accept": "application/json",
},
"body": JSON.stringify(payload)
}, (err, res, body) => {
if (err) {
return reject(err);
} else {
return resolve(JSON.parse(res.body));
}
}
)
})
}

请注意,有效负载包含一个"documents"属性,该属性采用对象数组。您可以传入整个段落,也可以将其缩小到逐句分隔。但是,我将把这个决定(和设计)留给你:)

然而,官方声明确实表示,将字符串拆分为句子将改善情感分析(对Lowellkitchen在2016.12.9的评论的回应)。

在我的瀑布中,我将称之为Promise,并使用结果来确定我的聊天机器人的响应。

sentimentAnalysis(results.response).then(analyticsResponse => {
session.send(`You said "${results.response}"!`);
let score = Math.round(analyticsResponse["documents"][0]["score"] * 100) / 100;
session.send(`The score of that utterance is ${score}`);
if(score > 0.7) {
session.endDialog("Wow that's positive!");
} else if (score > 0.4) {
session.endDialog("Wow that's neutral-ish...");
} else {
session.endDialog("Wow that is not positive.");
}
})

GitHub

最新更新