内容


在 Bluemix 上使用 IBM Watson 创建自然语言问答系统

Comments

IBM Watson 简介

认知存在于人类所做的几乎任何活动中,比如语言理解、感觉、判断、运动技巧、学习、空间处理和社交行为。我们越来越期望所使用的机器能表现出相同的认知行为。IBM Watson 代表着向认知系统(一个新的计算时代)进军的第一步。除了使用编程计算,Watson 拥有 3 大让它变得真正独一无二的功能:

  • 自然语言处理
  • 假设生成和评估
  • 动态学习

IBM Watson 是一种自然语言问答系统,它不使用准备好的答案,而是基于它获取的知识来确定答案和相关的置信度。

IBM Watson 通过前所未有的独特方式将这 3 种强大功能结合在一起,从根本上改变了企业着眼于快速解决问题的方式。IBM Watson 是一种自然语言问答系统,它不使用准备好的答案,而是基于它获取的知识来确定答案和相关的置信度。

Watson 鼓舞着许多开发人员构想出新的创新性应用程序理念,使用认知元素向用户提供更好、更个性化的体验。受 Watson 支持的应用程序所能做的不仅仅是简单的数据处理,而且可以找到关联,建立假设,并从结果中不断学习。本文将使用 Watson Question and Answer 技术和 Watson 所公开的 Question and Answer API (QAAPI) 构建一个简单的演示应用程序 Watson Films。

备注:要完整地运行本文中的 “Watson Films” 应用程序,必须能够访问一个 IBM Watson 实例。要访问一个 IBM Watson 实例,请参阅 Watson Developer Cloud Enterprise(PDF 文件) 和/或申请加入 Watson Ecosystem 计划。为了帮助您理解 Watson 的输入和输出,我们在 DevOps Services 项目中的 watson_films_dw/samples 文件夹下提供了 Watson QAAPI 请求和响应 JSON 示例。感谢大家的理解!

该应用程序将在 IBM Bluemix™ 上托管和管理,Bluemix 是一个基于 Cloud Foundry 的 PaaS,用于构建、管理和运行各种类型的应用程序(Web、移动、大数据和智能设备)。该应用程序的代码将通过 加以管理。

认知系统的特征

认知系统:

  • 操控人类语言和理解的复杂性
  • 获取并处理海量的结构化和非结构化(大)数据
  • 生成并评估无数的可能性
  • 仅基于相关的证据来权衡和评估响应
  • 提供特定于情景的建议、洞察和指导
  • 在每次迭代和交互中不断改善知识和学习
  • 支持在影响点制定决策
  • 可与任务成比例地扩展

这些系统应用类似人类的特征来传达和处理想法。与数字计算的内在优势相结合时,它们可以更高的准确性和弹性在更大规模上解决问题。Watson 是认知系统的一个例子。它可梳理人类语言并在文本消息之间进行推断,具有与人类相似的准确性,但速度和范围比任何人都大得多。基于规则的方法需要几乎无限数量的规则,用以捕获我们可能在语言中遇到的每种情形。

图 1. 认知系统的关键特征
认知系统的关键特征图
认知系统的关键特征图

准备构建 Watson Films

Watson Films 应用程序是对如何构建一个应用程序来使用 Watson QAAPI 与 Watson 进行交互的简单演示。这个应用程序允许用户询问有关电影的问题,尤其是美国电影协会 100 大美国电影,以及一般性的电影制作问题。

图 2. Watson Films 界面
Watson Films 应用程序用户界面的屏幕截图
Watson Films 应用程序的用户界面屏幕截图的更大版本

在回答用户问题之前,IBM Watson 必须拥有一个包含信息的知识库,以便可从中推断出正确的答案。对于此应用程序,我们使用 Wikipedia 上提供的有关 美国电影协会 评选出的有史以来 100 部最伟大美国电影清单的内容。这些来自 Wikipedia 的内容为 HTML 格式。我们还使用来自柯达的 The Essential Reference Guide for Filmmakers 的内容,这些内容也采用 PDF 格式。

获取 Watson Films 代码

  • 可以首先试用一下!查阅 Watson Films 演示
  • 要获取或查看 Watson Films 代码,可单击前面的 Get or view the code 按钮,或者结合使用 IBM DevOps Services 和 Web IDE。因为此项目包含 JavaScript、HTML 和 CSS 代码,所以在创建项目分支后,惟一需要查看或编辑的可能只有 Web IDE。
  • 要将此项目下载到您的本地 local Eclipse IDE(已安装 Nodeclipse 插件)中并进行设置,请按照以下 说明 操作。
  • 也可创建 “Watson Films” 项目的分支,基于此项目的内容而创建您自己的 DevOps Services 项目。

关于 Watson Films 代码

Watson Films 演示应用程序使用 Express 构建于 Node.js 之上。我们还使用 Bootstrap 和 Slick Carousel 构造用户界面并设置其样式。

以下简短概述了使用的技术:

  • IBM Watson
  • Watson QAAPI – Watson 的一个 RESTful 界面,支持用户询问问题并从 Watson 接收答案。
  • Node.js - 一个构建于 Chrome 的 JavaScript 运行时之上的轻量级平台,用于轻松地构建快速、可扩展的服务器端网络应用程序
  • Express.js - 一个面向 Node 的 Web 应用程序框架
  • Bootstrap.js – 一个简单且响应灵敏的前端 Web 开发框架
  • jQuery - 一个快速、小型、功能丰富的 JavaScript 库
  • Ladda – 一个响应灵敏的按钮工具包
  • Slick Carousel – 一个 JavaScript carousel。Bootstrap 也有一个 carousel,但我们希望尝试一下 Slick!

关于 Watson Films 架构

Watson Films 架构由以下层和关联的组件组成:

  • 视图:一个响应灵敏的前端用户界面,主要使用 HTML5、CSS3、Bootstrap、jQuery 和其他 JavaScript 客户端插件构建。此层中的视图 组件允许用户通过一个输入点向 Watson 提问。
  • 控制器:一个基于 Node.js 和 Express 的中间件和控制器层,向 视图 组件公开 RESTful 业务 API。这个 REST API 通过调用 Watson QAAPI 并处理响应来与 Watson 进行交互。可扩展它来执行其他业务操作,包括与其他认知服务和第三方服务集成。
  • 认知后端:IBM Watson 消化吸收了有关电影和电影制作的内容。Watson 提供了一个 RESTful 接口 QAAPI。这个 API 使开发人员能够向 Watson 询问有关电影和电影制作的问题,并接收答案。答案包括各种不同的信息,比如答案文本、Watson 的置信度和支持该答案的证据。
  • 平台和 DevOps:Watson Films 应用程序将部署在 IBM Bluemix 上。它还使用 DevOps Services 来管理代码。DevOps Services 负责管理 Watson Films 源代码及其向 Bluemix 的部署。Bluemix 托管着响应灵敏的前端用户界面和 Node.js 中间层,而 IBM Watson 及其 QAAPI 托管在 IBM Watson 开发者云中。
图 3. Watson Films 架构
Watson Films 应用程序架构图
Watson Films 应用程序架构图

在代码与架构之间建立映射

评审 WatsonFilms 代码时,您会在 watson_films_dw 项目根目录下看到少量文件和目录。这些文件和文件夹与 架构组件 具有直接关系。

  • public/ – 此目录包含所有 Watson Films 客户端 HTML、CSS 和 JavaScript。它由 Node.js 提供支持。
  • watson/ – 此目录包含我们的 REST API 所使用的逻辑。它使用 Watson QAAPI 直接与 Watson 进行交互。
  • app.js – 此文件启动 Web 服务器,后者托管着我们的 REST API 和所有客户端内容。

使用 Watson Experience Manager 将相关内容摄入到 Watson 中

IBM Watson 提供了一个基于 Web 的工具集,称为 Watson Experience Manager。借助这些工具,您可以:

  • 上传和管理文档
  • 创建和管理知识库
  • 创建培训数据,以向 Watson 传授您的领域知识
  • 使用一个开箱即用的 UI,提交问题并查看返回的答案或回复来测试 Watson
  • 监视和查看使用报告
图 4. Watson Experience Manager
Watson Experience Manager 及其选项的屏幕截图
Watson Experience Manager 及其选项的屏幕截图

Watson 可摄入各种格式的内容,包括 DOCX、DOC、PDF、HTML 和文本。这些格式代表着存在的大多数非结构化内容。对于 Watson Films 应用程序,我们将从 Wikipedia 获取有关美国电影协会评选的 100 部最佳美国电影的 HTML 内容。我们还将从 The Essential Reference Guide for Filmmakers 获取一个 PDF 文档。我们将使用 Watson Experience Manager 上传和获取这些文档。

图 5. Watson Experience Manager - Corpus Management
Watson Experience Manager 中的 Corpus Management 屏幕截图的更大版本

构建和运行 Watson Films

需要一个 IBM DevOps Services 帐户来在本地构建和运行 Watson Films 演示。如果还没有 IBM DevOps Services 帐户,您可创建一个 帐户

Watson Films 演示可使用 Eclipse 或不使用 Eclipse 构建。下面将介绍这两种方法。

下载项目并在本地设置它之后,您需要访问一个 Watson 实例来端到端地运行它。还需要更改 watson.js 文件中的 URL 和凭据,以反映您自己的 Watson 实例。我们提供了许多 Watson QAAPI 请求和响应 JSON 示例,可在 watson_films_dw/samples 文件夹下找到它们。

有关 Watson QAAPI JSON 的更多信息,请参阅 IBM Watson 内幕

使用 Eclipse/Nodeclipse 构建和运行

第 1 步. 安装 Eclipse

  1. 下载并安装 Eclipse(v4.3.2 或更高版本)。
  2. 安装 Nodeclipse – 将 Install 按钮拖到 Eclipse 工具栏。

第 2 步. 获取代码

Watson Films 代码包含在 IBM DevOps Services 上托管的一个 Git 存储库中。要获取代码:

  1. 打开 Git 透视图:Window->Open Perspective->Git
  2. 克隆该存储库:源代码位于 origin/master 分支上。
    图 6. 克隆存储库
    选择 Clone a Git repository 选项的屏幕截图
    选择 Clone a Git repository 选项的屏幕截图
  3. 输入以下 Git 存储库 URL:https://hub.jazz.net/project/dimascio/WatsonFilmsDW
  4. 输入您的 jazz hub 凭据并完成向导。

第 3 步. 将 WatsonFilm 项目导入 Eclipse 中

从 Git 透视图,打开 Working Directory 文件夹并选择 Import Projects

图 7. 导入项目
选择 Working Directoy > Import Projects 选项的屏幕截图
选择 Working Directoy > Import Projects 选项的屏幕截图

第 4 步. 安装依赖项

选择 package.json 并运行 npm install 来安装依赖项,例如 Express。依赖项的安装是可选的。所有依赖项都包含在存储库中。

图 8. 安装依赖项
为 package.json 选择 npm install 选项的屏幕截图
为 package.json 选择 npm install 选项的屏幕截图

第 5 步. 运行代码

从 Node 透视图,选择 app.jsRun As->Node Application

图 9. 运行代码
为 app.js 选择 Run As > Node Application 选项的屏幕截图
为 app.js 选择 Run As > Node Application 选项的屏幕截图

Watson Films 现在已在端口 3001 上运行。将浏览器指向 http://localhost:3001,以使用该演示应用程序。

不使用 Eclipse/Nodeclipse 构建和运行

  1. Git 克隆 https://username:password@hub.jazz.net/git/dimascio/WatsonFilmsDW,其中 usernamepassword 指的是您的 IBM DevOps Services 帐户。
  2. 安装 Node.js
  3. 运行 npm install express
  4. 运行 npm install request
  5. 导航到您克隆的存储库和 WatsonFilmsDW/watson_films_dw 文件夹。
  6. 运行 node app.js

Watson Films 现在已在端口 3001 上运行。将浏览器指向 http://localhost:3001,以使用该演示应用程序。

使用 Node.js 创建一个 REST API

要使用 Node.js 构建我们的 Watson Films REST API,我们将使用以下两个模块:Express.js 和 Request。之前我们已介绍如何使用 npm install 安装这两个模块。

第 1 步. 公开 REST API

我们的 REST API 很简单。它仅包含一个资源 /question。向 /question 发出 POST 请求时,业务逻辑通过 QAAPI 调用 Watson。

通过几行简单的 Node 代码,来自 app.js 的以下代码段定义了我们的问题资源,创建并启动了 Web 服务器。

清单 1. 定义问题资源
// Get access to our Watson module
var watson = require('./watson/watson');
// Set up RESTful resources
// POST requests to /question are handled by 'watson.question'
app.post('/question', watson.question);

// Start the http server
http.createServer(app).listen(app.get('port'), function() {
  console.log('Express server listening on port ' + app.get('port'));

第 2 步. 调用 Watson QAAPI

在上一节中,我们为向 /question 发出的所有 POST 请求设置了一个处理函数。这个处理函数在一个名为 watson 的简单 Node 模块中定义。文件 watson/watson.js 负责通过 QAAPI 调用 Watson。

清单 2. 通过 QAAPI 调用 Watson
// Describe the Watson Endpoint
// Specify the information and credentials pertinent to your Watson instance
var endpoint = {
  // enter watson host name; for example: 'http://www.myhost.com'
  host : '',
   // enter watson instance name; for example: '/deepqa/v1/question'
  instance : '',
   // enter auth info; for example: 'Basic c29tZXVzZXJpZDpzb21lcGFzc3dvcmQ='
  auth : ''
};


// Handler for /question POST requests
// Submits a question to Watson via the IBM Watson QAAPI
// and returns the QAAPI response.
exports.question = function(req, res) {
 if (!endpoint.host) {
  res.send(404, 'Watson host information not supplied.');
  }
 var uri = endpoint.host + endpoint.instance;
 var request = require("request");
   // Form a proper Watson QAAPI request
 var questionEntity = {
  "question" : {
  "evidenceRequest" : { // Ask Watson to return evidence
  "items" : 5 // Ask for five answers with evidence
  },
  "questionText" : req.body.question // The question
  }
  };

  console.log('Ask Watson: ' + req.body.question + ' @ ' + uri);

  // Invoke the IBM Watson QAAPI Synchronously
  // POST the questionEntity and handle the QAAPI response
  request({
  'uri' : uri,
  'method' : "POST",
  'headers' : {
  'Content-Type' : 'application/json;charset=utf-8',
  'X-SyncTimeout' : 30,
  'Authorization' : endpoint.auth
  },
  'json' : questionEntity,

  }, function(error, response, body) {
  // Return the QAAPI response in the entity body
  res.json(body);
  });
}

那么此代码有何用途?首先,它导出 question 函数(我们的处理函数),以便可从 app.js 访问该函数。question 函数接受两个参数:请求 req 和响应 res

请求 req 应是包含问题文本的字符串。question 字符串然后用于创建一个符合 QAAPI JSON Request and Response 模型的适当的 Watson QAAPI 问题请求。

最后,question 函数使用 request 模块同步调用 Watson QAAPI,“按原样” 返回响应。

创建用户界面

现在我们已有一个能够与 Watson 通信的 REST API,我们使用此 API 为 Watson Films 构建一个简单的用户界面。

所有 Watson Films 用户界面代码都可在 watson_films_dw/public 目录中找到。您可能已想到,index.htmlmovies.css 定义外观,而 movies.js 负责调用我们的 REST API 并呈现结果。

第 1 步. 使用 JQuery 调用 Node.js REST API

要调用我们的 REST API,我们通过 JQuery 向 /question 资源发出一个 Ajax POST 请求。

以下代码段来自 movies.js

清单 3. 调用 REST API
  // Ask a question.
  // Invoke the Node.js REST service. The Node.js
  // service, in turn, invokes the IBM Watson QAAPI
  // and returns to us the QAAPI response
 var ask = function(question) {  var searchTerm = $("#searchTerm");
 var samples = $('.dropDownSampleQuestion');
  // Create a Ladda reference object
 var l = Ladda.create(document.querySelector('button'));
   ......
  l.start();
   // Form a question request to send to the Node.js REST service
 var questionEntity = {
  'question' : question
  };

  // POST the question request to the Node.js REST service
  $.ajax({
  type : 'POST',
  data : questionEntity,
  dataType : "json",
  url : '/question',
  success : function(r, msg) {
  // Enable search and stop the progress indicator
  searchTerm.removeAttr("disabled");
 samples.removeAttr("disabled");
  l.stop();
   // Display answers or error
 if (r.question !== undefined) {
  displayAnswers(r);
  } else {
  alert(r);
  }
  },
  error : function(r, msg, e) {
  // Enable search and stop progress indicator
  searchTerm.removeAttr("disabled");
  samples.removeAttr("disabled");
  l.stop();
   // Display error
 if (r.responseText) {
   alert(e+' '+r.responseText);   } else {
   alert(e);
  }
   }
  });
  };

第 2 步. 使用 Slick Carousel 呈现答案

Slick Carousel 是一个非常有用的 carousel 库。Watson Films 演示使用 Slick 来显示 Watson 返回的答案。每个答案在 carousel 中的一张幻灯片中呈现。以下代码段描述了如何实现此功能。

以下代码段来自 index.html

清单 4. 使用 Slick Carousel 呈现答案
<!-- placeholder for the slick carousel -->
<div class="col-lg-12">
   <div id="answerCarousel" class="single-item answer" style="margin-top: 10px;"></div>
  <iframe name="form-iframe" src="about:blank" class="hidden"></iframe>
</div>

此代码段来自 movies.js

清单 5. 来自 movies.js 的代码段
var displayAnswers = function(r) {
 var answerCarousel = $("#answerCarousel");
 var answerText = "Hmm. I'm not sure.";
  slickIndex = 0;

 if (r.question.answers[0] !== undefined) {
  answerText = r.question.answers[0].text
  console.log('answer: ' + answerText);
  slickIndex = r.question.answers.length;
  }

  answerCarousel.show();

 for (var i = 0; i < slickIndex; i++) {
  $('#panswer' + i).remove();
  answerCarousel.slickAdd(createAnswerSlide(i, r));
  }

  answerCarousel.slickGoTo(0);
  };

IBM DevOps Services 和 Bluemix

IBM DevOps Services 和 Bluemix 在创建 Watson Films 应用程序的过程中发挥着重要作用。IBM DevOps 服务提供了丰富、易用的服务,可帮助您轻松且高效地开发、跟踪、规划和部署应用程序,比如:

  • 一个帮助您快速创建项目的简单用户界面
  • 通过 Git 或 Jazz SCM 内置的源代码控制管理
  • 帮助您使用 Bluemix 发布应用程序的自动构建和部署机制
  • 集成的服务包含可帮助您跟踪和规划项目活动的仪表板

要获得详细的特性列表,请访问 https://hub.jazz.net/features

使用 DevOps Services 创建一个项目

要创建一个新项目,可转到 https://hub.jazz.net 并单击 Create Project。这里您需要提供项目名称,选择源代码控制管理系统,以及设置您的规划和部署首选项。例如:

图 10. 在 DevOps Services 上创建项目
DevOps Services 上的 ‘Create a project’ 选项的屏幕截图
DevOps Services 上的 ‘Create a project’ 选项的屏幕截图

对于 Watson Films,我们将项目命名为 “Watson Films” 并选择创建一个新的 Git 存储库。接下来设置我们的项目首选项。此项目是私有的吗?不是。我们希望使用敏捷开发来执行跟踪和规划吗?当然。我们希望将应用程序部署到 Bluemix 吗?当然!

图 11. DevOps Services 项目设置
Prviate、Add features for Scrum development 和 Deploy to Bluemix 选项的屏幕截图
Prviate、Add features for Scrum development 和 Deploy to Bluemix 选项的屏幕截图

在 IBM Bluemix 上创建一个应用程序

Bluemix 是一个 IBM 开放平台即服务 (PaaS),用于开发和部署移动和 Web 应用程序。Bluemix 包含大量预先构建的服务,开发人员可使用它们轻松地构建、增强和部署应用程序。Bluemix 允许开发人员将精力集中在最擅长的工作上,即开发创新且最优质的应用程序。可在 此处 注册来访问 Bluemix。以下是在 Bluemix 中创建应用程序的过程:

  1. 登录到 Bluemix
  2. 单击 Add an application 并选择 Node.js
  3. 命名应用程序。
图 12. 在 IBM Bluemix 中创建基于 Node.js 的 Watson Films 应用程序
在 IBM Bluemix 中添加 Node.js Watson Films 应用程序的屏幕截图
在 IBM Bluemix 中添加 Node.js Watson Films 应用程序的屏幕截图的更大版本

构建并从 DevOps Services 部署到 Bluemix

Watson Films 源代码存储在 DevOps Services 中。使用 DevOps Services 中的 “Build and Deploy” 工具,我们配置一个简单、一次性的 Grunt 构建版本来编译和 “缩减” 该项目。然后创建一个一次性的部署器,将生成的应用程序部署在 Bluemix 上。

  1. 登录到 DevOps Services。
  2. 单击 Build and Deploy
  3. 启用 Simple
  4. 单击 Edit Code
  5. 在 DevOps Services 项目根目录下创建 YAML 文件 manifest.yml。(参见以下信息了解细节。)
图 13. IBM DevOps Services 中的代码结构
在 DevOps Servicss 中看到的代码结构的屏幕截图
在 DevOps Servicss 中看到的代码结构的屏幕截图
图 14. YAML 清单文件
YAML 清单文件的屏幕截图

manifest.yml 文件提供了应用程序的部署配置。

  • name – 应用程序名称。
  • mem – 分配给应用程序的内存量。
  • instances –为该应用程序提供服务的集群节点数量。实例的值大于 1 时,Bluemix 自动处理负载平衡。
  • command – 启动应用程序的命令。
  • host – 主机名。
  • domain – 域名。
  • path – 工作目录的路径。该命令从此目录运行。

将新更改部署到 Bluemix

  • 单击 Edit CodeDeploy,或者
  • 传送到包含已构建和部署的源代码的分支!

检查应用程序的健康状况。

登录到 Bluemix 并单击应用程序小部件。

图 15. 在 Bluemix 中运行的应用程序
在 Bluemix 中运行的示例 Watson Films 应用程序的屏幕截图
在 Bluemix 中运行的示例 Watson Films 应用程序的屏幕截图

Watson Films 的实际应用

受 IBM Watson 支持的 Watson Films 应用程序现在已完成。请确保该应用程序在 Nodejs 本地启动或在 Bluemix 中启动。在笔记本电脑或移动设备上启动您最喜欢的浏览器,将其指向应用程序 URL,例如 http://watsonfilms.ng.bluemix.net 或 http://localhost:3001。刚才编写的认知应用程序将出现。单击 “Ask Watson” 按钮右侧的下拉图标,尝试询问一些示例问题。

图 16 中可以看到,提出的示例问题为 “Several critics have raved about Zhivago.Was it shown in Russia in 2000?”。Watson 在比单个词汇更深的层次上理解该问题。如果仔细分析该问题,会发现它表达很含糊。很容易错误地认为 Zhivago 是芝加哥的一家饭店,或者甚至一本书。但它与电影 Dr. Zhivago 有关。从单个词来看,问题中的 “2000” 可能显示为一个数字,但事实上它指的是一个年份。还有 Russia,它指的是一个地区。作为人类,在我们读到一个问题或被问到一个问题时,我们会自动执行这类语言分析。

答案反映了 Watson 对该问题有着相当深层次的理解。看看答案,我们可了解 Watson 知道如何应用上下文,填补空白,解决歧义性和不确定性,以及像人类一样准确地解释语言。它认识到 Zhivago 确实是一部影片,2000 指一个年份。然后它返回了包含在一个非结构文档中的答案 (…it was not shown in Russia until 1994…)。Watson 理解了人类使用的语言特征。因此,它能够在不断变化的环境中,确定一段文字(称之为 “问题”)如何推断出另一段文字(称之为 “答案”),并且具有非常高的准确性。最后,Watson 通过提供证据,表明了它是如何得出结论的。

图 16. Watson Films 的实际应用
Watson Film 应用程序回答一个问题的屏幕截图
Watson Film 应用程序回答一个问题的屏幕截图

结束语:内容汇总

我们设计了一个基本的认知应用程序,演示了如何将 Watson Q&A 认知技术集成到应用程序中,进而集成到软件项目中。

Watson 是一个极其复杂且强大的平台。我们分析了 IBM Watson QAAPI,它提供了一个简单的 RESTful 接口,支持开发人员利用 Watson 的强大功能。我们在创建 Watson Films 的过程中,不仅使用了 Watson,还利用了许多尖端技术,包括 Node.js 和 Bootstrap.js。现在我们已看到利用 Watson 的强大功能有多轻松,我已等不及想看到大家构想的受 Watson 支持的应用程序了!

我们分析了 IBM DevOps Services,看到它几乎消除了为源代码控制管理、规划和部署等服务设置和维护生产服务器的需要。我们还看到,使用 IBM DevOps Services 和 IBM Bluemix 创建、管理和部署软件项目非常容易。

您创建的这个 Watson Films 应用程序是一个不错的起点,可通过更多认知功能以及社交和电子商务功能来扩展和增强。一些想法包括:

  • 从问题和答案中提取指定的实体,自动从一个影片传输服务目录中获取影片。
  • 对问题执行情绪分析,了解用户的情绪,提供符合用户偏好的相关的市场产品,比如电影票、房屋出租和现场表演。
  • 对用户的语言足迹执行心理图解分析,自动获取个人的个性特征。
  • 提取设备位置 信息,并提供特定于位置的信息和洞察。
  • 基于来自心理图解分析的属性,推荐用户可能喜欢的影片。
  • 集成第三方服务,包括社交媒体服务,以及交易和电子商务站点。

IBM Watson 等认知系统和 IBM Bluemix 这样的 PaaS 为开发人员带来了绝佳的发展时机。您可更快且更简单地构建出色的应用程序,无缝地融入认知功能。欢迎开发人员来到未来世界。让您的想象自由翱翔!

IBM Watson 内幕

Watson Q&A Service 的工作原理

组织如今需要能够处理:

  • 不断传入和变化的大数据(结构化和非结构化)的速度
  • 它们不断增长的规模(数据量)
  • 各种不一致且常常无法预测的数据格式(种类)
  • 对我们的许多数据都不明确的越来越深的认识(真实性)

在此环境中,从数据中收集洞察和知识变得越来越具有挑战。

IBM Watson Q&A 技术支持用户或其他系统使用自然语言形式的问题或询问来与它交互。它然后会理解自然语言,生成假设,提供答案、洞察及支持的证据,以及一个置信度。Watson 不断通过以下方式 “学习并变得越来越聪明”:

  1. 接受用户的教导,
  2. 从以前的交互中学习
  3. 吸收新信息

Watson QAAPI JSON 请求

Watson Question and Answer API (QAAPI) 是一种具象状态传输 (REST1) 服务接口,允许应用程序与 Watson 交互。使用此 API,人们可向 Watson 提出问题,获取响应,并提交有关这些响应的反馈。除了简单的问题和响应,Watson 可清晰地展示它如何通过 REST 服务得出结论。其他功能,比如获取 Watson 平台中的内容,公开为工具。

要使用 RESTful Watson QAAPI,可 POST 一个包含 JSON 载荷的问题,类似于清单 6:

清单 6. Watson QAAPI 请求 JSON
{
    "question": {
        "questionText": "Several critics have raved about Zhivago. Was it shown in Russia in 2000?",
        "formattedAnswer": false,
        "evidenceRequest": {
            "items": "2"
        }
    }
}

该 POST 必须包含 HTTP 头信息,包括以下信息:

  • Accept: application/json
  • Content-Type: application/json
  • X-SyncTimeout:30

X-SyncTimeout 头元素的值为 30 秒。这个时间表示服务器在提交问题之后,等待多久才超时。该值不表示客户端等待来自服务器的响应多久。

Watson QAAPI JSON 响应

提交问题后,响应包含一个 HTTP 状态代码。对于同步模式,成功的 HTTP 状态代码为 200 Created。成功的响应还包含一个完整的问题状态和答案。answers 部分包含按置信度排名的答案。置信度值是一个百分比值,表示 Watson 对此答案的信任程度。更高的值表示更加信任。text 部分包含每个答案的文本。

响应还在响应中提供了更多自然语言处理 (NLP) 信息,包括有关问题的类型、重点、词汇回答类型、同义词列表等的详细信息。

清单 7. Watson QAAPI 响应 JSON
{
    "question": {
    "qclasslist": [
    {
        "value": "FACTOID"
    },
        {
        "value": "DESCRIPTIVE"
    }
    ],
    "focuslist": [
        {
        "value": "it"
        }
    ],
    "latlist": [
        {
        "value": "it"
        }
    ],
    "evidencelist": [
        {
            "value": "0.25249403715133667",
            "text": "Over the years, the film's critical reputation has gained in stature, 
and today Doctor Zhivago is considered to be one of Lean's finest works and is highly 
critically acclaimed, along with Lawrence of Arabia, Brief Encounter, 
The Bridge on the River Kwai, and A Passage to India. As with the novel itself, 
the film was banned in the Soviet Union. It was not shown in Russia until 1994. 
Review aggregator Rotten Tomatoes gives the film an 85% 'Fresh' rating.",
            "id": "PB_FC6CC778B1703419C687B86A739779FF",
            "title": "Doctor Zhivago (film) - Wikipedia, the free encyclopedia : Doctor Zhivago (film) :
            Reception[edit]",
            "document": "/instance/8/deepqa/v1/question/document/PB_FC6CC778B1703419C687B86A739779FF/3103/3563",
            "copyright": "No copyright specified for this supporting passage or document.",
            "termsOfUse": "No license specified for this supporting passage or document."
        },
        {
  "value": "0.10348163545131683",
  "text": "Many critics believed that the film's focus on the love story between Zhivago and 
  Lara trivialized 
the events of the Russian Revolution and the resulting civil war. The sweeping multi-plotted 
story form used by 
Pasternak had a distinguished pedigree in Russian letters. The author of War and Peace, Leo Tolstoy, 
had used 
characters as symbols of classes and historical events in describing the events in the Russia 
of Napoleonic times. 
Pasternak's father, 
who was a painter, had produced illustrations for War and Peace.",
  "id": "PB_FC6CC778B170341996480AF5F45652821",
  "title": "Doctor Zhivago (film) - Wikipedia, the free encyclopedia",
  "document": "/instance/8/deepqa/v1/question/document/PB_FC6CC778B170341996480AF5F45652821/11749/12270",
  "copyright": "No copyright specified for this supporting passage or document.",
  "termsOfUse": "No license specified for this supporting passage or document."
  }
    ],
    "synonymList": [
  {
  "partOfSpeech": "verb",
  "value": "shown",
  "lemma": "show",
  "synSet": [
  {
  "name": "Wordnet_show-verb-1",
  "synonym": [
  {
  "isChosen": true,
  "value": "present",
  "weight": 1
  },
  {
  "isChosen": true,
  "value": "demo",
  "weight": 1
  },
  {
  "isChosen": true,
  "value": "demonstrate",
  "weight": 1
  },
  {
  "isChosen": true,
  "value": "exhibit",
  "weight": 1
  }
  ]
  },
  {
  "name": "Lemma_Expansion",
                    "synonym": [
  {
  "isChosen": true,
  "value": "show",
  "weight": 1
  }
      ]
  }
  ]
  },
  {
  "partOfSpeech": "verb",
  "value": "raved",
  "lemma": "rave",
  "synSet": [
  {
  "name": "Lemma_Expansion",
  "synonym": [
  {
  "isChosen": true,
  "value": "rave",
  "weight": 1
  }
  ]
  }
  ]
  },
  {
  "partOfSpeech": "noun",
            "value": "russia",
            "lemma": "russia",
            "synSet": [
                {
  "name": "Wordnet_soviet+union-noun-1",
  "synonym": [
                        {
  "isChosen": true,
  "value": "ussr",
  "weight": 1
  }
  ]
                }
            ]
  },
  {
  "partOfSpeech": "verb",
  "value": "was",
  "lemma": "be",
  "synSet": [
  {
  "name": "Lemma_Expansion",
  "synonym": [
  {
  "isChosen": true,
                          "value": "be",
  "weight": 1
  }
  ]
  }
  ]
  },
  {
  "partOfSpeech": "noun",
          "value": "critics",
  "lemma": "critic",
  "synSet": [
  {
  "name": "Lemma_Expansion",
  "synonym": [
  {
  "isChosen": true,
  "value": "critic",
  "weight": 1
  }
  ]
  }
  ]
  },
  {
  "partOfSpeech": "verb",
  "value": "have",
  "lemma": "have",
  "synSet": [
  {
  "name": "Wordnet_have-verb-1",
  "synonym": [
  {
  "isChosen": true,
  "value": "hold",
  "weight": 1
  }
  ]
  }
  ]
  }
  ],
  "pipelineid": "1635768506",
  "formattedAnswer": false,
  "category": "",
  "items": 2,
  "status": "Complete",
  "id": "4A242FC03922427EBAB78669CC8DC4A3",
  "questionText": "Several critics have raved about Zhivago. Was it shown in Russia in 2000?",
  "evidenceRequest": {
  "items": 1,
  "profile": "Yes"
  },
  "answers": [
  {
  "id": 0,
            "text": "Over the years, 
the film's critical reputation has gained in stature, and today Doctor Zhivago is considered 
to be one of Lean's 
finest works and is highly critically acclaimed, along with Lawrence of Arabia, Brief Encounter, 
The Bridge on the River Kwai, and A Passage to India. As with the novel itself, the film was 
banned in the Soviet Union. 
It was not shown in Russia until 1994. Review aggregator Rotten Tomatoes gives the film an 85%
 'Fresh' rating.",
  "pipeline": "Descriptive",
  "confidence": 0.25249,
  "evidenceProfile": [
  {
  "name": "FeatureGroup_Linguistic",
                    
                    "value": "0.23145645026735637"
  },
                {
  "name": "FeatureGroup_Type",
  "value": "0.2690169077609411"
  },
  {
  "name": "FeatureGroup_Spatio-temporal",
   "value": "0.24976332098585127"
  },
  {
  "name": "FeatureGroup_Relevance",
  "value": "0.24976332098585127"
  }
  ]
   },
  {
  "id": 1,
  "text": "Many critics believed that the film's focus on the love story between Zhivago and 
  Lara trivialized 
the events of the Russian Revolution and the resulting civil war. The sweeping multi-plotted 
story 
form used by Pasternak 
had a distinguished pedigree in Russian letters. The author of War and Peace, Leo Tolstoy, 
had used characters as symbols 
of classes and historical events in describing the events in the Russia of Napoleonic times. 
Pasternak's father, 
who was a painter, had produced illustrations for War and Peace."
  "pipeline": "Descriptive",
            "confidence": 0.10348,
            "evidenceProfile": [
  {
  "name": "FeatureGroup_Linguistic",
  "value": "0.21214725301293394"
  },
  {
  "name": "FeatureGroup_Type",
  "value": "0.2757757967510807"
  },
           {
  "name": "FeatureGroup_Spatio-temporal",
  "value": "0.25603847511799266"
  },
  {
  "name": "FeatureGroup_Relevance",
       "value": "0.25603847511799266"
  }
   ]
        }
  ],
  "errorNotifications": [],
  "passthru": ""
  }
}

相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Cloud computing
ArticleID=978300
ArticleTitle=在 Bluemix 上使用 IBM Watson 创建自然语言问答系统
publish-date=03172015