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.