使用带有 watson-developer-cloud 包的 Watson 问答服务时如何获得完整答案?
How to get the full answers when using the Watson Q&A service with the watson-developer-cloud package?
我正在使用 watson-developer-cloud npm 模块调用 IBM Watson 问答 API。我调用服务的代码如下:
question_and_answer_healthcare.ask({
text: 'What are the benefits of taking aspirin daily?'}, function (err, response) {
if (err)
console.log('error:', err);
else {
console.log(JSON.stringify(response, null, 2));
}
});
在打印的回复中,我得到了一系列答案,其中仅列出了所使用的证据,但没有列出实际答案。这是一个示例答案元素:
{
"id": 0,
"text": "373C41A4A1E374B1BE189D07EF707062 - Taking Aspirin Every Day : Taking Aspirin Every Day : The Basics : What are the benefits of taking aspirin daily?",
"pipeline": "Descriptive,TAO",
"confidence": 0.96595,
"entityTypes": []
}
如何获得完整的答案文本?
TL;DR 当您提交问题时,您 POST 在 question
object 中 questionText
。在那个question
object中,添加formattedAnswer
并将其设置为true
。
例如
{
"question" : {
"questionText" : "This is your question",
"formattedAnswer" : true,
...
使用此选项时,您可以检索 returned 答案的完整格式 HTML,如下所示:
response[0].question.answers.forEach(function(answer, index) {
console.log(answer.formattedText);
})
您需要从 HTML 中解析出您希望向用户显示的必要信息。
(API 文档参考:https://www.ibm.com/smarterplanet/us/en/ibmwatson/developercloud/apis/#!/question-and-answer/question )
背景
Watson QA API 正在 return 处理它认为与您的问题匹配的文档部分的 ID 和标题。这就是您看到的返回的文本。其格式为 <ID> - <TITLE>
。
这种格式适合 machine-to-machine 使用,例如,如果您打算从某个地方查找答案。
但是如果您想要一个可以显示给用户的答案,formattedAnswer
标志可以满足您的要求。它告诉 API 到 return 文档该部分的内容,而不仅仅是 ID 和标题。
API 响应有效负载还包括使 Watson 对其 return 的答案充满信心的支持证据。您通常也可以在那里找到答案的文档部分 - 但我建议最好不要依赖它。如果您想要答案的内容,formattedAnswer
标志是有据可查的、可靠的 will-always-be-there 获取方式。
在您的特定情况下,由于您使用的包装器库不允许您设置它,我想这会给您留下 returning supporting-evidence 的解决方法而不是答案,或自己构建 QA API 的 POST 请求。
注意:如果您的问题是关于 healthcare Watson QA beta 语料库的,则以下技术有效。但是,在某些情况下,返回的证据和答案不一致。以下应被视为使用 formattedText
选项的解决方法,不应将其视为万无一失的方法。
使用 0.9.20 版本的 watson-developer-cloud 包时,您不能在 HTTPS 请求正文中设置任何可选输入。因此,您应该使用以下方法来获得您的答案:
问题的完整答案文本不位于 response[0].question.answers[]
数组中,而是位于证据列表中每个条目的 response[0].question.evidencelist[X].text
属性中。您会在 response[0].question.evidencelist[X].value
字段中找到相关的置信度。为了在您的场景中检索这些值,您可以像下面的完整示例一样解析它:
var watson = require('watson-developer-cloud');
var question_and_answer = watson.question_and_answer({
version: 'v1',
dataset: 'healthcare',
username: 'YOUR USERNAME'
password: 'YOUR PASSWORD'
});
question_and_answer.ask({
text: 'What are the benefits of taking aspirin daily?'}, function (err, response) {
if (err)
console.log('error:', err);
else {
// Print the answer with the highest confidence
console.log(response[0].question.evidencelist[0].text);
//Print all returned answers
response[0].question.evidencelist.forEach(function(answer, index) {
console.log(index, '. ', answer.text);
})
}
});
我正在使用 watson-developer-cloud npm 模块调用 IBM Watson 问答 API。我调用服务的代码如下:
question_and_answer_healthcare.ask({
text: 'What are the benefits of taking aspirin daily?'}, function (err, response) {
if (err)
console.log('error:', err);
else {
console.log(JSON.stringify(response, null, 2));
}
});
在打印的回复中,我得到了一系列答案,其中仅列出了所使用的证据,但没有列出实际答案。这是一个示例答案元素:
{
"id": 0,
"text": "373C41A4A1E374B1BE189D07EF707062 - Taking Aspirin Every Day : Taking Aspirin Every Day : The Basics : What are the benefits of taking aspirin daily?",
"pipeline": "Descriptive,TAO",
"confidence": 0.96595,
"entityTypes": []
}
如何获得完整的答案文本?
TL;DR 当您提交问题时,您 POST 在 question
object 中 questionText
。在那个question
object中,添加formattedAnswer
并将其设置为true
。
例如
{
"question" : {
"questionText" : "This is your question",
"formattedAnswer" : true,
...
使用此选项时,您可以检索 returned 答案的完整格式 HTML,如下所示:
response[0].question.answers.forEach(function(answer, index) {
console.log(answer.formattedText);
})
您需要从 HTML 中解析出您希望向用户显示的必要信息。
(API 文档参考:https://www.ibm.com/smarterplanet/us/en/ibmwatson/developercloud/apis/#!/question-and-answer/question )
背景
Watson QA API 正在 return 处理它认为与您的问题匹配的文档部分的 ID 和标题。这就是您看到的返回的文本。其格式为 <ID> - <TITLE>
。
这种格式适合 machine-to-machine 使用,例如,如果您打算从某个地方查找答案。
但是如果您想要一个可以显示给用户的答案,formattedAnswer
标志可以满足您的要求。它告诉 API 到 return 文档该部分的内容,而不仅仅是 ID 和标题。
API 响应有效负载还包括使 Watson 对其 return 的答案充满信心的支持证据。您通常也可以在那里找到答案的文档部分 - 但我建议最好不要依赖它。如果您想要答案的内容,formattedAnswer
标志是有据可查的、可靠的 will-always-be-there 获取方式。
在您的特定情况下,由于您使用的包装器库不允许您设置它,我想这会给您留下 returning supporting-evidence 的解决方法而不是答案,或自己构建 QA API 的 POST 请求。
注意:如果您的问题是关于 healthcare Watson QA beta 语料库的,则以下技术有效。但是,在某些情况下,返回的证据和答案不一致。以下应被视为使用 formattedText
选项的解决方法,不应将其视为万无一失的方法。
使用 0.9.20 版本的 watson-developer-cloud 包时,您不能在 HTTPS 请求正文中设置任何可选输入。因此,您应该使用以下方法来获得您的答案:
问题的完整答案文本不位于 response[0].question.answers[]
数组中,而是位于证据列表中每个条目的 response[0].question.evidencelist[X].text
属性中。您会在 response[0].question.evidencelist[X].value
字段中找到相关的置信度。为了在您的场景中检索这些值,您可以像下面的完整示例一样解析它:
var watson = require('watson-developer-cloud');
var question_and_answer = watson.question_and_answer({
version: 'v1',
dataset: 'healthcare',
username: 'YOUR USERNAME'
password: 'YOUR PASSWORD'
});
question_and_answer.ask({
text: 'What are the benefits of taking aspirin daily?'}, function (err, response) {
if (err)
console.log('error:', err);
else {
// Print the answer with the highest confidence
console.log(response[0].question.evidencelist[0].text);
//Print all returned answers
response[0].question.evidencelist.forEach(function(answer, index) {
console.log(index, '. ', answer.text);
})
}
});