文本生成的评估指标

使用 PyTorch 的文本深度学习

Shubham Jain

Instructor

评估文本生成

  • 文本生成任务产出类人文本
  • 常规指标如 Accuracy、F1 不适用于此类任务
  • 需要评估生成文本质量的指标
  • BLEU 与 ROUGE

用于文本生成的 Dalle 聊天机器人

使用 PyTorch 的文本深度学习

BLEU(双语评估替代)

  • 比较生成文本与参考文本
  • 检查 n-gram 的出现
  • 句子 "The cat is on the mat"
    • 1-gram(unigram):[the ,cat, is, on, the, mat]
    • 2-gram(bigram):["the cat", "cat is", "is on", "on the", "the mat"]
    • n-gram 以此类推
  • 完全匹配:得分 1.0
    • 0 表示无匹配
使用 PyTorch 的文本深度学习

用 PyTorch 计算 BLEU 分数

from torchmetrics.text import BLEUScore

generated_text = ['the cat is on the mat'] real_text = [['there is a cat on the mat', 'a cat is on the mat']]
bleu = BLEUScore() bleu_metric = bleu(generated_text, real_text) print("BLEU Score: ", bleu_metric.item())
BLEU Score: tensor(0.7598)
使用 PyTorch 的文本深度学习

ROUGE(基于召回的摘要评估)

  • 以两种方式比较生成文本与参考文本
  • ROUGE-N:比较两者重叠的 n-gram(N=1 表示 unigram,2 表示 bigram,等)
  • ROUGE-L:查看两者的最长公共子序列(LCS)
  • ROUGE 指标:
    • F-measure:精确率与召回率的调和平均
    • Precision:生成文本中 n-gram 被参考文本匹配的比例
    • Recall:参考文本中 n-gram 被生成文本匹配的比例
  • 前缀 'rouge1'、'rouge2'、'rougeL' 分别对应 1-gram、2-gram、LCS
使用 PyTorch 的文本深度学习

用 PyTorch 计算 ROUGE 分数

from torchmetrics.text import  ROUGEScore

generated_text='Hello, how are you doing?' real_text= "Hello, how are you?"
rouge = ROUGEScore()
rouge_score = rouge([generated_text], [[real_text]]) print("ROUGE Score:", rouge_score)
使用 PyTorch 的文本深度学习

ROUGE 分数:输出

ROUGE Score: {'rouge1_fmeasure': tensor(0.8889), 
              'rouge1_precision': tensor(0.8000), 
              'rouge1_recall': tensor(1.),

'rouge2_fmeasure': tensor(0.8571), 'rouge2_precision': tensor(0.7500), 'rouge2_recall': tensor(1.),
'rougeL_fmeasure': tensor(0.8889), 'rougeL_precision': tensor(0.8000), 'rougeL_recall': tensor(1.),
'rougeLsum_fmeasure': tensor(0.8889), 'rougeLsum_precision': tensor(0.8000), 'rougeLsum_recall': tensor(1.)}
使用 PyTorch 的文本深度学习

注意事项与局限

  • 评估词项重合,不评估语义理解
  • 对生成文本长度敏感
  • 参考文本质量会影响得分
使用 PyTorch 的文本深度学习

Passons à la pratique !

使用 PyTorch 的文本深度学习

Preparing Video For Download...