ROUGE seus resultados de PNL!
A próxima métrica a ser discutida nesta série de postagens sobre métricas usadas no Processamento de Linguagem Natural é o Subestudo Orientado à Recuperação para Avaliação de Gisting (ROUGE).
ROUGE é uma métrica de avaliação usada para avaliar a qualidade das tarefas de PNL, como resumo de texto e tradução automática. Ao contrário do BLEU , o ROUGE usa revocação e precisão para comparar resumos gerados por modelos conhecidos como candidatos contra um conjunto de resumos gerados por humanos conhecidos como referências. Ele mede quantos dos n-gramas nas referências estão no candidato previsto.
Primeiro, vamos calcular a recordação = Verdadeiros Positivos/(Verdadeiros Positivos + Falsos Negativos). Aqui, os Verdadeiros Positivos são os n-gramas correspondentes entre Referências e Candidatos. Os Falsos Negativos podem ser pensados como os n-gramas que estão nas sentenças reais (referências), mas não no candidato. Os Falsos Positivos são então os n-gramas que estão presentes no Candidato, mas não nas Referências. Confira esta postagem do blog Recall, Precision, F1-Score se precisar de uma atualização sobre conceitos como True Positives, False Positives, Recall e Precision etc.,
Portanto, o recall e a precisão podem ser obtidos conforme mostrado abaixo:
Recall e Precision podem ser complementares às vezes e, portanto, é necessário combinar os dois para alcançar um equilíbrio. Por esta razão, o ROUGE é calculado como F1-score em Python. O valor varia de 0 a 1 e quanto mais próximo o valor estiver de 1, melhor será a qualidade da previsão.
ROUGE-N
Vamos usar o módulo de avaliação do pacote “evaluate” do Huggingface e verificar os cálculos passo a passo. Suponha que o seguinte corpus com 2 referências para cada candidato tenha sido obtido a partir dos resultados de um modelo de sumarização.
!pip install evaluate
!pip install rouge-score
import evaluate
rouge = evaluate.load('rouge')
predictions = ["Transformers Transformers are fast plus efficient",
"Good Morning", "I am waiting for new Transformers"]
references = [
["HuggingFace Transformers are fast efficient plus awesome",
"Transformers are awesome because they are fast to execute"],
["Good Morning Transformers", "Morning Transformers"],
["People are eagerly waiting for new Transformer models",
"People are very excited about new Transformers"]
]
results = rouge.compute(predictions=predictions, references=references)
print(results)
{'rouge1': 0.6659340659340659, 'rouge2': 0.45454545454545453,
'rougeL': 0.6146520146520146, 'rougeLsum': 0.6146520146520146}
Candidate 1: Transformers Transformers are fast plus efficient
Reference 1: HuggingFace Transformers are fast efficient plus awesome
Reference 2: Transformers are awesome because they are fast to execute
Recall = 5/7 = 0.7142857
Precision = 5/6 = 0.8333333
F1-Score = 2 * (0.7142857) * (0.8333333)/(0.7142857 + 0.8333333) = 0.7692307
Candidate 2 and the respective Reference 1: 0.8
Candidate 3 and the respective Reference 1: 0.4285714
Mean F1-Score = (0.7692307 + 0.8 + 0.4285714)/3 = 0.665934
ROUGE-L
Aqui, L representa a Subsequência Comum Mais Longa (LCS). LCS é definido como a subsequência mais longa que ocorre tanto na referência quanto no candidato. A subsequência aqui não precisa ser contínua. Em vez de contar o número de n-gramas correspondentes, medimos o comprimento do LCS aqui. A vantagem dessa abordagem é que a ordem das palavras na frase é considerada em vez de apenas procurar n-gramas correspondentes que podem aparecer em qualquer ordem. Além disso, também não precisamos fornecer a ordem(n) de n-gramas para usar no cálculo.
Na fórmula acima, X e Y são a referência e o candidato com comprimentos m e n, respectivamente. O beta é usado para controlar o que é mais importante - recall ou precisão. Quando é 1, o F_lcs é apenas a média harmônica de Recall(R_lcs) e Precision(P_lcs). Às vezes, podemos querer priorizar a rechamada, ou seja, é mais importante que a maioria dos n-grams nas referências estejam presentes nos candidatos. Isso pode ser alcançado aumentando beta para um valor > 1.
Agora, vamos ver esta fórmula em ação. O LCS para cada conjunto candidato-referência é mostrado abaixo:
C1-R1: Transformers are fast plus
C1-R2: Transformers are fast
C2-R1: Good Morning
C2-R2: Morning
C3-R1: waiting for new
C3-R2: new Transformers
Tal como no ROUGE-N consideramos a referência com o comprimento máximo entre as duas referências para cada candidato. Portanto, calculamos o F1-Score para o par C1-R1 com comprimento LCS 4. As pontuações para Candidatos 2 e 3 são as mesmas que ROUGE-1. Isso ocorre porque o comprimento do LCS entre as referências é o mesmo que as contagens de unigrama correspondentes para 2 e 3. Todo o cálculo é então resumido como:
C1-R1:
Recall = 4/7
Precision = 4/6
ROUGE-L F1 = 2 * (4/7) * (4/6)/((4/6) + (4/7)) = 0.6153846
C2-R1 ROUGE-L F1 = 0.8
C3-R1 ROUGE-L F1 = 0.4285714
Final ROUGE-L F1 = (0.6153846 + 0.8 + 0.4285714)/3 = 0.614652
Vantagens
- Fácil de calcular e entender e geralmente é usado para avaliar sistemas de resumo de texto.
- ROUGE e suas variantes funcionaram bem para resumir documentos individuais e textos curtos.
- ROUGE tem o mesmo problema que BLEU em relação aos sinônimos. O significado dos n-gramas não é considerado e, portanto, “rápido” e “rápido” não serão considerados semelhantes.
- A pontuação depende muito da escolha de palavras e da estrutura das referências escolhidas para avaliação.
Referências
Sou aluno de Mestrado em Data Science @ TU Dortmund. Sinta-se à vontade para se conectar comigo no LinkedIn para qualquer feedback sobre minhas postagens ou qualquer comunicação profissional.