您的位置:首页 > 其它

srilm 阅读文档13

2011-05-16 11:47 405 查看
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越小,其所需的编码位也越少,这样也就
说明了当前的语言模型能比较好地表达该文本。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: