Métricas de avaliação para modelos de compreensão da linguagem coloquial

Seu conjunto de dados é dividido em duas partes: um conjunto para treinamento e um conjunto para teste. O conjunto de treinamento é usado para treinar o modelo, enquanto o conjunto de teste é usado como um teste para o modelo após o treinamento para calcular o desempenho e a avaliação do modelo. O conjunto de teste não é introduzido no modelo por meio do processo de treinamento, para garantir que o modelo seja testado em novos dados.

A avaliação do modelo é disparada automaticamente depois que o treinamento é concluído com êxito. O processo de avaliação começa usando o modelo treinado para prever intenções e entidades definidas pelo usuário para enunciados no conjunto de teste e as compara com as marcas fornecidas (o que estabelece uma linha de base de verdade). Os resultados são retornados para que você possa revisar o desempenho do modelo. A compreensão da linguagem coloquial usa as seguintes métricas para a avaliação:

  • Precisão: mede a precisão/exatidão do modelo. É a taxa entre os positivos identificados corretamente (verdadeiros positivos) e todos os positivos identificados. A métrica de precisão revela quantas das classes previstas estão rotuladas corretamente.

    Precision = #True_Positive / (#True_Positive + #False_Positive)

  • Recall: mede a capacidade do modelo de prever classes positivas reais. É a taxa entre os verdadeiros positivos previstos e o que foi realmente marcado. A métrica de recall revelam quantas das classes previstas estão corretas.

    Recall = #True_Positive / (#True_Positive + #False_Negatives)

  • Medida f: a medida f é uma função de Precisão e Recall. Ela é necessária quando você busca um equilíbrio entre Precisão e Recall.

    F1 Score = 2 * Precision * Recall / (Precision + Recall)

Precisão, recall e medida f são calculados para os seguintes:

  • Cada entidade separadamente (avaliação no nível da entidade)
  • Cada intenção separadamente (avaliação no nível da intenção)
  • Para o modelo coletivamente (avaliação no nível do modelo).

As definições de precisão, recall e avaliação são as mesmas para avaliações nos níveis da entidade, da intenção e do modelo. No entanto, as contagens para Verdadeiros Positivos, Falsos Positivos e Falsos Negativos podem ser diferentes. Por exemplo, considere a seguinte mensagem de texto.

Exemplo

  • Faça uma resposta dizendo “muito obrigado”.
  • Responda dizendo “sim”.
  • Verifique meu email, por favor.
  • Mande um email para Cynthia dizendo que o jantar semana passada foi excelente.
  • Envie um email para Mike.

Estas são as intenções usadas: Reply, sendEmail e readEmail. Estas são as entidades: contactName e message.

O modelo fez as seguintes previsões:

Enunciado Intenção prevista Intenção real Entidade prevista Entidade real
Faça uma resposta dizendo “muito obrigado”. Responder Responder thank you very much como message thank you very much como message
Responda dizendo “sim”. sendEmail Responder -- yes como message
Verifique meu email, por favor. readEmail readEmail -- --
Mande um email para Cynthia dizendo que o jantar semana passada foi excelente. Responder sendEmail dinner last week was splendid como message cynthia como contactName e dinner last week was splendid como message
Envie um email para Mike. sendEmail sendEmail mike como message mike como contactName

Avaliação no nível da intenção para a intenção Reply

Chave Contagem Explicação
Verdadeiro Positivo 1 O enunciado 1 foi previsto corretamente como Reply.
Falso Positivo 1 O enunciado 4 foi previsto erroneamente como Reply.
Falso Negativo 1 O enunciado 2 foi previsto erroneamente como sendEmail.

Precisão = #True_Positive / (#True_Positive + #False_Positive) = 1 / (1 + 1) = 0.5

Recall = #True_Positive / (#True_Positive + #False_Negatives) = 1 / (1 + 1) = 0.5

Medida f = 2 * Precision * Recall / (Precision + Recall) = (2 * 0.5 * 0.5) / (0.5 + 0.5) = 0.5

Avaliação no nível da intenção para a intenção sendEmail

Chave Contagem Explicação
Verdadeiro Positivo 1 O enunciado 5 foi previsto corretamente como sendEmail
Falso Positivo 1 O enunciado 2 foi previsto erroneamente como sendEmail.
Falso Negativo 1 O enunciado 4 foi previsto erroneamente como Reply.

Precisão = #True_Positive / (#True_Positive + #False_Positive) = 1 / (1 + 1) = 0.5

Recall = #True_Positive / (#True_Positive + #False_Negatives) = 1 / (1 + 1) = 0.5

Medida f = 2 * Precision * Recall / (Precision + Recall) = (2 * 0.5 * 0.5) / (0.5 + 0.5) = 0.5

Avaliação no nível da intenção para a intenção readEmail

Chave Contagem Explicação
Verdadeiro Positivo 1 O enunciado 3 foi previsto corretamente como readEmail.
Falso Positivo 0 --
Falso Negativo 0 --

Precisão = #True_Positive / (#True_Positive + #False_Positive) = 1 / (1 + 0) = 1

Recall = #True_Positive / (#True_Positive + #False_Negatives) = 1 / (1 + 0) = 1

Medida f = 2 * Precision * Recall / (Precision + Recall) = (2 * 1 * 1) / (1 + 1) = 1

Avaliação de nível de entidade para a entidade contactName

Chave Contagem Explicação
Verdadeiro Positivo 1 cynthia foi previsto corretamente como contactName no enunciado 4
Falso Positivo 0 --
Falso Negativo 1 mike foi previsto erroneamente como message no enunciado 5

Precisão = #True_Positive / (#True_Positive + #False_Positive) = 1 / (1 + 0) = 1

Recall = #True_Positive / (#True_Positive + #False_Negatives) = 1 / (1 + 1) = 0.5

Medida f = 2 * Precision * Recall / (Precision + Recall) = (2 * 1 * 0.5) / (1 + 0.5) = 0.67

Avaliação no nível da entidade para a entidade message

Chave Contagem Explicação
Verdadeiro Positivo 2 thank you very much foi previsto corretamente como message no enunciado 1 e dinner last week was splendid foi previsto corretamente como message no enunciado 4
Falso Positivo 1 mike foi previsto erroneamente como message no enunciado 5
Falso Negativo 1 yes não foi previsto como message no enunciado 2

Precisão = #True_Positive / (#True_Positive + #False_Positive) = 2 / (2 + 1) = 0.67

Recall = #True_Positive / (#True_Positive + #False_Negatives) = 2 / (2 + 1) = 0.67

Medida f = 2 * Precision * Recall / (Precision + Recall) = (2 * 0.67 * 0.67) / (0.67 + 0.67) = 0.67

Avaliação no nível do modelo para o modelo coletivo

Chave Contagem Explicação
Verdadeiro Positivo 6 Soma de TP para todas as intenções e entidades
Falso Positivo 3 Soma de FP para todas as intenções e entidades
Falso Negativo 4 Soma de FN para todas as intenções e entidades

Precisão = #True_Positive / (#True_Positive + #False_Positive) = 6 / (6 + 3) = 0.67

Recall = #True_Positive / (#True_Positive + #False_Negatives) = 6 / (6 + 4) = 0.60

Medida f = 2 * Precision * Recall / (Precision + Recall) = (2 * 0.67 * 0.60) / (0.67 + 0.60) = 0.63

Matriz de confusão

Uma matriz de confusão é uma matriz N x N usada para a avaliação do desempenho de modelo, em que N é o número de entidades ou intenções. A matriz compara os rótulos esperados com os previstos pelo modelo. Isso fornece uma visão holística de quão bem o modelo está sendo executado e de quais tipos de erros ele está cometendo.

É possível usar a matriz de confusão para identificar intenções ou entidades que estão muito próximas umas das outras e que muitas vezes são confundidas (ambiguidade). Nesse caso, considere mesclar essas intenções ou entidades. Se isso não for possível, considere adicionar mais exemplos marcados das intenções e entidades para ajudar o modelo a diferenciá-las.

A diagonal realçada na imagem abaixo é as entidades previstas corretamente, em que a marca prevista é igual à marca real.

Uma captura de tela de uma matriz de confusão de exemplo

É possível calcular as métricas de avaliação no nível de entidade, intenção e modelo da matriz de confusão:

  • Os valores na diagonal são os valores de Verdadeiros Positivos de cada entidade ou intenção.
  • A soma dos valores nas linhas da intenção ou das entidades (exceto a diagonal) é o Falso Positivo do modelo.
  • A soma dos valores nas colunas da intenção ou das entidades (exceto a diagonal) é o Falso Negativo do modelo.

De maneira semelhante,

  • O Verdadeiro Positivo do modelo é a soma de Verdadeiros Positivos de todas as intenções ou entidades.
  • O Falso Positivo do modelo é a soma dos Falsos Positivos de todas as intenções ou entidades.
  • O Falso Negativo do modelo é a soma dos Falsos Negativos de todas as intenções ou entidades.

Diretrizes

Depois de treinar seu modelo, você verá algumas diretrizes e recomendações sobre como melhorar o modelo. É recomendável ter um modelo que cubra todos os pontos da seção de diretrizes.

  • O conjunto de treinamento tem dados suficientes: quando uma intenção ou entidade tem menos de 15 instâncias rotuladas nos dados de treinamento, isso pode levar a uma precisão menor devido ao modelo não ter sido devidamente treinado sobre essa intenção. Nesse caso, considere adicionar mais dados rotulados ao conjunto de treinamento. Você só deve considerar adicionar mais dados rotulados à sua entidade se sua entidade tiver um componente aprendido. Se sua entidade for definida apenas por componentes de lista, pré-compilado e regex, então esta recomendação não é aplicável.

  • Todas as intenções ou entidades estão presentes no conjunto de testes: quando os dados de teste não têm instâncias rotuladas para uma intenção ou entidade, a avaliação do modelo é menos abrangente devido a cenários não testados. Considere ter dados de teste para cada intenção e entidade em seu modelo para garantir que tudo esteja sendo testado.

  • Distinção pouco clara entre intenções ou entidades: quando os dados são semelhantes para diferentes intenções ou entidades, isto pode levar a uma precisão menor, pois podem ser frequentemente mal classificados uns como os outros. Examine as seguintes intenções e entidades e considere mesclá-los se forem semelhantes. Caso contrário, adicione mais exemplos para distingui-los melhor uns dos outros. Consulte a guia matriz de confusão para obter mais diretrizes. Se você estiver vendo duas entidades constantemente previstas para os mesmos intervalos porque elas compartilham a mesma lista, componentes pré-compilados ou regex, então certifique-se de adicionar um componente aprendido para cada entidade e torná-lo necessário. Saiba mais sobre os componentes de entidade.

Próximas etapas

Treinar um modelo no Language Studio