构建一个简单的演示应用程序Watson Films

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

自然语言处理

假设生成和评估

动态学习

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 界面

在回答用户问题之前,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 架构

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

评审 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 可摄入各种格式的内容,包括 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 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 文件夹下找到它们。

使用 Eclipse/Nodeclipse 构建和运行

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

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

打开 Git 透视图:Window->Open Perspective->Git。 克隆该存储库:源代码位于 origin/master 分支上。

图 6. 克隆存储库

输入以下 Git 存储库 URL:https://hub.jazz.net/project/dimascio/WatsonFilmsDW。 输入您的 jazz hub 凭据并完成向导。 第 3 步. 将 WatsonFilm 项目导入 Eclipse 中

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

图 7. 导入项目

第 4 步. 安装依赖项

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

图 8. 安装依赖项

第 5 步. 运行代码

从 Node 透视图,选择 app.js 和 Run As->Node Application。

图 9. 运行代码

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

不使用 Eclipse/Nodeclipse 构建和运行

Git 克隆 https://username:password@hub.jazz.net/git/dimascio/WatsonFilmsDW,其中 username 和 password 指的是您的 IBM DevOps Services 帐户。 安装 Node.js。 运行 npm install express。 运行 npm install request。 导航到您克隆的存储库和 WatsonFilmsDW/watson_films_dw 文件夹。 运行 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 modulevar 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 serverhttp.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 instancevar 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,“按原样” 返回响应。

时间: 2024-10-31 03:57:36

构建一个简单的演示应用程序Watson Films的相关文章

通过构建一个简单的SMS应用程序来理解Worklight的适配器框架

一些http://www.aliyun.com/zixun/aggregation/14219.html">移动应用程序不需要后端连接,比如游戏或计算器,但大多数企业移动应用程序都会通过移动化可通过网络获得的数据和功能而获益.这些数据和功能可能来自企业的系统,或者通过公开为 API 的第三方服务获得.Worklight 在 Worklight 服务器中提供了一个适配器框架来调用这些服务. Worklight 支持 3 种核心适配器类型: HTTP 用于一般 HTTP 连接,包括 RESTf

《Android游戏开发详解》一2.7 构建一个简单的计数程序

2.7 构建一个简单的计数程序 Android游戏开发详解在下一个示例中,我们将利用第1章中介绍过的for循环来打印出数字5到12之间的每一个偶数.这是一个简单的游戏示例,但是,掌握for循环语法的技巧很重要. 创建一个名为CountingProject的新的Java项目,并且创建一个名为EvenFinder的新类,添加程序清单2.7所示的main方法. 程序清单2.7 EvenFinder类 01 public class EvenFinder { 02 03 public static vo

《Android游戏开发详解》——第2章,第2.6节构建一个简单的计算器程序

2.6 构建一个简单的计算器程序Android游戏开发详解现在,我们已经尝到了甜头,让我们回过头来看看第1章介绍过的一些概念,并且构建一个简单的计算器程序.让我们给出一些动手实践的指导,来构建一个新的Java程序.请记住如下的主要步骤. ① 创建一个新的Java项目(将其命名为SecondProject). ② 在src文件夹中创建一个新的类(将其命名为SimpleCalculator). ③ 创建一个main方法. 如果任何时候你碰到困难,应该参考前面的小节.一旦按照上面的步骤进行,应该会看到

《Android游戏开发详解》一2.6 构建一个简单的计算器程序

2.6 构建一个简单的计算器程序 Android游戏开发详解现在,我们已经尝到了甜头,让我们回过头来看看第1章介绍过的一些概念,并且构建一个简单的计算器程序.让我们给出一些动手实践的指导,来构建一个新的Java程序.请记住如下的主要步骤. ① 创建一个新的Java项目(将其命名为SecondProject). ② 在src文件夹中创建一个新的类(将其命名为SimpleCalculator). ③ 创建一个main方法. 如果任何时候你碰到困难,应该参考前面的小节.一旦按照上面的步骤进行,应该会看

Java核心技术卷I基础知识3.1 一个简单的Java应用程序

第3章 Java的基本程序设计结构 ▲  一个简单的Java应用程序     ▲  字符串 ▲  注释                      ▲  输入输出 ▲  数据类型               ▲  控制流 ▲  变量                      ▲  大数值 ▲  运算符                  ▲  数组   现在,假定已经成功地安装了JDK,并且能够运行第2章中给出的示例程序.我们从现在开始将介绍Java应用程序设计.本章主要介绍程序设计的基本概念(如数

《精通 ASP.NET MVC 5》----2.4 创建一个简单的数据录入应用程序

2.4 创建一个简单的数据录入应用程序 本章的其余部分将通过建立一个简单的数据录入应用程序来考查MVC的更多基本特性.本小节打算分步进行,目的是演示MVC的运用,因此会跳过对幕后工作原理的一些解释.但不必担心,在后面的章节中会重新深入地讨论这些论题. 2.4.1 设置场景 假设一个朋友决定举行一个"新年除夕晚会",于是她请笔者为其创建一个Web应用程序,以便让受邀人进行电子回复(RSVP).她的要求有以下4个关键特性. 一个显示此晚会信息的首页. 一个可以用来进行电子回复(RSVP)的

《精通 ASP.NET MVC 4》----2.4 创建一个简单的数据录入应用程序

2.4 创建一个简单的数据录入应用程序 精通 ASP.NET MVC 4 本章的其余部分将通过建立一个简单的数据录入应用程序,来考察MVC的更多基本特性.本节将分步进行,目的是演示MVC的运转,因此会跳过对幕后工作原理的一些解释.不用担心--在后面的章节中还会重新深入地讨论这些论题. 2.4.1 设置场景 设想一个朋友要主办一个"新年除夕晚会",需要创建一个Web网站,以便让被邀请人进行RSVP(电子回复).这个网站需要以下四个关键特性: 一个显示此晚会信息的主页: 一个可以用来进行R

快速构建一个简单的个人框架系列(2)--FastObject架构(改进)

架构也谈不上,就是一个简单的几个类. 目前FastObject功能还很小,尤其是多表查询和数据库兼容还存在一定的问题. 我们先把这两个问题搁这儿: 1.数据库某些地方的兼容 2.多表查询 为了这两个问题,我对先前的结构做了稍微的修改,后面慢慢就会感觉到. 人活一口气,树活一张皮.虽然上篇文章<快速构建一个简单的个人框架系列(1)--FastObject介绍> 贴出后,经过大家的指点,凸显出太大的不足,但是已经写出来了,就是只剩一口气我也要把它写完,写 不完我也要玩着写,在此感谢提建议的朋友们,

使用NetBeans IDE创建并运行一个简单的web应用程序

在本教程中,您将使用 NetBeans IDE 创建并运行一个简单的 web 应用程序,Hello Web.本示例应用程序要求您输入一个名字,之后使用那个名字显示一条信息.首先,您需要使用一个输入框来实现这个页面.之后您使用一个用户可以选择名字的下拉列表来替换那个输入框.下拉列表中输入的名字来自数据库表. 本教程需要以下技术以及资源的支持 JavaServer Faces 组件/Java EE 平台 1.2 with Java EE 5*1.1 with J2EE 1.4 Travel 数据库