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越小,其所需的编码位也越少,这样也就
  说明了当前的语言模型能比较好地表达该文本。


转自:http://blog.chinaunix.net/u1/58264/showart_1333620.html

个人工具
工具箱