Conversando com LUIS

Keith Casamento Blocked Unblock Seguir Seguindo 29 de janeiro de 2017

Recentemente, escrevi sobre como construí meu primeiro ChatBot usando o Microsoft Bot Framework e o LUIS. Conversei brevemente sobre como consegui criar um protótipo funcional para testar a validade desse aplicativo para aumentar as oportunidades de vendas. Se você ainda não leu, vá em frente e faça agora… posso esperar…

Um latte gelado e meu ChatBot
Eu sou o Keith e sou viciado em café. Recentemente, levei um esforço para levar um aplicativo desde o início até a final… medium.com

…Bem vindo de volta! Agora que temos um protótipo funcional e uma equipe de vendas feliz (por enquanto), vamos dar um passo para trás e entrar em algumas das tecnologias usadas para criar um bot de bate-papo.

Como você deve se lembrar, um dos meus requisitos que eu sabia que seria crítico para uma melhor adoção era a capacidade de implantar o aplicativo no fluxo de trabalho diário da equipe com o mínimo de interrupção. Eu não queria que eles tivessem que aprender outra UI complexa ou até mesmo um conjunto de comandos que teriam que ser escritos literalmente. O último é o que você obtém com o MS Framework sem um intérprete inteligente. Digite LUIS. O que é um LUIS que você pode perguntar?

O Serviço Inteligente de Compreensão de Linguagem (LUIS, Language Understanding Intelligent Service) oferece uma maneira rápida e eficaz de adicionar entendimento de linguagem aos aplicativos. Com o LUIS, você pode usar modelos pré-existentes de classe mundial e pré-criados do Bing e da Cortana sempre que eles atenderem aos seus propósitos – e quando você precisar de modelos especializados, o LUIS o orientará pelo processo de construí-los rapidamente.

TLDR; LUIS me permite traduzir a linguagem humana natural e todas as suas variações em comandos e parâmetros simples .

O Setup

Isso tudo é ótimo em teoria, mas neste momento você provavelmente está pronto para eu continuar com isso e chegar a alguns exemplos reais. Antes de começar, acesse https://www.luis.ai/ e siga as etapas para registrar uma conta e configurar um novo aplicativo. Eu recomendaria ler os Documentos de Ajuda para saber mais sobre o que o LUIS pode fazer.

Depois de ter a configuração da sua conta, vá em frente e adicione um novo aplicativo, dê-lhe um nome e escolha Bot para o uso do cenário. Uma vez criada, a página do aplicativo parecerá algo semelhante:

Vamos nos familiarizar com algumas das terminologias usadas através da interface LUIS:

Expressão – a consulta que vem (na maioria das vezes) do usuário final na forma de uma sentença ou comando. Ex: “Qual é o preço atual da ação da Microsoft?”

Intenção – Pessoalmente, gosto de pensar na intenção como sendo semelhante a um recurso da API, especialmente quando vemos como um bot de bate-papo encaminhará uma determinada consulta. Você também pode pensar nisso em termos de uma função e, da mesma maneira, uma função pode ou não precisar de uma lista de parâmetros. Como veremos, LUIS chama essas entidades de parâmetros. Um exemplo de intenção do enunciado "Qual é o preço atual da ação da Microsoft" poderia ser algo que definimos como GetStockPrice.

Entidades – Fundamentalmente, uma entidade é uma informação irrelevante sobre a intenção. São os parâmetros que podem ser necessários para preencher uma solicitação. Uma intenção pode ter zero ou muitas entidades e, dependendo da aplicação, elas podem ser necessárias, opcionais ou desnecessárias. Por exemplo, "Que horas são?", Não requer uma entidade. A intenção é simplesmente GetCurrentTime . Continuando com o exemplo "Qual é o preço atual da ação da Microsoft?", Poderíamos definir uma entidade de CompanyName e ela terá um valor de Microsoft neste caso.

O LUIS também fornece mais extensibilidade por meio do uso de Entidades Pré-construídas que são basicamente construídas em entidades como inteiros ou tempos de data. Há também listas de frases e Regex para fornecer uma maneira mais abrangente de analisar e definir o enunciado.

Construindo o modelo

Voltando ao bot de vendas, temos a exigência de que precisamos recuperar uma lista de empresas ou obter mais detalhes sobre uma empresa específica. Isso poderia ser modelado de várias maneiras. Vamos usar a abordagem de pensar sobre o que nosso aplicativo precisa fazer, pois já sabemos qual é a solicitação. Vamos precisar de um método GetCustomers () e um GetCustomerDetail (companyName: string) . Para manter as coisas simples, decido considerar uma única intenção: GetCompany . Eu também defini uma única entidade de CompanyName . Colocado de outra forma aqui está o modelo de alto nível:

LUIS:
Intenção = GetCompany
Entidade = CompanyName

ICustomerRepository:
GetCompany (): List <Empresa>
GetCompanyByName (companyName: string): companhia

Nota: Neste design, precisarei de algum tipo de método de orquestração para determinar se um nome de empresa foi encontrado ou não e encaminhar a solicitação de acordo. Nós vamos lidar com isso mais profundamente no outro artigo.

Vamos voltar ao portal LUIS e começar a criar nosso modelo definido acima. Comece adicionando uma nova intenção denominada GetCompany :

Uma coisa que você notará é que o formulário requer que você forneça um enunciado de amostra. Você pode inserir qualquer coisa aqui que você sinta que transmitirá essa intenção. Vamos treinar o modelo um pouco, então não se preocupe se você se sentir muito limitado, apenas fornecendo um único enunciado.

Em seguida, vá em frente e adicione uma entidade para CompanyName :

Você deve ver o enunciado da amostra que fornecemos para a intenção na guia Nova Instrução . Esta é a primeira oportunidade para treinar nosso modelo, pois o LUIS está nos perguntando como ele deveria rotular essa frase. No menu suspenso, selecione GetCompany e clique em enviar .

Na mesma guia, vamos em frente e dar ao LUIS mais algumas amostras. Tenha em mente que o modelo aprenderá a ser mais preciso ao longo do tempo, mas ainda precisamos fornecer mais algumas amostras para iniciar o processo. Vamos adicionar um enunciado com o nome de uma empresa, talvez algo como “me dê mais informações sobre a Microsoft”. Neste momento, o modelo ainda é bastante “burro” por falta de uma palavra melhor e ainda pode pensar que isso não equivale a qualquer intenção que tenhamos definido. Tudo bem. Como antes, vamos selecionar GetCompany como a intenção, mas antes de clicar em enviar, vamos dizer ao LUIS que há também uma entidade (Microsoft) neste enunciado. Você pode fazer isso selecionando o texto "Microsoft" e selecionando CompanyName no popover e clique em enviar .

Repita esse processo mais algumas vezes pensando em algumas maneiras diferentes que um usuário poderia solicitar essa informação. O truque é não fazer a mesma pergunta com nomes de empresas diferentes, pois o LUIS é inteligente o suficiente para aprender padrões, mas sim pensar nas diferentes maneiras pelas quais a sentença pode ser estruturada, como fazer uma pergunta ou emitir um comando direto. Pense em algumas maneiras pelas quais os usuários podem usar expressões idiomáticas. Além disso, inclua alguns exemplos que não são suportados ou entendidos no nosso modelo e certifique-se de selecionar Nenhum na lista suspensa de intenção. Isso impedirá que o LUIS pense que cada solicitação tenha a mesma intenção. Não há necessidade de gastar muito tempo com isso, só precisamos de algumas amostras para fazer o aplicativo funcionar.

Depois de fornecer LUIS com algumas amostras, clique em Treinar no canto inferior esquerdo. Agora, se fôssemos colocar um exemplo de enunciados como "Obtenha-me informações no Google", o modelo deveria ter determinado tanto o enunciado quanto a entidade. Se não, você pode querer fazer mais algumas rodadas de treinamento.

Publicando o Modelo

Agora é hora de publicar nosso modelo para que possamos consumi-lo em nossa aplicação. Clique no botão Publicar perto do canto superior esquerdo e você verá o seguinte:

Quando o modelo terminar de publicar, você terá um URL exclusivo. Esta é a URL que você precisará mais tarde quando dissermos ao framework bot que queremos usar o LUIS como nosso interpretador. Antes de fecharmos a janela, vamos dar ao modelo uma execução de teste e fornecer uma consulta na caixa de texto e apertar enter. Dependendo do suporte do seu navegador para JSON, você deverá ver uma nova guia aberta com uma carga útil real do serviço similar ao seguinte:

Isso deve ser bastante auto-explicativo, mas no final, isso diz que o LUIS classificou a intenção da GetCompany com uma alta certeza. Também nos retornou uma lista de entidades que acredita ter encontrado na solicitação. Neste caso, encontrou um CompanyName do Facebook e, mais uma vez, tem uma certeza bastante alta de que está certo. Sinta-se à vontade para brincar e ver como são as cargas de resposta ao inserir diferentes tipos de consultas.

LUIS também fornece insights sobre as solicitações que está recebendo do modelo publicado. Isso fornece uma oportunidade para treinar o modelo em consultas reais feitas por seus usuários finais. Você pode vê-los clicando na guia Sugerir .

Você perceberá que isso se parece muito com a guia New Utterance e da mesma forma que você tem a capacidade de confirmar ou corrigir as interpretações. Tenha em mente que isso é mostrar como o LUIS respondeu às solicitações reais. Assim, ao analisar isso, você pode obter algumas informações sobre se os usuários finais estão obtendo as respostas corretas e com que frequência. Depois de ter passado pelas sugestões, clique novamente em Treinar e republique. Ao repetir esse processo, o LUIS continuará a interpretar melhor seus usuários.