Métricas automatizadas para avaliar a qualidade da geração de texto
Introdução
Geração automática de texto é a tarefa de gerar texto em linguagem natural usando um sistema de aprendizado de máquina. A geração aqui pode ser aberta ou orientada de acordo com algum caso de uso. Um sistema de geração de texto bem treinado pode tornar muito difícil distinguir entre textos escritos por humanos e por máquinas. Alguns dos casos de uso populares do mundo real em que a geração de texto é vista em ação são a Resposta Inteligente do Gmail, o Preenchimento Automático de um smartphone, etc.
Avaliar esses sistemas pode ser complicado. A maioria dos sistemas disponíveis atualmente são de natureza probabilística e muitas vezes alucinam informações factuais ao gerar texto. Portanto, uma das melhores maneiras de realizar a avaliação é fazê-la com a ajuda de humanos, mas isso pode nem sempre ser viável, pois é um processo caro e demorado. Também não garante a reprodutibilidade devido ao viés de amostragem. Além disso, avaliar em escala não é uma opção quando se faz manualmente. Conseqüentemente, pelas razões mencionadas acima, as métricas automáticas são geralmente preferidas na avaliação de sistemas de geração de texto. As métricas automáticas podem ser treinadas e não treinadas. Como esperado, as métricas treinadas tentam levar em conta as especificidades da tarefa ao fazer a avaliação, mas ao custo de aprender esta função com dados relevantes, enquanto as métricas não treinadas são genéricas, não requerem treinamento, são independentes da linguagem e mais rápidas. para calcular. Métricas não treinadas são populares e amplamente utilizadas para medir a qualidade do texto gerado tanto na indústria quanto na academia, abrangendo muitos casos de uso, como tradução automática, resumo de texto, geração de histórias, legendagem de imagens, etc.
Neste blog, vamos nos concentrar em algumas métricas não treinadas populares (com código) para avaliar a qualidade do texto gerado pelos sistemas existentes de geração de linguagem natural (NLG), desde os clássicos, como geração baseada em modelo, até modelos avançados, como GPT, modelos de sequência, etc.
Pré-requisitos
Estes pré-requisitos ajudarão a compreender as métricas automatizadas para avaliar a qualidade da geração de texto:
-
Compreensão básica de processamento de linguagem natural (PNL): Familiaridade com conceitos fundamentais de PNL, como tokenização, incorporação de palavras e modelagem de sequência.
Conhecimento de técnicas de geração de texto: Conhecimento de vários modelos de geração de texto (por exemplo, GPT, T5, BART) e seus casos de uso em tarefas como resumo, tradução e IA de conversação.
Familiaridade com métricas de avaliação: Compreensão de métricas comuns de avaliação automatizada para texto, como BLEU, ROUGE, METEOR e perplexidade, e seus pontos fortes e limitações em diferentes contextos.
Habilidades de programação: proficiência básica em Python, incluindo familiaridade com bibliotecas como NLTK, Hugging Face Transformers ou Transformers, para implementar e utilizar essas métricas.
Compreensão da análise estatística: conhecimento de conceitos estatísticos como precisão, recall e pontuação F1, que são fundamentais para muitas métricas de avaliação de texto.
ROUGE
ROUGE significa Recall-Oriented Uunderstudy for Gisting Eavaliação . Ela foi introduzida neste artigo em 2004. Esta é uma métrica muito popular que você certamente encontrará na literatura sobre resumo de texto. A métrica é baseada no cálculo da sobreposição sintática entre resumos de candidatos e de referência (ou qualquer outro trecho de texto). Rouge-1, Rouge-2, Rouge-L e Rouge-S são alguns números comumente calculados . Aqui, Rouge-1 calcula a sobreposição de unigrama_(palavra individual)_ entre as partes do texto candidato e de referência. Rouge-2 calcula a sobreposição de bigramas_(pares de palavras)_ entre as partes do texto candidato e de referência. Rouge-L calcula a sobreposição da co-ocorrência mais longa em n-gramas de sequência entre trechos de texto candidato e de referência. Rouge-S calcula a sobreposição de Skip-bigram(de qualquer par de palavras na ordem das frases) entre as partes do texto candidato e de referência. A formulação matemática da precisão e recall do Rouge-1 é mostrada abaixo -
Precisão e recall ROUGE-1
Na literatura, você encontrará frequentemente a pontuação F1 mencionada para cada um dos R1, R2, RL e assim por diante. A implementação do ROUGE é feita abaixo -
from rouge import Rouge
rouge = Rouge()
def calculate_rouge(candidate, reference):
'''
candidate, reference: generated and ground-truth sentences
'''
scores = rouge.get_scores([candidate], reference)
return scores
Cálculo ROUGE em Python
Sinta-se à vontade para conferir o pacote python aqui e também conferir esta demonstração on-line.
AZUL
BLEU significa Bilingual Eavaliação Uunderstudy. Esta é uma métrica muito popular que você certamente encontrará na literatura sobre tradução automática e foi proposta neste artigo em 2002. A métrica usada para comparar uma tradução candidata com uma ou mais traduções de referência. E o resultado está na faixa de 0 a 1, onde uma pontuação mais próxima de 1 indica traduções de boa qualidade.
BLEU-1, BLEU-2, BLEU-3 e BLEU-4 são alguns números comumente calculados que você encontrará frequentemente mencionados na literatura. Aqui, cada um de 1, 2, 3 e 4 representa a precisão da sequência de n-gramas que é levada em consideração ao calcular a pontuação BLEU. A formulação matemática do BLEU é mostrada abaixo-
Formulação BLEU | Imagem da fonte
A métrica também introduz a noção de “Penalidade de Brevidade ”(o primeiro termo da fórmula acima). Em que, se o resultado for menor que a frase de referência, penalizamos a pontuação BLEU por esse fator, resolvendo assim o problema da geração de subconjuntos.
A implementação do BLEU é feita abaixo
from nltk.translate.bleu_score import sentence_bleu
from nltk import word_tokenize
def calculate_bleu(candidate, reference):
'''
candidate, reference: generated and ground-truth sentences
'''
reference = word_tokenize(reference)
candidate = word_tokenize(candidate)
score = sentence_bleu(reference, candidate)
return score
Cálculo BLEU em Python
Sinta-se à vontade para verificar o pacote python aqui e seguir mais exemplos daqui. Também é bom saber quando não usar uma métrica, para a qual recomendo que você leia Avaliando a saída de texto em PNL: BLEU por sua própria conta e risco.
BERTScore
Como o nome diz, o BERTScore tem que fazer alguma coisa com o BERT, certo? Então, sim, o BERTScore usa o BERT para calcular a qualidade do texto gerado pelos sistemas NLG. Foi proposto recentemente neste artigo em 2020. Ao contrário da maioria dos métodos que fazem uso principalmente de sobreposições sintáticas de nível simbólico ou frasal entre hipóteses e peças de texto de referência, BERTScore, por outro lado, captura o aspecto semântico usando os embeddings contextualizados gerados pelo modelo BERT.
Pipeline BERTScore | Imagem modificada da fonte
Como pode ser visto na figura acima, ele começa primeiro obtendo incorporações de palavras contextualizadas para peças de texto de referência (verdade básica) e candidatas (aquelas geradas pelo sistema NLG). Em seguida, ele calcula a similaridade de cosseno entre cada palavra de referência e de candidatos, obtendo uma noção das palavras semanticamente mais semelhantes. No qual ele calcula Precisão, Recall e pontuação F usando fórmulas conforme descrito na imagem acima.
Lembre-se do cálculo do BERTScore com pesos de importância
Os autores do artigo também falam sobre o conceito de “pesos de importância”, que dá mais peso às palavras que deveriam ser mais importantes e exclusivas do texto, ao contrário das palavras comuns. Eles usam pesos de frequências de documento inverso (IDF) para essa finalidade. A intuição é que quanto mais comum uma palavra for nos documentos, menos importante ela será para o documento em questão. Portanto, a importância das pontuações para essas palavras não deveria importar muito. Nesses casos teremos um valor de IDF baixo. Por outro lado, se a palavra for exclusiva do documento em questão, terá um valor IDF elevado. Aqui, a escolha do peso pode ser ajustada e está aberta à exploração.
Este código pode ser implementado facilmente usando o repositório GitHub Tiiiger bert_score. Siga as instruções para instalar a biblioteca e então você pode executar o BERTscore para avaliação do idioma inglês por meio do terminal, assim:
bert-score -r original_text.txt -c generated_text.txt --lang en
Sinta-se à vontade para seguir a biblioteca python para fins de implementação. Há também uma explicação em vídeo muito boa para o mesmo. Você pode conferir aqui.
METEORO
METEOR significa A Metric para Eavaliação da Ttranslação com EOUxplícito >dering. Foi apresentado neste artigo. Ele pode ser usado para avaliar resultados em vários espectros de tarefas, como tradução automática, resumo de texto, legendagem de imagens, etc. Mas você frequentemente o encontrará sendo usado na literatura sobre tradução automática. Também afirma ter uma alta correlação com o julgamento humano.
Ele vem com algumas vantagens óbvias em comparação com a métrica BLEU (uma popular quando se trata de avaliar o/p de sistemas de tradução automática) que se concentra principalmente em capturar o aspecto de precisão da geração em relação à verdade básica . METEOR, por outro lado, é baseado na ideia de calcular a média harmônica da precisão e recuperação do unigrama, onde a recuperação recebe mais peso do que a precisão. Dar maior peso à recordação permite-nos compreender mais sobre quanto da verdade básica produzimos como parte da produção durante o processo de geração. A formulação matemática exata é mostrada abaixo -
Cálculo da pontuação F do Meteoro
METEOR também tem uma noção de “Penalidade de Pedaços” que considera a sobreposição não apenas de unigramas, mas também de pedaços (palavras consecutivas) para impor algum nível de ordenação. É denotado com “p” e é calculado conforme mostrado abaixo -
Cálculo de penalidade em pedaços
Aqui, c e um são o número de pedaços no candidato que também ocorrem na referência e nos unigramas na frase candidata, respectivamente. Por fim, o cálculo do escore METEOR (M) é feito multiplicando o fator “p” pelo escore F, mostrado abaixo -
Cálculo da pontuação METEOR
A implementação do METEOR é feita abaixo
from nltk.translate import meteor
def calculate_meteor(candidate, reference):
'''
candidate, reference: tokenized list of words in the sentence
'''
reference = word_tokenize(reference)
candidate = word_tokenize(candidate)
meteor_score = round(meteor([candidate],reference), 4)
return meteor_score
Implementação de meteoro em Python
Sinta-se à vontade para verificar a documentação do nltk sobre o mesmo.
Auto-BLEU
Self-BLEU é um uso inteligente da métrica BLEU tradicional para capturar e quantificar a diversidade no texto gerado. Foi proposto por pesquisadores da Shanghai Jiao Tong University e da University College London neste artigo em 2018.
Quanto menor o valor da pontuação self-bleu, maior será a diversidade no texto gerado. Tarefas de geração de textos longos, como geração de histórias, geração de notícias, etc., podem ser uma boa opção para ficar de olho nessas métricas, ajudando a avaliar a redundância e a monotonicidade do modelo. Esta métrica pode ser complementada com outras métricas de avaliação de geração de texto que levam em conta a qualidade e relevância do texto gerado. Um ponto ideal de relevância e diversidade geraria um resultado perfeitamente combinado.
O algoritmo é bastante simples e funciona da seguinte forma:
- Escolha uma frase de um conjunto de frases geradas para uma determinada entrada. Calcule a pontuação BLEU entre esta frase e todas as outras frases restantes do conjunto.
- Itere todas as frases únicas, gere pontuações BLEU para todas e armazene-as em uma lista.
- Por fim, calcule a média da lista calculada como parte da etapa 2.
import numpy as np
import copy
def get_bleu_score(sentence, remaining_sentences):
lst = []
for i in remaining_sentences:
bleu = sentence_bleu(sentence, i)
lst.append(bleu)
return lst
def calculate_selfBleu(sentences):
'''
sentences - list of sentences generated by NLG system
'''
bleu_scores = []
for i in sentences:
sentences_copy = copy.deepcopy(sentences)
remaining_sentences = sentences_copy.remove(i)
print(sentences_copy)
bleu = get_bleu_score(i,sentences_copy)
bleu_scores.append(bleu)
return np.mean(bleu_scores)
calculate_selfBleu(sentences)
Implementação auto-BLEU em Python
Distância do Word Mover (WMD)
Como o nome sugere, trata-se de calcular a distância que uma palavra leva para se mover para outra palavra em alguma representação comum do hiperespaço. Este método pode ser usado para determinar a proximidade semântica entre as partes do texto gerado e de referência, calculando a distância mínima palavra-palavra necessária para transformar uma frase em outra frase. No entanto, embora o WMD funcione muito bem para textos curtos, o tempo de cálculo aumenta significativamente e também a essência semântica geral é um pouco perdida à medida que o comprimento dos documentos aumenta. Tem havido esforços para fixar todos os cálculos das ADM com algumas aproximações, sinta-se à vontade para verificar isto e isto.
A imagem abaixo mostra a interpretação visual deste algoritmo
Visualização de armas de destruição em massa | Imagem da fonte
Como pode ser visto na imagem acima, temos duas frases limpas d e d' como “Obama fala a mídia Illinois” e “Presidente cumprimenta a imprensa Chicago ”respectivamente. A próxima coisa que fazemos é projetar cada token de cada frase em algum hiperespaço comum de d dimensões. Pode-se usar métodos existentes prontos para uso para essa finalidade, como word2vec, gloVe, fasttext, BERT, etc, ou treinar suas versões em seus dados. Quanto melhor for o método de representação, melhor será o cálculo da distância global. Feito isso, o próximo passo é calcular o WMD somando a distância que cada palavra de d leva para ir até a palavra (no sentido semântico) mais próxima do documento d’. Por exemplo - “fala” é o mais próximo de “cumprimentar”, “a mídia está mais próxima de “imprensa”, “Obama é o mais próximo de “Presidente” e “Illinois” é o mais próximo de “Chicago”. O método original calcula a distância L2 (euclidiana) como uma medida de distância. Mas pode-se usar outras distâncias, como o cosseno, ao lidar com dimensões muito altas.
Vamos dar outro exemplo e ver o cálculo da distância - Como pode ser visto na imagem abaixo, cada palavra do documento D1 e D2 estão alinhadas à palavra mais próxima do documento D0. A distância mínima geral percorrida pelos tokens importantes de D1 até D0 é 1,07, enquanto a distância mínima geral percorrida pelos tokens importantes de D2 até D0 é 1,63. Menos a distância, mais a semelhança.
Ilustração de armas de destruição em massa | Imagem modificada da fonte
A implementação é muito útil e pode ser feita através da biblioteca gensim conforme mostrado abaixo -
import gensim.downloader as api
model = api.load('word2vec-google-news-300')
def calculate_wmd(model, hypothesis, reference):
'''
model - word vector model
hypothesis - generated sentence
reference - groud-truth sentence
'''
distance = model.wmdistance(
hypothesis,
reference
)
return distance
Implementação de armas de destruição em massa em Python Gensim
Sinta-se à vontade para verificar a documentação do gensim sobre o mesmo.
Conclusão
Cada uma das métricas que discutimos hoje tenta capturar certos aspectos do texto gerado em relação à verdade básica disponível. Portanto, é prático medir e reportar mais de um deles para uma determinada tarefa. Houve algumas extensões para ROUGE, BLEU e METEOR na captura de sinônimos também, tornando-os mais robustos ao esquema de sobreposição. Também para métricas que dependem de sobreposições sintáticas, recomendou normalizar_(diferenciação de maiúsculas e minúsculas, palavras raiz, variações morfológicas, etc)_ tanto os trechos de texto gerados quanto os de referência antes de fazer os cálculos. Há também muita pesquisa ativa em andamento no espaço de “métricas aprendidas”, diferentemente do que discutimos hoje, que é não paramétrico. Por exemplo, você pode querer verificar o BLEURT (papel, vídeo) e a pontuação de percepção. Manteremos essa discussão para outro blog.
Espero que você tenha gostado de ler. Obrigado!
Referências
- Avaliação da geração de texto: uma pesquisa
- BLEU, METEOR, BERTScore: Avaliação do desempenho das métricas na avaliação de erros críticos de tradução em texto orientado a sentimentos