N-gram笔记
ngram是一种在自然语言处理中经常使用的技术,通常来说,我会把它作为一些初步处理和数据分析的方法,也会用来做一些快速模型,其具有可解释性强,实现简单等优点。
原先的理解比较土鳖,最近刚好重新读《统计自然语言处理基础》和《统计自然语言处理》,补充下这块的知识。
背景及主要问题
香农游戏和语言模型问题
香农游戏,即在给定前N个词的情况下,需要尽可能准确预测下一个词。这是语言模型一个比较形象的描述,通常我们所指的语言模型,说白了就是计算某语言片段在上下文的概率。可以认为分别针对两类典型的实际问题:
* 给定前文,给出下一个词的概率分布,也即需要计算
* 给定一篇完整的文章,计算其在某语言生成模型下的似然概率,也即需要计算
ngram方法
对于上述问题,ngram是一种经典的解决方法,其通过估计来作为概率分布。
显然,由于组合爆炸问题,n的范围不能太大,一般来说实际使用中n介于2-3。
而对于ngram模型,最大的问题在于数据稀疏导致的分布估计不准。可以想见,在测试集上统计的大量长尾频率为0和1的ngram组合,往往是随机不精确的。这部分如何处理,通常认为是平滑问题(如何使得分布更加平滑)。
评测方式
对于语言模型(或者ngram模型)的评测方法,可以使用测试集上的似然估计来衡量。通俗来说,就是当一个机器阅读完训练语料后应该能比较高效地把测试语料压缩。
一种办法就是使用信息熵。信息熵本身是衡量压缩一个事件需要的bit位个数。可以通过计算测试集文本的信息熵,来估算一个模型的好坏(Entropy越小,说明压缩效率越高)
去拟合,然后更新- 其中,H是根据之前学习的结果进行学习的树,学习的目标就是MSE。
- 是一维搜索获取的值。
类比泰勒展开式的思路,泰勒展开式相当于用多项式作为弱分类器,来学习任意一个函数在某点附近的情况。
toy实现
根据上述简介,我们非常容易实现一个伪代码
for round...