主要学习资料是cs224n的notes和Michael Collins的notes,和宗成庆的统计自然语言处理,这里并不是一个完整的翻译笔记,而是在阅读的过程中对其中不懂的东西的一些解释,以及避免遗忘做的一些笔记,当然初入NLP,难免对一些知识理解不透或者有所偏差。
N-Gram
这里首先有个语料库,记录了很多条句子,然后预测给定句子出现的概率。给定一个句子,这里句子的长度为n,也就是,第i个单词用字母表示,那么概率公式表示为:
使用马尔科夫假设第i个单词出现只与前面几个单词有关,这里如果和前面的全部单词有关,则有:
如果是TRIGRAM LANGUAGE MODELS ,有
即,而
这里如果我们使用bigram模型的话,且 ,该式子就变为如下:
摘抄这个博客举的例子:
假设语料库总词数为13,748
词和词频表如下所示:
bigram模型的参数,词序列频度:
那么对于句子
I want to eat Chinese food
,其概率
这里讲一下参数个数是,可以从上面的第二个图中看到,是词序列频度的大小。
Evaluating Language Models:Perplexity
这里给出了评估语言模型的指标——困惑度,选取一些句子,这些句子不在语料库中,也就是新的句子,用表示第i个句子,其中第i个句子又由单词组成,那么对于这些测试的句子,计算所有句子的概率积:
直观的感受是该结果越大,说明语言模型越好。[至于此处为什么,我也讲不清楚,可以理解成模型对未知句子的预测能力吧]
这里设第i个句子的长度是,那么记,定义平均log概率如下:
定义困惑度为,其中。于是有困惑度越低,语言模型在未知数据上表现越好,最后给出了对于词汇表为50000时,trigram模型的困惑度是74,bigram模型的困惑度是137,unigram模型的困惑度是955
Smoothed Estimation of Trigram Models
比较常见的两种平滑技术 linear interpolation和 discounting methods。
1. Linear interpolation
这个主要的思想是将上面三个评估相加,如下:
其中 且
那么如何得到参数呢,这里用到log似然估计,其中选取held-out data(记 development data),这部分数据独立于training和test数据,其中记为development data中trigram出现的次数,L函数如下:
然后求解如下式子:
当然还有bucketing方法来求解,这里就不记录了,在Michael Collins上有
2. Discounting Methods
notes上讲的也很清楚,就是设置一个参数,且在0到1之间。
然后对于bigram模型来说,将原来的减去作为,这里针对的是语料库,那么本来有,但是变为后就小于1了,这里记
定义如下两个集合:
A(v)表示在语料库中有的,B(v)表示在语料库中没有的,主要是B(v),虽然语料库中没有,但不能为0,所以将其变为N-1 gram,这里变为unigram,具体公式如下:
trigram模型同理,见notes。
那么怎么估计呢,和前面的一样,使用log似然函数,即:
然后给定一组集合{0.1,0.2,0.3,…0.9},然后用上面的公式计算最大值对应的值就为的值。