好好睡觉
熬夜的不要

语言模型困惑度

PP(S)=2^{-\frac{1}{N}\sum log(P(w_i))}

上面式子中S就是一句话,N 是这句话的长度,如果是中文,那就是分词后词的个数,N的作用实际上也相当于标准化,使得不同长度的句子困惑度可以在一个量级下比较。
Python实现如下

def perplexity(sentence, uni_gram_dict, bi_gram_dict):
    sentence_cut = list(jieba.cut(sentence))
    V = len(one_gram_dict)
    sentence_len = len(sentence_cut)
    p=1     # 概率初始值
    k=0.5   # ngram 的平滑值,平滑方法:Add-k Smoothing (k<1)
    for i in range(sentence_len-1):
        two_word = "".join(sentence_cut[i:i+2])
        p *=(bi_gram_dict.get(two_word,0)+k)/(uni_gram_dict.get(sentence_cut[i],0)+k*V)

    return pow(1/p, 1/sentence_len)
赞(0) 打赏
未经允许不得转载:数据谷 » 语言模型困惑度
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏