前奏:
【NLG】(二)文本生成评价指标—— METEOR原理及代码示例
【NLG】(三)文本生成评价指标—— ENTROPY原理及代码示例
1.diversity原理
衡量生成的文本中,词的丰富度。
2.优缺点
优点:
- 衡量了文本词的丰富,即:重复词越少,文本更丰富,该指标值越大
3.如何算diversity
输入数据:
字与字分开的文本。
给一句话的每个字之间插入一个空格,比如:
输入为:["吃饭了吗?", "没有"]
输出:["吃 饭 了 吗 ?", "没 有"]
def insert_black(list_value):
len_text = len(list_value)
res_list = []
for i in range(len_text):
gen_value = gen_list[i]
list_split = ''.join(["%s " % j for j in gen_value])
res_list.append(list_split)
return res_list
代码:
def calc_diversity(predicts):
'''
生成结果加入空格
'''
tokens = [0.0, 0.0]
types = [defaultdict(int), defaultdict(int)]
for gg in predicts:
g = gg.rstrip().split()
for n in range(2):
for idx in range(len(g)-n):
ngram = ' '.join(g[idx:idx+n+1])
types[n][ngram] = 1
tokens[n] += 1
div1 = len(types[0].keys())/tokens[0]
div2 = len(types[1].keys())/tokens[1]
return [div1, div2]
if __name__ == '__main__':
predicts = ['你 说 什 么 ?', '你 说 的 是 啥 ?']
etp_score, div_score = entropy(predicts)