我有一个场景,我必须训练LUIS模型,以了解“我感兴趣”和“我不感兴趣”之间的区别。如何在不直接提及Intents中的话语的情况下实现它。
答案 0 :(得分:0)
您可以尝试使用其他认知服务端点来检测sentiment
。看看:http://www.pveller.com/smarter-conversations-part-1-sentiment/
答案 1 :(得分:0)
您在询问Sentiment Analysis。根据我的理解,如果不训练正面和负面的意图,就不可能训练LUIS模型来破译正面或负面的情绪。正如Pavel所说,还有另一个微软提供的服务,Text Analytics API。
此API提供多种服务,但在这种情况下,将采用您提供的字符串,测量情绪,并将测量值(id
)返回为0到1之间的数字。数字接近0比接近1的那些更负。数字越大,字符串越正。要包含Text Analytics,我已使用Promise
进行API调用:
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"
属性,该属性接受一组对象。您既可以传入整个段落,也可以将其缩小到逐句分隔。但是,我会把这个决定(和设计)留给你:)
在我的瀑布内部,我会调用此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.");
}
})