-
Notifications
You must be signed in to change notification settings - Fork 42
Intents Eficientes
Este estudo surgiu da necessidade de melhorias encontradas na Tais no teste beta. A classificação de Intents muitas vezes ocorria de forma errada devido ao modelo antigo de Intents. Deste modo, desenvolvemos uma teoria inspirada no fato de que o Rasa se baseia somente na estrutura sintática das frases, não conseguindo assim decodificar a semântica das palavras, assim como dito em vários estudos sobre Machine Learning: o bot sabe ler, mas não sabe nada sobre o significado das palavras. Pensando nisso, este novo modelo de Intents será construído de uma forma balanceada, cada Intent terá 20 exemplos, sendo 10 de perguntas (como o usuário poderia perguntar sobre aquele tema) e 10 palavras-chaves sobre o tema. Estas palavras chaves servirão de guia semântico, ou seja, elas irão possibilitar que o Bot faça uma relação entre as perguntas e o contexto em que elas se encontram. Além disso, foi pensando em um modelo que seja limpo: frases curtas, sem letras maiúsculas, sem erros ortográficos, sem sinais de pontuação.
Deve-se evitar também o uso excessivo de pronomes ou formas repetidas de se perguntar. Na nossa linguagem, desenvolvemos comumente palavras, colocações, construções de frases, ou formas de se expressar que andam juntas, ou se repetem com frequência. Este tipo de comportamento linguístico bagunça as Intents, pois estas frases que são escritas vão ser convertidas em Vetores. Sendo assim, uma das situações percebidas era que quando se utilizava “Como faço” repetidas vezes em uma Intent, quando em outro contexto o usuário escrevia “Como faço” era classificado automaticamente nesta Intent mesmo que ela não fizesse parte do assunto pronunciado pelo usuário.
Uma maneira de solucionar isto é evitar o uso repetido de pronomes ou de formas de perguntar, como “gostaria de saber”, “quero falar sobre”, “quero perguntar sobre”, “como”, “quanto”, “quais”, “um projeto”, “na lei”. Tudo que possa bagunçar as Intents deve ser evitado, existem casos que não se pode se livrar totalmente da construção com o uso de pronomes, nestes casos deve-se ficar atento e balancear as Intents que possuam essa particularidade. Como por exemplo, em “Quantidade de Projetos” o uso do pronome “Quantos” é obrigatório na construção da frase: “Quantos projetos foram aprovados?”. Não faria sentido escrever em um exemplo de pergunta apenas “projetos foram aprovados?”, pois desvirtuaria o sentido da pergunta.
Exemplo de Intent:
intent:curiosidades_lei_rouanet_denuncia
- quero denunciar um projeto
- quero registrar uma denuncia
- como faço uma denuncia
- como funciona a denuncia
- qual o processo de denuncia
- uso do dinheiro de forma ilegal
- tenho um projeto para denuncia
- identifiquei uma irregularidade
- tem algo errado no projeto
- gostaria de saber como denunciar
- denuncia via ouvidoria
- denunciar fraude
- denunciar dirigente
- denunciar projeto
- dinheiro ilegal
- dinheiro indevido
- processo de denuncia
- mecanismo de denuncia
- registrar denuncia
- projeto ilegal
- Pense em como o usuário perguntaria sobre aquele tema;
- Escreva uma pergunta curta (sem letras minúsculas, sem sinais de pontuação);
- Tente ao máximo não repetir pronomes ou formas de perguntar nos exemplos da Intent;
- Balanceie uma pergunta com uma palavra chave;
- Faça este mesmo procedimento para os próximos exemplos;
- Análise como esta Intent afeta as outras;
- Teste;
- Se for eficiente,sua Intent está pronta!
O treinamento das intents e a classificaçao das intents são realizadas no RASA-NLU. O pipeline usado pela Tais é:
.. code-block:: yaml
language: "pt"
pipeline:
- name: "tokenizer_whitespace"
- name: "ner_crf"
- name: "ner_synonyms"
- name: "intent_featurizer_count_vectors"
- name: "intent_classifier_tensorflow_embedding"
O pipeline tensorflow_embedding possui dois principais hiperparâmetros:
- epochs (pode ser passado como parâmetro em trainer.train(), em train.py) - quantidades de epocas para o treinamento - o valor default são 300 épocas (não são apresentados o loss e accurancy do treinamento, logo é mais complicado calibrar esse valor). No momento. não estamos alterando esse valor.
- nlu_threshold (FallbackPolicy(), em train.py): é a confiança dada após o treinamento, para uma dada intent (arquivo:train.py). Ela é usada no FallbackPolicy como threshold. Ou seja, se a confiança de uma intent < nlu_threshold, essa intent não é classificada no tracker e, entra no fallback. O idea, é que, para cada inserção de intents, não seja necessário recalibrar nlu_threshold.
How intent classification works in NLU
Know your Intent: State of the Art results in Intent Classification
- Conteúdo atual
- Novos tópicos para inserir no futuro
- Intents classificados errado
- Sinônimos de tópicos existentes
- Tópicos complicados para avaliar
- Sugestões de Fluxo
- intents_depreciadas
- utters_depreciadas
- Estudo sobre ferramentas de bots
- Estudo sobre melhores práticas de bots
- Estudo sobre pipeline do RASA
- Estudo sobre intents eficientes
- Estudo sobre refinamento da Taís
- Estudo de ferramentas de edição de conteúdo
- Estudo de Slots e Entidades
- Estudo de teste automatizado
- Estudo de Custom Actions
- Estudo de Interação
- Estudo de Métricas para Bots
- Estudo de Embedding Policy