srilm 阅读文档13

TextStats.h TextStats.cc
文档作者:jianzhu
创立时间:08.09.11
--------------------------------------
1、概述
--------------------------------------
    这两个文件定义了一个TextStats类,该类主要用于计算句子集
的perplexity值。
TextStats类
    该类提供了如下函数
    a) 构造函数
    b) 重置函数
    c) 叠加函数
    d) 重载的全局输出运算符<<
--------------------------------------
2、函数功能解释
--------------------------------------
a) 构造函数
<src>
0    TextStats() : prob(0.0), zeroProbs(0),
1      numSentences(0), numWords(0), numOOVs(0)
2   {
3   }
</src>
    功能:用于初始化刚创建的TextStats对象
    
    细解:第0-1行通过成员初始化列表的方式初始化TextStats对象
    的成员变量。
b) 重置函数
<src>
0  void reset() 
1  { 
2   prob = 0.0, zeroProbs = 0,
3   numSentences = numWords = numOOVs = 0; 
4  }
</src>
    功能:用于将当前对象的成员变量值置为0。
    
    细解:第2-3行充分利用了','运算符和'='运算符的特性,将各成员
    变量值置为0。
c) 叠加函数
<src>
0  TextStats &
1  TextStats::increment(const TextStats &stats)
2  {
3      numSentences += stats.numSentences;
4      numWords += stats.numWords;
5      numOOVs += stats.numOOVs;
6      prob += stats.prob;
7      zeroProbs += stats.zeroProbs;
8
9      return *this;
10 }
</src>
    功能:将传入的TextStats对象的成员变量值叠加到当前对象中
    
    细解:第3-7行将stats中的成员变量值叠加到当前对象中。
    第8行返回当前对象的引用。
d) 重载的全局输出运算符<<
<src>
0  ostream &
1  operator<< (ostream &stream, const TextStats &stats)
2  {
3
4      stream << stats.numSentences << " sentences, " 
5             << stats.numWords << " words, "
6         << stats.numOOVs << " OOVs" << endl;
7      if (stats.numWords + stats.numSentences > 0) {
8       stream << stats.zeroProbs << " zeroprobs, "
9             << "logprob= " << stats.prob;
10
11      int denom = stats.numWords - stats.numOOVs - stats.zeroProbs
12           + stats.numSentences;
13
14      if (denom > 0) {
15          stream << " ppl= " << LogPtoPPL(stats.prob / denom);
16      } else {
17          stream << " ppl= undefined";
18      }
19
20      denom -= stats.numSentences;
21
22      if (denom > 0) {
23          stream << " ppl1= " << LogPtoPPL(stats.prob / denom);
24      } else {
25          stream << " ppl1= undefined";
26      }
27
28      stream << endl;
29     }
30      return stream;
31  }
</src>
    功能:用于对当前对象中的成员变量进行perplexity计算,同时输出计算结果
    
    细解:第4-6行首先输出当前对象中的各成员变量值。
    第7-29行输出通过对当前对象成员变量调用LogPtoPPL进行perplexity计算的结果。
    第30行返回输出流stream的引用。
  
--------------------------------------
知识点:
--------------------------------------
Perplexity 计算
      本类通过调用LogPtoPPL对已经求好P(W1...Wn)^1/N运算的概率计算其倒数来求得
   当前分析文本的perplexity。通过运算“stats.prob / denom”可以发现,当前求出的
   perplexity是对每个词来说的,如果使用编码的方法来表达该概念,即每个词需要用
   几个字节来表示,因此每个词的perplexity越小,其所需的编码位也越少,这样也就
   说明了当前的语言模型能比较好地表达该文本。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值