本章介绍语言模型,内容包括:
- Introduction to N-grams
- Estimating N-gram Probabilities
- Evaluation and Perplexity
- Smoothing
Introduction to N-grams
Probalilistic Language Models(概率语言模型)的首要任务是估计一个字符串序列或者句子出现的可能性大小
自然的,可以定义
c(x1,x2,⋯,xn)
为在训练集中句子
x1x2⋯xn
出现的次数,
N
是训练集中句子的数目,直接定义
这个模型的泛化能力很差,那些在训练集中没有出现的句子,它的概率就强制为0了。
假设
现在的目标变成估计
最简单的模型即Unigram model,每个词出现的概率与上下文无关,
Bigram model:认为每个单词的出现只与它的前一个单词相关,
我们也可以使用
4
元模型,
Estimating N-gram Probabilities
以二元模型为例,采用最大似然估计(Maximum Likelihood Estimate),得到参数如下:
只需要用全部语料库中连着出现
一些公开的语言模型:
Evaluation and Perplexity
如何评估模型?首先我们根据training set(训练集数据)求得模型参数,然后使用新的数据集(test set)来测试所建立语言模型的性能。Train set和Test set属于同一领域时,训练出的语言模型的准确性就高,对test set的预测性就越好。倘若两者属于不同领域,那么所训练的模型就未必好。
- Extrinsic evaluation:根据一个具体的任务,训练两个语言模型A和B,然后使用大量数据来监测A和B,比较两者的准确率,这会消耗大量时间
- Intrinsic evaluation:Perplexity
Smoothing
在 2 <script type="math/tex" id="MathJax-Element-17">2</script>元语言模型中,很多单词对出现的次数为0,多元模型中情况更甚,另外,很可能我们使用的train set数据中计算的某个单词对概率为0,但是在test set中确实真实存在的,采用平滑技术解决零概率的问题
- Add-one Smoothing
Add-one Smoothing不适用于N-grams,通常用于平滑其他NLP模型,如文本分类,以及一些零概率出现比较少的情况。
更一般的形式是Add-k Smoothing
- Interpolation
有时我们需要将多种语言模型——trigram(三元)、bigram(二元)、unigram(一元)模型混合使用,这就需要使用插值方法。
如何设置λ呢?把原有的train set数据分成两份,一份继续作为train set(训练语料),用于初始的频率估计;另一份用来改善最初的频率估计,这一份便称为“held-out data”