【NLG】(三)文本生成评价指标—— ENTROPY原理及代码示例

前奏:

【NLG】(一)文本生成评价指标——BLEU原理及代码示例

【NLG】(二)文本生成评价指标—— METEOR原理及代码示例


1.ENTROPY原理

信息熵可以表达数据的信息量大小,是信息处理一个非常重要的概念。

对于离散型随机变量,信息熵公式如下:

对于连续型随机变量,信息熵公式如下:

对于生成的文本而言,希望其“言之有物”,“灼灼其华”,那可以衡量的一个指标是熵,即:系统整体所包含的的信息量。

2.优缺点

这个没有明确的优缺点,该指标在陈述一个事实。

3.如何算ENTROPY

一个首要问题:p(x)怎么计算?对于离散型随机变量而言,其出现的概率= 出现次数/整体的词。

输入是生成的文本,多个文本,字与字之间用空格分离,可以组成list,作为输入。

输出是生成的文本的熵。

def entropy(predicts):
    etp_score = [0.0, 0.0, 0.0, 0.0]
    div_score = [0.0, 0.0, 0.0, 0.0]
    counter = [defaultdict(int), defaultdict(int),
               defaultdict(int), defaultdict(int)]
    for gg in predicts:
        g = gg.rstrip().split()
        for n in range(4):
            # print('---n: ', n)
            for idx in range(len(g)-n):
                ngram = ' '.join(g[idx:idx+n+1])
                # print('----ngram: ', ngram)
                counter[n][ngram] += 1
    # print('---counter: ', counter)
    for n in range(4):
        # print('---scores n: ', n)
        total = sum(counter[n].values()) + 1e-10
        for v in counter[n].values():
            etp_score[n] += - (v+0.0) / total * (np.log(v+0.0) - np.log(total))
        div_score[n] = (len(counter[n].values())+0.0) / total
    return etp_score, div_score

if __name__ == '__main__':
    predicts = ['你 说 什 么 ?', '你 说 的 是 啥 ?']
    etp_score, div_score = entropy(predicts)

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值