DevSecOps

6 fev, 2018

Introdução ao LUIS – Parte 4: aplicação em produção

Publicidade

Introdução

Nos artigos anteriores, apresentei a definição de um modelo e seu treinamento. Agora, vou falar de procedimentos para publicar e manter uma aplicação funcionando em ambiente de produção.

Preparativos

O LUIS é consumido como um serviço web que dispõe de um endpoint HTTPS. A aplicação requisita o serviço web passando uma sentença por este endpoint e o modelo responde com um documento JSON informando a confiabilidade ou “score” atribuído para associação dessa sentença com cada uma das intenções cadastradas no modelo.

Antes de publicar a aplicação, esteja certo que vai publicar a versão que foi testada e aprovada. Eu tenho por hábito sempre executar em sequência as etapas de treinamento, teste e publicação. Assim, terei a certeza de que o modelo que será publicado foi devidamente testado e aprovado.

Mas antes de fazer a primeira publicação de uma aplicação do LUIS, é necessário registrar este serviço na sua conta do Azure, seja ela qual for. Então, acesse o portal do AZURE e faça seu login. Em seguida, clique no botão Create A Resource e pesquise pelo serviço do LUIS, como mostra a imagem a seguir.

Em seguida, escolha o serviço Language Understanding e clique o botão Create.

Finalmente, definimos as características do serviço que será criado. Para isso, é necessário informar:

  • Nome deste serviço,
  • A conta que será usada (“subscription”),
  • Datacenter em que será criado (“location”)
  • O nível de preço contrato (“pricing tier”)
  • Recurso do AZURE que será usado (“resource group”)

Preencha os dados e clique no botão Create, como mostra a imagem a seguir.

Agora, sim, estamos prontos para publicar a aplicação.

Como publicar e consumir a aplicação

Depois que treino, testo e aprovo um modelo, clico na guia Publish, escolho o ambiente em que será criado o endpoint (de produção ou de testes), qual o fuso horário da região em que ele será usado. Mas ainda falta associar a uma conta (no caso, “key”).

Então, clico em ADD KEY e informo qual conta do Azure será utilizada.

Finalmente, podemos publicar a aplicação. Observe que você consegue “publicar” a aplicação antes de informar a chave do serviço, mas não terá um endpoint até que o faça.

Acessando a aplicação

Sua aplicação consumirá o serviço do LUIS através deste endpoint. O normal, é que sua aplicação invoque este endpoint passando a sentença via código, seja ela um chatbot ou qualquer outra aplicação que precise reconhecer a linguagem humana oral ou escrita.

Importante observar que os serviços cognitivos do Azure também oferecem APIs para conversão de fala para texto e também de texto para fala, ampliando em muito o potencial de uso da tecnologia.

No exemplo a seguir, eu uso o endpoint para passar uma consulta diretamente via browser. A frase avaliada é “quero fazer uma viagem para Orlando em janeiro. Como estão os preços para esta época?”. A estrutura desta consulta é apresentada a seguir:

https://brazilsouth.api.cognitive.microsoft.com/luis/v2.0/apps/{ID aplicação}?subscription-key={minha conta AZURE}&verbose=true&timezoneOffset=0&q=&q=quero%20fazer%20uma%20viagem%20para%20Orlando%20em%20janeiro.%20como%20estão%20os%20preços%20para%20esta%20época?

A consulta direta via browser retorna um documento JSON com toda análise feita pelo LUIS, identificando a intenção como melhor nota e as demais informações. A listagem a seguir mostra a estrutura deste arquivo.

{

  "query": "quero fazer uma viagem para Orlando em janeiro como estão os preços para esta época",

  "topScoringIntent": {

    "intent": "comprar",

    "score": 0.8112166

  },

  "intents": [

    {

      "intent": "comprar",

      "score": 0.8112166

    },

    {

      "intent": "cancelar",

      "score": 0.268762946

    },

    {

      "intent": "pagar",

      "score": 0.1612293

    },

    {

      "intent": "None",

      "score": 0.0104278931

    }

  ],

  "entities": [

    {

      "entity": "viagem",

      "type": "produto",

      "startIndex": 16,

      "endIndex": 21,

      "resolution": {

        "values": [

          "pacote turístico"

        ]

      }

    },

    {

      "entity": "uma",

      "type": "builtin.number",

      "startIndex": 12,

      "endIndex": 14,

      "resolution": {

        "value": "1"

      }

    }

  ]

}

Note que neste exemplo, o LUIS entendeu corretamente que a frase se referia à intenção comprar, com uma nota alta: 0,81. Também identificou que a frase continha a entidade produto igual a “viagem”. O documento apresenta as notas de todas as intenções do modelo, mas, tirando a intenção comprar, as demais apresentam notas muito mais baixas, no intervalo entre 0,01 e 0,26.

É interessante auditar estes documentos JSON para identificar possíveis melhorias no treinamento do modelo. Ele ajuda, por exemplo, a reconhecer casos de ambiguidade, em que a intenção selecionada (a chamada TopScore) tem nota muito parecida com outras intenções. Veremos isso a seguir.

Melhorando o treinamento do modelo

Publicar uma aplicação é apenas uma parte da sua história. De fato, um modelo de aprendizado de máquina (ou ML) precisa estar em constante treinamento.

O LUIS auxilia nesta operação, armazenando as sentenças que lhe foram passadas via endpoint. Assim, podemos auditar as respostas e aproveitar essas entradas para melhorar o treinamento do modelo.

Para auditar este histórico do uso da aplicação, é necessário se logar na página do LUIS, clicar o botão Build e então acessar a aba Review endpoint utterances. Veja esta tela na imagem a seguir.

Observe no quadro destacado em verde que em dois dos casos a resposta do LUIS foi claramente errada. Ele indicou que a intenção destas sentenças seria a de comprar, quando claramente se referiam a intenção pagar.

Para corrigir isso, basta alterar a intenção apresentada na interface e clicar o “check”. Obviamente, é necessário treinar e publicar novamente a aplicação, para que o novo treinamento suba para produção.

Na versão atual, o serviço do LUIS permite usar até 15 mil sentenças de treinamento por aplicação, o que permite tratar de um universo considerável de sentenças.

Criando réplicas do modelo

O serviço do LUIS não dispõe propriamente de recursos formais de backup e restore. Por se tratar de um serviço na nuvem, a disponibilidade e recuperação da aplicação são garantidas pela Microsoft.

No entanto, o usuário pode fazer cópias de um modelo e replicá-lo em outra aplicação para fins, por exemplo, de criação de um ambiente de desenvolvimento. Isso é feito através da exportação do modelo, que gera um documento JSON como toda estrutura criada:

  • Intenções
  • Entidades
  • Sentenças e marcações

Esta funcionalidade está disponível logo após o login no serviço, quando vemos a lista de aplicações disponíveis.

Basta escolher a aplicação e clicar sobre o símbolo dos colchetes. Este processo vai fazer o download JSON com todo conteúdo do modelo.

Para importar estes dados para um novo modelo, é só clicar no botão IMPORT APP visível nesta mesma imagem e apontar para o documento JSON adequado.

Comentários finais

O objetivo desta série de artigos é servir de apresentação do serviço cognitivo de compreensão de linguagem do Azure. O Luis é um item dentro de um catálogo com mais de 20 serviços cognitivos que estão rapidamente sendo adaptados para o português.

Aplicações de chatbot e muitas outras envolvendo machine learning ainda são recentes no Brasil, mas estas tecnologias têm recebido investimentos pesados por parte dos grandes fornecedores de tecnologia de informação.

E as grandes empresas brasileiras já estão se preparando para esta novidade. A aplicabilidade dessas tecnologias é muito vasta e vale a pena ficar de olho e se preparar para estas novidades que estão começando a invadir o nosso mercado local.