Experimente o IDE on-line!
Chatito ajuda a gerar conjuntos de dados para treinar e validar modelos de chatbot usando uma DSL simples.
Se você estiver construindo chatbots usando modelos comerciais, estruturas de código aberto ou escrevendo seu próprio modelo de processamento de linguagem natural, precisará de exemplos de treinamento e teste. Chatito está aqui para ajudá-lo.
Este projeto contém:
IDE de bate-papo on-line
Especificação Chatito DSL
Analisador DSL AST em formato pegjs
Gerador implementado em pacote typescript + npm
Para obter a especificação completa do idioma e a documentação, consulte o documento de especificações DSL.
Overfitting é um problema que pode ser evitado se usarmos o Chatito corretamente. A ideia por trás desta ferramenta é fazer uma intersecção entre o aumento de dados e uma descrição de possíveis combinações de frases. Não se destina a gerar conjuntos de dados determinísticos que possam se ajustar demais a um modelo de frase única; nesses casos, você pode ter algum controle sobre os caminhos de geração apenas extraindo amostras conforme necessário.
Plugin de realce de sintaxe do Visual Studio Code Obrigado a Yuri Golobokov por seu trabalho nisso.
AI Blueprints: Como construir e implantar projetos de negócios de IA implementa exemplos práticos completos de chatbot usando chatito no capítulo 7.
3 etapas para converter dados de treinamento do chatbot entre diferentes provedores de PNL detalham uma maneira simples de converter o formato de dados em adaptadores não implementados. Você pode usar um conjunto de dados gerado com provedores como DialogFlow, Wit.ai e Watson.
Aida-nlp é uma pequena biblioteca experimental de aprendizagem profunda de PNL para classificação de texto e NER. Construído com Tensorflow.js, Keras e Chatito. Implementado em JS e Python.
A linguagem é independente do formato de saída gerado e como cada modelo pode receber diferentes parâmetros e configurações, estes são os formatos de dados atualmente implementados, caso seu provedor não esteja listado, na seção Ferramentas e recursos há mais informações sobre como suportar mais formatos.
NOTA: As amostras não são embaralhadas entre as intenções para facilitar a revisão e porque alguns adaptadores transmitem amostras diretamente para o arquivo e é recomendado dividir as intenções em arquivos diferentes para facilitar a revisão e a manutenção.
Rasa é uma estrutura de aprendizado de máquina de código aberto para conversas automatizadas baseadas em texto e voz. Entenda mensagens, mantenha conversas e conecte-se a canais de mensagens e APIs. Chatito pode ajudá-lo a construir um conjunto de dados para o componente Rasa NLU.
Um comportamento específico do adaptador Rasa é que quando uma sentença de definição de slot contém apenas um alias, e esse alias define o argumento 'sinônimo' com 'true', o conjunto de dados Rasa gerado mapeará o alias como um sinônimo. por exemplo:
%[some intent]('training': '1') @[some slot] @[some slot] ~[some slot synonyms] ~[some slot synonyms]('synonym': 'true') synonym 1 synonym 2
Neste exemplo, o conjunto de dados Rasa gerado conterá entity_synonyms
do synonym 1
e do mapeamento synonym 2
para some slot synonyms
.
Flair Uma estrutura muito simples para PNL de última geração. Desenvolvido pela Zalando Research. Ele fornece embeddings pré-treinados de última geração (GPT, BERT, RoBERTa, XLNet, ELMo, etc...) para muitas linguagens que funcionam imediatamente. Este adaptador suporta o conjunto de dados text classification
no formato FastText e o conjunto de dados named entity recognition
em palavras anotadas BIO de duas colunas, conforme documentado na documentação do flair corpus. Esses dois formatos de dados são muito comuns e com muitos outros provedores ou modelos.
O conjunto de dados NER requer um processamento de tokenização de palavras que atualmente é feito usando um tokenizer simples.
NOTA: O adaptador Flair está disponível apenas para o pacote NodeJS NPM CLI, não para o IDE.
LUIS faz parte dos serviços cognitivos da Microsoft. Chatito oferece suporte ao treinamento de um modelo LUIS NLU por meio de seu endpoint de adição de enunciados rotulados em lote e sua API de teste em lote.
Para treinar um modelo LUIS, terá de publicar a expressão em lotes na API relevante para treino ou teste.
Edição de referência: #61
Snips NLU é outra excelente estrutura de código aberto para NLU. Um comportamento específico do adaptador Snips é que você pode definir tipos de entidades para os slots. por exemplo:
%[date search]('training':'1') for @[date] @[date]('entity': 'snips/datetime') ~[today] ~[tomorrow]
No exemplo anterior, todos os valores @[date]
serão marcados com a tag de entidade snips/datetime
.
Use o formato padrão se você planeja treinar um modelo customizado ou se estiver escrevendo um adaptador customizado. Este é o formato mais flexível porque você pode anotar Slots
e Intents
com argumentos de entidade personalizados, e todos eles estarão presentes na saída gerada, então, por exemplo, você também pode incluir lógica de geração de diálogo/resposta com a DSL. Por exemplo:
%[some intent]('context': 'some annotation') @[some slot] ~[please?] @[some slot]('required': 'true', 'type': 'some type') ~[some alias here]
Entidades personalizadas como 'contexto', 'obrigatório' e 'tipo' estarão disponíveis na saída para que você possa lidar com esses argumentos personalizados como desejar.
Chatito suporta Node.js >= v8.11
.
Instale-o com fio ou npm:
npm i chatito --save
Em seguida, crie um arquivo de definição (ex: trainClimateBot.chatito
) com seu código.
Execute o gerador npm:
npx chatito trainClimateBot.chatito
O conjunto de dados gerado deve estar disponível próximo ao seu arquivo de definição.
Aqui estão as opções completas do gerador npm:
npx chatito <pathToFileOrDirectory> --format=<format> --formatOptions=<formatOptions> --outputPath=<outputPath> --trainingFileName=<trainingFileName> --testingFileName=<testingFileName> --defaultDistribution=<defaultDistribution> --autoAliases=<autoAliases>
<pathToFileOrDirectory>
caminho para um arquivo .chatito
ou um diretório que contém arquivos chatito. Se for um diretório, irá pesquisar recursivamente todos os arquivos *.chatito
contidos nele e utilizá-los para gerar o conjunto de dados. por exemplo: lightsChange.chatito
ou ./chatitoFilesFolder
<format>
Opcional. default
, rasa
, luis
, flair
ou snips
.
<formatOptions>
Opcional. Caminho para um arquivo .json que cada adaptador pode usar opcionalmente
<outputPath>
Opcional. O diretório onde salvar os conjuntos de dados gerados. Usa o diretório atual como padrão.
<trainingFileName>
Opcional. O nome do arquivo do conjunto de dados de treinamento gerado. Não se esqueça de adicionar uma extensão .json no final. Usa <format>
_dataset_training.json como nome de arquivo padrão.
<testingFileName>
Opcional. O nome do arquivo do conjunto de dados de teste gerado. Não se esqueça de adicionar uma extensão .json no final. Usa <format>
_dataset_testing.json como nome de arquivo padrão.
<defaultDistribution>
Opcional. A distribuição de frequência padrão se não for definida no nível da entidade. O padrão é regular
e pode ser definido como even
.
<autoAliases>
Opcional. O comportamento do gerador ao encontrar um alias indefinido. As opções válidas são allow
, warn
, restrict
. O padrão é 'permitir'.
Rodrigo Pimentel
sr.rodrigopv[at]gmail