Conteúdo


Criar um sistema de resposta a perguntas em linguagem natural com o IBM Watson em Bluemix

Comments

Observação: o IBM Bluemix™ é um produto de nível beta e mudará enquanto o aprimoramos continuamente e o deixamos mais fácil de usar! Faremos o nosso melhor para manter este artigo atualizado, mas isso nem sempre será possível.Agradecemos a compreensão!

Apresentando o IBM Watson

A cognição é praticamente tudo o que os humanos fazem, como entendimento de linguagem, percepção, julgamento, habilidades motoras, aprendizado, processamento espacial e comportamento social. Cada vez mais, esperamos que as máquinas que usamos apresentem o mesmo comportamento cognitivo. O IBM Watson representa um primeiro passo para sistemas cognitivos, uma nova era da computação. Além de usar computação programática, o Watson possui três capacidades que o tornam verdadeiramente único:

  • Processamento de linguagem natural
  • Geração e avaliação de hipóteses
  • Aprendizado dinâmico

O IBM Watson é um sistema de resposta a perguntas em linguagem natural que não usa respostas preparadas, mas determina suas respostas e pontuações de confiança associadas, que são baseadas em conhecimento adquirido.

O IBM Watson une esses recursos eficientes de uma maneira nunca feita antes, resultando em uma mudança fundamental na maneira como as empresas veem a solução rápida de problemas. O IBM Watson é um sistema de resposta a perguntas em linguagem natural que não usa respostas preparadas, mas determina suas respostas e pontuações de confiança associadas, que são baseadas em conhecimento adquirido.

O Watson inspirou muitos desenvolvedores a sonhar com ideias novas e criativas para aplicativos que usam elementos cognitivos para entregar uma experiência melhor e mais customizada ao usuário. Aplicativos desenvolvidos com o Watson podem ir além do simples processamento de dados para encontrar correlações, criar hipóteses e aprender com os resultados. Neste artigo, usaremos a tecnologia Watson Question and Answer e a Question and Answer API (QAAPI) exposta pelo Watson para desenvolver um aplicativo de demonstração simples, o Watson Films.

Observação: Para executar o aplicativo "Watson Films" neste artigo de ponta a ponta, é necessário ter acesso a uma instância do IBM Watson. Para obter acesso a uma instância do IBM Watson, consulte Watson Developer Cloud Enterprise (arquivo em PDF) ou inscreva-se para o programa Watson Ecosystem. Para entender a entrada e a saída do Watson, fornecemos as amostras JSON de solicitação e resposta Watson QAAPI no projeto DevOps Services sob a pasta watson_films_dw/samples. Agradecemos a compreensão!

O aplicativo será hospedado e gerenciado no IBM Bluemix™, uma PaaS baseada em Cloud Foundry para construir, gerenciar e executar aplicativos de todos os tipos — web, móvel, big data e dispositivos inteligentes. O código para o aplicativo será gerenciado por meio do DevOps Services (JazzHub).

Características de um sistema cognitivo

Sistemas cognitivos:

  • navegam nas complexidades da linguagem humana e do entendimento
  • Absorvem e processam grandes quantidades de dados estruturados e não estruturados (big)
  • Geram e avaliam inúmeras possibilidades
  • Pesam e avaliam respostas baseadas apenas em evidências relevantes
  • Fornecem orientação específica para a situação, insights e orientação
  • Melhoram o conhecimento e aprendem com cada iteração e interação
  • Habilitam a tomada de decisão no ponto de impacto
  • Dimensionam-se em proporção à tarefa

Esses sistemas aplicam características semelhantes às de humanos para transmitir e manipular ideias. Quando combinados com os pontos fortes inerentes de computação digital, eles podem solucionar problemas com maior precisão, mais resiliência e em uma escala de maior dimensão. O Watson é um exemplo de um Sistema Cognitivo. Ele pode desenredar a linguagem humana e identificar inferências entre passagens de texto com alta precisão semelhante à de um humano a velocidades muito mais rápidas e em uma escala muito maior que qualquer humano. Uma abordagem baseada em regras exigiria um número quase infinito delas para capturar todos os casos que podemos encontrar na linguagem.

Figura 1. Principais características de um sistema cognitivo
Diagram of the key characteristics of a cognitive system
Diagram of the key characteristics of a cognitive system

Preparando-se para desenvolver o Watson Films

O aplicativo Watson Films é uma demonstração simples de como desenvolver um aplicativo que interaja com o Watson usando a Watson QAAPI. Esse aplicativo permite que usuários façam perguntas sobre filmes, especialmente os 100 principais filmes americanos do American Film Institute, e sobre cinema em geral.

Figura 2. A interface do Watson Films
Screen capture of the user interface for Watson Films application
Large version of screen capture of the user interface for Watson Films application

Antes de o IBM Watson poder responder perguntas do usuário, ele precisa ter uma base de conhecimento contendo informações a partir das quais possa formular respostas corretas. Para esse aplicativo, usamos conteúdo da Wikipédia sobre a lista dos 100 principais filmes americanos de todos os tempos de acordo com o American Film Institute. Esse conteúdo da Wikipédia está em formato HTML. Também usamos conteúdo do The Essential Reference Guide for Filmmakers da Kodak, que está em formato PDF.

Obtenha o código do Watson Films

  • Experimente primeiro! Consulte a Demonstração do Watson Films.
  • Obtenha ou visualize o código do Watson Films clicando no botão Get or view the code anterior ou usando o IBM DevOps Services com o Web IDE. Como este projeto contém código JavaScript, HTML e CSS, o Web IDE provavelmente é tudo o que é necessário visualizar ou editar depois de bifurcar o projeto.
  • Para fazer o download e configurar este projeto no Eclipse IDE local (com o plug-in Nodeclipse instalado), siga estas instruções.
  • Também é possível bifurcar o projeto "Watson Films" e criar seu próprio projeto DevOps Services baseado nos conteúdos deste projeto.

Sobre o código Watson Films

O aplicativo de demonstração Watson Films é construído em Node.js with Express. Também usamos Bootstrap e Slick Carousel para construir e criar um estilo da interface do usuário.

A seguir está um resumo das tecnologias usadas:

  • IBM Watson
  • Watson QAAPI : uma interface RESTful para Watson que habilita o usuário a fazer perguntas e receber respostas do Watson.
  • Node.js : uma plataforma leve que é desenvolvida no tempo de execução JavaScript do Chrome para facilmente desenvolver aplicativos em rede rápidos e escaláveis no lado do servidor
  • Express.js : uma estrutura de aplicativo da web para Node
  • Bootstrap.js : uma estrutura de desenvolvimento da web de frontend simples e responsiva
  • jQuery : uma biblioteca JavaScript rápida, pequena e com recursos completos
  • Ladda : um kit de ferramentas de botão responsivo
  • Slick Carousel : um carrossel JavaScript. Sim, Bootstrap também tem um carrossel, mas queríamos experimentar Slick!

Sobre a arquitetura do Watson Films

A arquitetura Watson Films é composta pelas seguintes camadas e componentes associados:

  • Visualização: uma interface do usuário de frontend responsiva construída principalmente usando HTML5, CSS3, Bootstrap, jQuery e outros plugins do lado do cliente JavaScript. O componente view nessa camada permite que o usuário com um ponto de entrada faça perguntas sobre o Watson.
  • Controlador: um nível de middleware e controlador baseado em Node.js e Express que expõem APIs de negócio RESTful à view . Essa API REST interage com o Watson chamando o Watson QAAPI e manipulando as respostas. Ela pode ser estendida para realizar outras operações de negócio, incluindo integração com outros serviços cognitivos e de terceiros.
  • Backend cognitivo: o IBM Watson repleto de conteúdo sobre filmes e cinema. O Watson fornece uma interface RESTful, a QAAPI. Essa API permite que os desenvolvedores perguntem ao Watson sobre filmes e cinema e recebam respostas. As respostas incluem várias informações, como texto de resposta, nível de confiança do Watson e evidências que embasam a resposta.
  • Plataforma e DevOps: o aplicativo Watson Films será implementado em IBM Bluemix. Também usa o DevOps Services para gerenciar o código. O DevOps Services é responsável pelo gerenciamento do código fonte do Watson Films e sua implementação no Bluemix. O Bluemix hospeda tanto a interface do usuário do frontend responsiva quanto o nível intermediário do Node.js, enquanto o IBM Watson e sua QAAPI estão hospedados na nuvem do desenvolvedor do IBM Watson.
Figura 3. Arquitetura do Watson Films
Diagram of the architecture of the Watson Films application
Diagram of the architecture of the Watson Films application

Mapeando o código para a arquitetura

Ao revisar o código do WatsonFilms, é possível ver um pequeno conjunto de arquivos e diretórios sob a raiz do projeto watson_films_dw . Esses arquivos e pastas relacionam-se diretamente aos componentes arquiteturais.

  • public/ – Esse diretório contém todo HTML, CSS e JavaScript do lado do cliente do Watson Films. É atendido por Node.js.
  • watson/ – Esse diretório contém lógica usada pela API REST. Interage diretamente com o Watson usando a Watson QAAPI.
  • app.js – Esse arquivo inicia o servidor da web, que hospeda a API REST e todo o conteúdo do lado do cliente.

Inserindo conteúdo relevante no Watson usando o Watson Experience Manager

O IBM Watson fornece um conjunto baseado na web de ferramentas chamado Watson Experience Manager. Com as ferramentas, é possível:

  • Carregar e gerenciar documentos
  • Criar e gerenciar uma base de conhecimento
  • Criar dados de treinamento para ajudar a ensinar o Watson sobre seu domínio
  • Testar o Watson usando uma UI simples de instalar enviando perguntas e visualizando as respostas retornadas
  • Monitorar e visualizar os relatórios de uso
Figura 4. Watson Experience Manager
Screen capture of Watson Experience Manager and its options
Screen capture of Watson Experience Manager and its options

O Watson pode absorver vários formados de conteúdo, incluindo DOCX, DOC, PDF, HTML e texto. Esses formatos representam a maioria do conteúdo não estruturado disponível. Para o aplicativo Watson Films, inseriremos HTML da Wikipédia sobre os100 melhores filmes americanos, conforme o American Film Institute. Também inseriremos um documento em PDF do The Essential Reference Guide for Filmmakers. Vamos carregar e inserir esses documentos com o Watson Experience Manager.

Figura 5. Watson Experience Manager - Gerenciamento de Corpus
Larger version of screen capture of Corpus Management in Watson Experience Manager

Desenvolver e executar o Watson Films

Uma conta do IBM DevOps Services é necessária para desenvolver e executar a demonstração do Watson Films localmente. Se você ainda não tiver uma conta do IBM DevOps Services, pode criar uma conta.

A demonstração do Watson Films pode ser construída usando ou não o Eclipse. Os dois métodos são descritos a seguir.

Depois fazer o download do projeto e configurá-lo localmente, é necessário acessar uma instância do Watson para executá-la de ponta a ponta. Também é necessário alterar a URL e as credenciais no arquivo watson.js para que reflitam a sua própria instância do Watson. Fornecemos várias amostras do JSON de solicitação e resposta da Watson QAAPI, que podem ser encontradas em watson_films_dw/samples .

Para mais informações sobre Watson QAAPI JSON, consulte Dentro do IBM Watson.

Desenvolver e executar com Eclipse/Nodeclipse

Etapa 1. Instalar o Eclipse

  1. Faça o download e instaleEclipse (v4.3.2 ou superior).
  2. Instale Nodeclipse – Arraste o botão Install para a barra de ferramentas Eclipse.

Etapa 2. Obtenha o código

O código Watson Films é contido em um repositório Git hospedado no IBM DevOps Services. Para obter o código:

  1. Abra a perspectiva do Git: Window->Open Perspective->Git.
  2. Clone o repositório: o código fonte está na ramificação origin/master .
    Figura 6. Clonar o repositório
    Screen capture of selecting the Clone a Git repository option
    Screen capture of selecting the Clone a Git repository option
  3. Insira a seguinte URL do repositório Git: https://hub.jazz.net/project/dimascio/WatsonFilmsDW.
  4. Insira suas credenciais do hub e conclua o assistente.

Etapa 3. Importe o projeto WatsonFilm para o Eclipse

Da perspectiva do Git, abra o Working Directory e selecione Import Projects.

Figura 7. Importar projetos
Screen capture of selecting the Working Directoy > Import Projects option
Screen capture of selecting the Working Directoy > Import Projects option

Etapa 4. Instalar dependências

Selecione package.json e execute npm install para instalar as dependências, por exemplo, Express. Instalar dependências é opcional. Todas as dependências são incluídas no repositório.

Figura 8. Instalar dependências
Screen capture of selecting the npm install option for package.json
Screen capture of selecting the npm install option for package.json

Etapa 5. Executar o código

Na perspectiva Node, selecione app.js e Run As->Node Application.

Figura 9. Executar o código
Screen capture of selecting the Run As > Node Application option for app.js
Screen capture of selecting the Run As > Node Application option for app.js

O Watson Films agora está em execução na porta 3001. Aponte o navegador para http://localhost:3001 para experimentar a demonstração.

Desenvolver e executar sem Eclipse/Nodeclipse

  1. Clone do Githttps://username:password@hub.jazz.net/git/dimascio/WatsonFilmsDW, em que username e password referem-se à sua conta do IBM DevOps Services.
  2. Instale Node.js.
  3. Execute npm install express.
  4. Execute npm install request.
  5. Navegue para o repositório clonado e a pasta WatsonFilmsDW/watson_films_dw .
  6. Execute node app.js.

O Watson Films agora está em execução na porta 3001. Aponte o navegador para http://localhost:3001 para experimentar a demonstração.

Construir a API REST com Node.js

Para desenvolver nossa API REST do Watson Films com Node.js, usaremos os dois módulos a seguir: Express.js e Request. Anteriormente descrevemos como instalar esses módulos usando npm install.

Etapa 1. Expor a API REST

Nossa API REST é simples. Ela contém um único recurso, /question. Quando uma solicitação POST é feita a /question, a lógica de negócios chama o Watson usando a QAAPI.

Com algumas linhas simples de código do Node, o seguinte fragmento de app.js define nosso recurso de pergunta e cria e inicia um servidor da web.

Listagem 1. Define o recurso da questão
// 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'));

Etapa 2. Chamar a Watson QAAPI

Na seção anterior, definimos um manipulador para todas as solicitações POST para /question. Esse manipulador é definido em um módulo de nó simples chamado watson. O arquivo, watson/watson.js, é responsável por chamar o Watson usando a QAAPI.

Listagem 2. Chamando Watson via QAAPI
// 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);
  });
}

Assim, o que esse código faz? Primeiro, ele exporta a função question , nosso manipulador, de modo que possa ser acessada a partir de app.js. A função question pega dois parâmetros, a solicitação req e a resposta res.

A solicitação req deve ser a cadeia de caractere que contém o texto da pergunta. A cadeia question é então usada para criar uma solicitação de pergunta da Watson QAAPI adequada conforme o modelo de Solicitação e Resposta do JSON da QAAPI.

Por fim, a função question chama a Watson QAAPI de maneira síncrona usando o módulo request e retorna a resposta "como tal".

Criar a interface do usuário

Agora que temos uma API REST capaz de comunicar-se com o Watson, vamos usá-la para desenvolver uma interface com o usuário simples para o Watson Films.

Todo o código da interface com o usuário do Watson Films pode ser encontrado no diretório watson_films_dw/public . Como é de se esperar, index.html e movies.css definem a aparência, enquanto movies.js é responsável por chamar a API REST e renderizar a resposta.

Etapa 1. Chamar a API REST Node.js usando JQuery

Para chamar a API REST, fazemos uma solicitação Ajax POST para o recurso /question usando JQuery.

O fragmento a seguir é de movies.js,

Listagem 3. Chamar a API REST
  // 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);
  }
   }
  });
  };

Etapa 2. Renderizar respostas com Slick Carousel

Slick Carousel é uma biblioteca de carrossel muito interessante. A demonstração do Watson usa Slick para exibir as respostas que são retornadas pelo Watson. Cada resposta é renderizada em um slide dentro do carrossel. Os seguintes fragmentos de código descrevem como fazer isso.

O fragmento a seguir é de index.html:

Listagem 4. Renderizar respostas com 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>

Este fragmento é de movies.js:

Listagem 5. O fragmento é de 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 e Bluemix

IBM DevOps Services e Bluemix desempenham uma importante função na criação do aplicativo Watson Films. Os serviços do IBM DevOps fornecem um conjunto abrangente de serviços fáceis de usar que ajudam a desenvolver, rastrear, planejar e implementar o aplicativo de maneira simples e eficiente, como:

  • Uma interface com o usuário simples que ajuda a rapidamente criar o projeto
  • Gerenciamento de controle de origem integrado por meio de Git ou Jazz SCM
  • Mecanismo de desenvolvimento e implementação automáticos que ajudam a publicar o aplicativo com os serviços integrados Bluemix
  • complementados com painéis que ajudam a rastrear e planejar atividades do projeto

Para uma lista mais detalhada de recursos, viste https://hub.jazz.net/features.

Criar um projeto usando o DevOps Services

Para criar um novo projeto, acesse https://hub.jazz.net e clique em Create Project. Aqui você fornece o nome do projeto, escolhe o sistema de gerenciamento de controle e define as preferências de planejamento e implementação. Por exemplo:

Figura 10. Criar um projeto no DevOps Services
Screen capture of 'Create a project' option on DevOps Services
Screen capture of 'Create a project' option on DevOps Services

Para o Watson Films, chamamos nosso projeto de "Watson Films" e escolhemos criar um novo repositório Git. Em seguida, definimos as preferências do projeto. Esse projeto é privado? Não. Desejamos usar o Scrum Development para rastreamento e planejamento? Com certeza. Desejamos implementar o aplicativo em Bluemix? É claro!

Figura 11. Configurações do projeto do DevOps Services
Screen capture of the Prviate, Add features for Scrum development, and Deploy to Bluemix options
Screen capture of the Prviate, Add features for Scrum development, and Deploy to Bluemix options

Criar um aplicativo no IBM Bluemix

O Bluemix é uma plataforma como serviço (PaaS) aberta da IBM para desenvolver e implementar aplicativos móveis e da web. O Bluemix contém uma grande variedade de serviços pré-desenvolvidos que facilitam a criação, o aprimoramento e a implementação de aplicativos pelos desenvolvedores. O Bluemix permite aos desenvolvedores concentrarem-se no que fazem melhor— desenvolver aplicativos inovadores de alta qualidade. É possível obter acesso ao Bluemix inscrevendo-se aqui. É assim que se cria um aplicativo em Bluemix:

  1. Efetue login no Bluemix.
  2. Clique em Add an application e selecione Node.js.
  3. Atribua um nome ao aplicativo.
Figura 12. Criando um aplicativo Watson Films baseado em Node.js no IBM Bluemix
Screen capture of adding the Node.js Watson Films application in IBM Bluemix
Larger version of screen capture of adding the Node.js Watson Films application in IBM Bluemix

Desenvolva e implemente a partir do DevOps Services para Bluemix

O código fonte do Watson Films é armazenado no DevOps Services. Usando o recurso "Build and Deploy" no DevOps Services, configuramos uma criação Grunt simples e de ocorrência única para a compilação e "mini-fy" do projeto. Então criamos um Implementador único que implementa o aplicativo resultante em Bluemix.

  1. Efetue login no DevOps Services.
  2. Clique em Build and Deploy.
  3. Habilite Simple.
  4. Clique em Edit Code.
  5. Crie o arquivo YAML manifest.yml na raiz do projeto DevOps Services. (Consulte as informações a seguir para detalhes.)
Figura 13. Estrutura do código no IBM DevOps Services
Screen capture of the code structure when viewed in DevOps Servicss
Screen capture of the code structure when viewed in DevOps Servicss
Figura 14. Arquivo YAML do manifesto
Screen capture that shows the manifest YAML file

O arquivo manifest.yml fornece a configuração de implementação do aplicativo.

  • name – o nome do aplicativo.
  • mem – a quantidade de memória alocada ao aplicativo.
  • instances – o número de nós do cluster que atendem o aplicativo. Quando o valor das instâncias for maior que 1, o Bluemix automaticamente manipula o balanceamento de carga.
  • command – o comando para iniciar o aplicativo.
  • host – o nome do host.
  • domain – o nome do domínio.
  • path – o caminho para o diretório de trabalho. O comando é executado a partir desse diretório.

Implementar novas alterações ao Bluemix

  • Clique em Edit Code e pressione Deploy OU
  • Entregue para a ramificação que contém código fonte integrado e implementado!

Revise a integridade do seu aplicativo

Efetue login no Bluemix e clique no widget do aplicativo.

Figura 15. Aplicativo sendo executado em Bluemix
Screen capture of sample Watson Films app running in Bluemix
Screen capture of sample Watson Films app running in Bluemix

Watson Films em Ação

O aplicativo Watson Films que é desenvolvido pelo IBM Watson agora está concluído. O aplicativo deve ser iniciado localmente em Node.js ou iniciado em Bluemix. Inicie o navegador de sua escolha no laptop ou dispositivo celular e aponte-o para a URL do aplicativo, por exemplo http://watsonfilms.ng.bluemix.net ou http://localhost:3001. O aplicativo cognitivo recém-escrito aparecerá. Clique no ícone suspenso à direita do botão "Ask Watson" para perguntas de amostra para experimentar.

Como é possível ver na Figura 16, a pergunta de amostra "Several critics have raved about Zhivago. Was it shown in Russia in 2000?" foi feita. O Watson entendeu a pergunta em um nível mais profundo que apenas as palavras individuais. Se analisarmos a pergunta mais de perto, ela é bastante ambígua. É possível facilmente confundir Zhivago com um restaurante em Chicago ou até mesmo um livro. Mas é sobre o filme. Dr. Zhivago. Em si, "2000" na pergunta aparece como um número, mas na verdade se refere a um ano. E Rússia é uma referência geográfica. Como humanos, quando lemos uma pergunta ou nos fazem uma pergunta, automaticamente realizamos esse tipo de análise linguística.

A resposta reflete como o Watson entendeu a pergunta em um nível bastante profundo. Analisando a resposta, vemos como o Watson sabia como aplicar o contexto, preencher as lacunas, resolver ambiguidade e incerteza e interpretar com precisão a linguagem como um humano. Ele entendeu que Zhivago era, de fato, um filme, e que 2000 se referia a um ano. Então voltou com a resposta (…it was not shown in Russia until 1994…) que estava contida no documento não estruturado. O Watson entendeu os recursos da linguagem como usados por humanos. A partir disso, pode determinar se uma passagem de texto (chame-a de "pergunta") infere outra passagem de texto (chame-a de "resposta") com incrível precisão sob circunstâncias inconstantes. Para completar, o Watson forneceu insight sobre como chegou às suas conclusões fornecendo evidências.

Figura 16. Watson Films em ação
Screen capture of the Watson Film app answering a question
Screen capture of the Watson Film app answering a question

Conclusão: unindo tudo

Projetamos um aplicativo cognitivo básico que demonstra como integrar uma tecnologia cognitiva do Watson Q&A em um aplicativo e, assim, um projeto de software.

O Watson é uma plataforma complexa e eficiente incrível. Exploramos a IBM Watson QAAPI, que fornece uma interface RESTful simples que habilita um desenvolvedor a aproveitar a eficiência do Watson. Enquanto criamos o Watson Films, não apenas usamos o Watson, como também usamos várias tecnologias de ponta, incluindo Node.js e Bootstrap.js. Agora que vimos como é fácil usar a eficiência do Watson, mal podemos esperar para ver os aplicativos desenvolvidos com Watson com que todos vocês sonham!

Exploramos o IBM DevOps Services e vimos como ele pode praticamente eliminar a necessidade de configurar e realizar a manutenção de servidores para serviços como gerenciamento, planejamento e implementação de controle de origem. Vimos como é incrivelmente fácil criar, gerenciar e implementar um projeto de software usando o IBM DevOps Services e o IBM Bluemix.

Este aplicativo Watson Films criado é um bom ponto de partida que pode ser expandido e aprimorado com recursos mais cognitivos, além de capacidades sociais e de e-commerce. Algumas ideias incluem:

  • Realizar extração de entidade nomeada da pergunta e resposta para buscar automaticamente filmes de um catálogo de serviços de fluxo de filmes.
  • Realizar análise de sentimentos sobre a pergunta para entender o humor do usuário, oferecer produtos de mercado relevantes que estejam relacionados às preferências do usuário, como ingressos para filmes, locações e apresentações ao vivo.
  • Realizar análise psicográfica do linguístico do usuário e derivar automaticamente traços da personalidade individual.
  • Extrair as informações de local do dispositivo e oferecer informações e insights específicos para o local.
  • Recomendar filmes dos que o usuário possa gostar com base nos atributos de análise psicográfica.
  • Integrar-se com serviços de terceiros, incluindo de mídia social e sites de transações e e-commerce.

Sistemas cognitivos como o IBM Watson e uma PaaS como IBM Bluemix tornam a atualidade uma ótima época para ser um desenvolvedor. É possível desenvolver ótimos aplicativos com mais rapidez e simplicidade, infundindo capacidades cognitivas continuamente. Bem-vindos ao futuro, colegas desenvolvedores. Deixem a imaginação voar livre!

Dentro do IBM Watson

Como o Watson Q&A Service funciona?

As organizações de hoje precisam poder lidar com:

  • a velocidade de big data em constante mudança e sendo recebido (tanto estruturado quanto não estruturado)
  • Eles aumentam de tamanho (volume)
  • Várias formas inconsistentes e muitas vezes imprevisíveis de dados (variedade)
  • A consciência crescente de que muitos dos dados são incertos (veracidade)

Coletar insight e conhecimento de dados nesse ambiente está se tornando cada vez mais desafiador.

A tecnologia IBM Watson Q&A permite que usuários ou outros sistemas interajam com ela usando perguntas ou consultas em linguagem natural. Então entende a linguagem natural, gera hipóteses e fornece respostas e insights com evidência de embasamento e um grau de confiança. O Watson, ao longo do tempo, "aprende e fica mais inteligente":

  1. Sendo ensinado por seus usuários,
  2. Aprendendo com interações anteriores
  3. Absorvendo novas informações

Solicitação JSON da Watson QAAPI

A Watson Question and Answer API (QAAPI) é uma interface de serviço Representational State Transfer (REST1) que permite aos aplicativos interagir com o Watson. Usando essa API, é possível fazer perguntas ao Watson, recuperar respostas e enviar feedback sobre essas respostas. Além de simples perguntas e respostas, o Watson pode fornecer transparência sobre como ele chegou às conclusões por meio dos serviços REST. Outras funções, como absorver conteúdo na plataforma Watson, são expostas como ferramentas.

Para usar a Watson QAAPI RESTful, faça o POST de uma pergunta com uma carga útil JSON que se pareça com a Listagem 6:

Listagem 6. JSON da solicitação Watson QAAPI
{
    "question": {
        "questionText": "Several critics have raved about Zhivago. Was it shown in Russia in 2000?",
        "formattedAnswer": false,
        "evidenceRequest": {
            "items": "2"
        }
    }
}

POST deve possuir o cabeçalho HTTP, incluindo o seguinte,

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

Há um valor de 30 segundos para o elemento do cabeçalho X-SyncTimeout. Esse intervalo representa o quanto o servidor espera depois de a pergunta ser enviada até atingir o tempo limite. O valor não representa quanto o cliente espera uma resposta do servidor.

Resposta JSON da Watson QAAPI

Depois de enviar uma pergunta, a resposta inclui um código de status HTTP. Para o modo síncrono, o código de status HTTP bem-sucedido é 200 Created. A resposta bem-sucedida também inclui um status de pergunta de concluído e as respostas. A seção de respostas contém as respostas classificadas por confiança. O valor para a confiança é uma percentagem decimal que representa a confiança do Watson nessa resposta. Valores mais altos representam uma confiança maior. A seção de texto contém o texto de cada resposta.

A resposta também fornece informações de natural language processing (NLP) na resposta, incluindo detalhes sobre a classe da pergunta, foco, tipo de resposta lexical, lista de sinônimos e mais.

Listagem 7. JSON da resposta Watson QAAPI
{
    "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": ""
  }
}

Recursos para download


Temas relacionados


Comentários

Acesse ou registre-se para adicionar e acompanhar os comentários.

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Cloud computing
ArticleID=979417
ArticleTitle=Criar um sistema de resposta a perguntas em linguagem natural com o IBM Watson em Bluemix
publish-date=06052014