ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

NLG常用metric整理

2022-08-15 21:02:24  阅读:188  来源: 互联网

标签:bleu BLEU 常用 zh pred metric score NLG refs


概览

  • BLEU:基于比较词/短语的重叠比例,关注precision
  • Rouge:基于比较词/短语的重叠比例,关注recall
  • Meteor:基于比较词/短语的重叠比例,关注f1
  • Distinct:
  • Perplexity:

BLEU

BLEU (其全称为Bilingual Evaluation Understudy), 其意思是双语评估替补。所谓Understudy (替补),意思是代替人进行翻译结果的评估。尽管这项指标是为翻译而发明的,但它可以用于评估一组自然语言处理任务生成的文本。
计算公式:

举例:

主流的计算BLEU的python库有nltk和sacrebleu,计算结果的不同源自使用了不同的smooth算法。

from sacrebleu.tokenizers.tokenizer_zh import TokenizerZh
from sacrebleu.tokenizers.tokenizer_13a import Tokenizer13a
from sacrebleu import BLEU
import nltk.translate.bleu_score as nltkbleu


def tokenizer(s, lang):
    if lang == "zh":
        return TokenizerZh()(s).split(" ")
    else:
        return Tokenizer13a()(s).split(" ")


def sacre_bleu(refs, pred, n):
    bleu = BLEU(lowercase=True, tokenize="zh", max_ngram_order=n, effective_order=True)
    score = bleu.sentence_score(references=refs, hypothesis=pred).score
    print(score)


def nltk_bleu(refs, pred, n):
    """
    一般smoothing_function选择默认即可;
    默认n=4
    """
    refs = [tokenizer(ref, "zh") for ref in refs]
    pred = tokenizer(pred, "zh")
    weights = [1 / n for _ in range(n)]
    score = nltkbleu.sentence_bleu(
        refs,
        pred,
        smoothing_function=nltkbleu.SmoothingFunction().method7,
        weights=weights
    )
    print(score)


if __name__ == "__main__":
    s = "你好世界"
    sacre_bleu([s], s, 4)
    nltk_bleu([s], s, 4)

Rouge

标签:bleu,BLEU,常用,zh,pred,metric,score,NLG,refs
来源: https://www.cnblogs.com/hyserendipity/p/16541665.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有