在watson-developer-cloud软件包中使用Watson Q& A服务时如何获得完整的答案?

时间:2015-07-03 07:53:00

标签: ibm-watson

我使用watson-developer-cloud npm模块调用IBM Watson Question and Answer 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": []
}

如何获得完整的答案文本?

2 个答案:

答案 0 :(得分:4)

TL; DR 当您提交问题时,请在questionText对象中发布question。在该question对象中,添加formattedAnswer并将其设置为true

e.g。

{
    "question" : {
        "questionText" : "This is your question",
        "formattedAnswer" : true,
        ...

使用此选项时,您可以检索返回答案的完整格式化HTML,如下所示:

response[0].question.answers.forEach(function(answer, index) {
  console.log(answer.formattedText);
})

您需要从HTML中解析您想要向用户显示的必要信息。

(API doc ref:https://www.ibm.com/smarterplanet/us/en/ibmwatson/developercloud/apis/#!/question-and-answer/question

<强>背景

Watson QA API返回其认为与您的问题匹配的文档部分的ID和标题。那是你看到的文字回来了。它的格式为<ID> - <TITLE>

此格式适用于机器对机器的使用,例如,如果您计划从某个地方查找答案。

但是如果你想要一个可以显示给用户的答案,那么formattedAnswer标志会为你提供。它告诉API返回该部分文档的内容,而不仅仅是ID和标题。

API响应有效负载还包括支持证据,使Watson对其返回的答案有信心。您也可以在那里找到答案的文档部分 - 但我建议最好不要依赖它。如果你想要答案的内容,那么formattedAnswer标志就是记录在案的,可靠的,将永远存在的方式。

在您的具体情况下,当您使用不允许您设置此包装的包装库时,我想这会留下返回支持证据而不是答案的解决方法,或构建QA的POST请求API自己。

答案 1 :(得分:2)

注意:如果您对医疗保健Watson QA beta语料库提出问题,则可采用以下技术。但是,有些情况下返回的证据和答案不一致。以下内容应被视为使用formattedText选项的解决方法,不应将其视为一种万无一失的方法。

使用watson-developer-cloud软件包的0.9.20版时,您无法在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);
      })
    }
});