天天看點

【NLG】(四)文本生成評價名額—— diversity原理及代碼示例

前奏:

【NLG】(一)文本生成評價名額——BLEU原理及代碼示例

【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)
           

繼續閱讀