1 问题的提出

由于在现实生活中,我们的观察尺度有限,我们的样本(输入)很可能没有办法包含所有可能的情况,那么我们怎么去处理先前看不见的事件呢?

举个例子,莎士比亚使用了30000个双连词(bigram),然而我们总共有V^2=8.44亿个可能的双连词,所以,99.96%的可能的双连词都没有出现过,那是不是意味着,任何句子包含有其中某一种双连词的概率就为0呢?同样的问题有很多,当我们面对的升起问题时,我们联系观察了20天,即我们手里有20个样本,这20个样本都显示,明天太阳会升起,但是是不是意味着“明天太阳会升起”这个事件发生的概率是100%呢?

当然,我们不能否认,在我们设置的所有事件里,某些事件发生的概率真的是0,也就意味着它们真的不会发生,但是这种情况往往比我们认为的要少。在另一方面,这些我们从有限的样本中推理出出不会发生的事件很可能只是一个小概率事件,这些事件发生的可能性会比样本的估计值要大。那么,我们怎么去评估这些模型呢?

首先,我们会定义一个评估度量标准(evaluation metric),通常被称为得分函数(scoring function),我们想去测量模型的预言与真实情况的相似度。

其次,我们会用可见的训练集进行训练,也许我们会在留存数据上进行协调(tune),为了对不可见的数据进行仿真。

最后,我们会在不可见的测试集上进行测试,不过通常跟训练集是一个集合。测试数据必须要从训练集和留存数据中解体(disjoint),通过他们的得分来比较模型。

在文本分类中,有一种效应为Zipf’s Law,有兴趣的朋友可以去了解一下长尾现象(long tail phenomenon)。这个效应是这样描述的:

高频率发生的事件是少量的,低频率发生的事件是大量的。你可以迅速收集高频率事件的统计数据,却需要很长时间去收集低频率事件的合适的统计数据。结果就造成了我们的估计很自然地变得很稀疏,大量我们想要评估的数据甚至都没有计数。解决的办法就是要对看不见的n-元模型进行似然估计。处理的办法通常有两种:

第一种:使用一种完全不同的评估技术

其中包括拉普拉斯平滑(Add-1(Laplace) Smoothing), Good-TuringDiscounting,核心思想是取代MLE估计

第二种:将一个复杂的模型和一个更简单的模型联合使用。

其中包括线性插值(Linear Interpolation),修改Knesser-Ney平滑(Modified Knesser-Ney smoothing),核心思想是使用的二元概率去计算的三元概率

平滑算法就像是罗宾汉(Robin Hood)一样,劫富济贫:

2.拉普拉斯平滑(Laplace smoothing)

明天太阳会升起吗?

拉普拉斯平滑是拉普拉斯在研究太阳升起问题时提出的。

其中,第n+1天,我们观察到之前太阳升起了s次,则今天太阳升起的概率为

拉普拉斯平滑既然被称作加一平滑,自然是在每一个计数上加一。我们以一个词典为例,我们从一个大小为V的词典里,独立得取出N个词,我们有一元概率:

每个计数上加一:

结果为:

二元概率:

这里有一个问题,就是加一算法从可见事件到不可见事件移动的概率块太多了。

我们重组一下伪计数:

对一元模型:

对二元模型:

我们可以对比重组之后的二元计数:

所以我们可以总结一下拉普拉斯平滑:

优点:简单,便于实现

缺点:转移太多的概率

回到之前的莎士比亚问题上,V=30000个词,’the’出现25545次,’the’的概率为

既然拉普拉斯平滑在N元模型上的效果并不好,那么我们就会有更好的平滑算法

3. Good-Turing smoothing

现在假设你正在钓鱼,现在湖里有八种鱼:carp, perch, whitefish, trout, salmon, eel,catfish, bass,你现在已经钓到了10 carp, 3 perch, 2 whitefish, 1 trout, 1salmon, 1 eel = 18 fish。所以,下次钓鱼钓到没钓过的种类(catfish or bass)的概率是多少呢?

下次钓鱼又钓到trout的概率是多少呢?我们一会来回答这个问题。

现在定义:是频率x出现的次数。

所以,,被看见10次的鱼的种类数为1(carp),,被看见1次的鱼的种类数为3 (trout, salmon, eel)。

因此,去评估一个没见过的种类:

其他的评估都要向下调整,来适应未出现的概率:

二元频率的频率于GT重组估计:

GT平滑的二元概率:

我们再重新回顾一下Good-Turing smoothing的思想:使用仅发生一次的事件的总频率,去估计可见事件到不可见事件的转移概率。

其中,Nc代表发生c次的时间的个数。

将发生n次的事件的概率块分配给发生n-1次的事件。

Nn发生了n次,总频率为n⋅Nn

所以,发生n-1次的事件的概率就变成:

Good-Turing代替原始的Cn-1,变成了新的C*n-1:

事件w发生n-1次的极大似然估计为:

事件w发生n-1次的Good-Turing估计为:

Good-Turing无法解决的问题有:

1.     无法处理更频繁的事件

2.     不对每一个n都观察事件

Good-Turing的变体:Simple Good-Turing

将Nn替换成一个适应函数f(n):

4.线性插值(Linear Interpolation)

假如我们没有看到”Bob was reading”,我们看到了“__ was reading”,我们将会估计P(reading |’Bob was’) =0而不是 P(reading | ‘was’) > 0。

所以我们尝试着使用n-1元概率去估计n-元概率:

我们从来不会看到“Bob was reading”,但是我们可能会看到“__ was reading”,或者更直接的看到“__ reading”。

λ的上下文条件:

但是现在面临一个问题:怎样设置λ。我们有两种思想:

A:留存估计

将数据分成训练数据和留存数据,根据训练数据评估模型,利用留存数据(或者一些优化技术)去寻找使模型表现更好的λ(有点像k-折叠交叉验证)。当然,λ也可以取决于Wi-n...Wi-1

B:λ是Wi-n...Wi-1频率的函数

其他的平滑算法还包括绝对折扣(Absolute discounting),Kneser-Ney smoothing,和bayesian prior Smoothing.其中bayesian prior Smoothing为:

平滑(smoothing)相关推荐

  1. python 曲线平滑_曲线平滑(smoothing)

    曲线平滑 Savitzky-Golay滤波器 It uses least squares to regress a small window of your data onto a polynomia ...

  2. Opencv图像处理之平滑(Smoothing)模糊(Blurring)操作

    写作参考 (1)OpenCV (2)OpenCV中文论坛 (3)Richard Szeliski写的Computer Vision: Algorithms and Applications 我对Ope ...

  3. OpenCV图像处理_2:平滑smoothing模糊blurring操作

    如之前所述,我个人在这个栏目下的所有文章大都是拷贝,拷贝和粘贴,有需要请阅读原文: OpenCV,OpenCV中文论坛,和Richard Szeliski写的Computer Vision: Algo ...

  4. NLP学习06_评估语言模型smoothing

    估计语言模型的概率 Unigram 首先统计语料库中所有的单词个数,然后统计每个单词出现的概率, 计算整句的概率 但是这种LM中,如果一个句子中的单词在语料库中没有出现,那么这个词的概率为0,这就导致 ...

  5. 蒙特卡洛粒子滤波定位算法_粒子滤波——来自哈佛的详细的粒子滤波器教程【1】...

    本文原版链接:https://www.seas.harvard.edu/courses/cs281/papers/doucet-johansen.pdf 本文是哈佛大学相关研究人员于2008年发表的一 ...

  6. 贝叶斯推断方法 —— 从经验知识到推断未知

    贝叶斯推断方法 -- 从经验知识到推断未知 机器学习基础算法python代码实现可参考:zlxy9892/ml_code 1 什么是贝叶斯 ​ 在机器学习领域,通常将监督学习 (supervised ...

  7. 2014-04-03研究笔记整理

    利用cca进行fmri分析 在肖柯的硕士毕业论文中<基于CCA的fMRI时空模型数据处理方法的研究>,他的总体思路是利用cca提取出fmri图像在时间和空间上两个相关系数,也就是两个特征, ...

  8. GLSL实现滤镜效果

    http://blog.csdn.net/neng18/article/details/38083987 "浮雕"图象效果是指图像的前景前向凸出背景.常见于一些纪念碑的雕刻上,要实 ...

  9. NLP-基础知识-002 (语言模型)

    一.Noisy Channel Model p(text|source) = k * p(source|text)P(text) ----> Noisy Channel Model主要通过贝叶斯 ...

最新文章

  1. 一个递归函数的漏洞及优化
  2. BoW模型用于图像检索的一般化流程
  3. Python3.6全栈开发实例[006]
  4. 菜鸟php ajax,AJAX ASP/PHP
  5. jquery数据折叠_通过位折叠缩小大数据
  6. LeetCode 654. 最大二叉树(递归)
  7. Python可变传参: *args和**kwargs
  8. VS2010 php 插件配置
  9. NET环境下有关打印页面设置、打印机设置、打印预览对话框的实现-
  10. Stanford机器学习---第三讲. 逻辑回归和过拟合问题的解决 logistic Regression Regularization
  11. CCIE学习(40)—— OSPF设计与LSA类型(三)
  12. 实战Node—幼教平台
  13. 卫星通信知识点梳理(一)
  14. ABBYY FineReader OCR图片文字识别软件安装应用
  15. laravel8的 Migration、Factory、Seeder
  16. STM32存储器 — 2STM32存储器知识的相关应用(IAP、Bit Banding)
  17. python抓取朋友圈动态_如何利用Python网络爬虫爬取微信朋友圈动态--附代码(下)...
  18. 计算机基础做表格,表格的制作计算机基础.doc
  19. RxJava在Android移动端开发中的实战应用之一
  20. Java版吃豆游戏及源码

热门文章

  1. mel编程相较于c语言怎么样,关于mel脚本语言的编写与使用?
  2. 输入文字就能让ai生成绘画?用什么软件好
  3. 工业机器人喷涂实操工作站
  4. chmod参数u+s
  5. Jquery插件Thickbox的使用
  6. 西安电子科技计算机科学与技术,刘志镜 - 西安电子科技大学 - 计算机科学与技术学院...
  7. 淘宝的商品主图视频如何批量下载、抓取的?
  8. iphone通过itms-services协议来安装软件,显示证书无,效解决方法
  9. smartqq java_基于SmartQQ协议的QQ聊天机器人-4
  10. 【农业害虫识别论文一】Crop pest classification based on deep convolutional neural network and transfer learning