【简单理解】自然语言处理-平滑方法(Smoothing)
【简单理解】自然语言处理-平滑方法(Smoothing)
简单介绍平滑策略
平滑策略的引入,主要使为了解决语言模型计算过程中出现的零概率问题。零概率问题又会对语言模型中N-gram模型的Perplexity评估带来困难。
零概率问题,就是在计算实例的概率时,如果某个量x,在观察样本库(训练集)中没有出现过,那么该量概率为0,进而会导致整个实例的概率结果是0。
举例:在文本分类的问题中,在计算一句话的概率时,的当一个词语没有在训练样本中出现,该词语的概率为0,使用连乘计算文本出现概率时也为0。这是不合理的,不能因为一个事件没有观察到就武断的认为该事件的概率是0。
主流平滑方法
- Additive smoothing
- Good-Turing estimate
- Jelinek-Mercer smoothing (interpolation)
Additive smoothing
Add-one smoothing
也叫拉普拉斯平滑,下面以 bigram model 为例给出加 1 平滑的模型。
MLE estimate:
Add-1 estimate:
加1平滑通常情况下是一种不算很好的算法,与其他平滑方法相比显得非常差,然而我们可以把加 1 平滑用在其他任务中,如文本分类,或者非零计数没那么多的情况下。
Additive smoothing
对加 1 平滑的改进就是把 1 改成 δ,且 0<δ≤10<δ≤1。
Good-Turing smoothing
基本思想: 用观察计数较高的 N-gram 数量来重新估计概率量大小,并把它指派给那些具有零计数或较低计数的 N-gram
Idea: reallocate the probability mass of n-grams that occur r+1 times in the training data to the n-grams that occur r times.
一般情况下,我们选出现过一次的概率,也就是 Things seen once 这一概念:
Things seen once: 使用刚才已经看过一次的事物的数量来帮助估计从来没有见过的事物的数量。举个例子,假设你在钓鱼,然后抓到了 18 条鱼,种类如下:10 carp, 3 perch, 2 whitefish, 1 trout, 1 salmon, 1 eel,那么
下一条鱼是 trout 的概率是多少?
很简单,我们认为是 1/18
那么,下一条鱼是新品种的概率是多少?
不考虑其他,那么概率是 0,然而根据 Things seen once 来估计新事物,概率是 3/18
在此基础上,下一条鱼是 trout 的概率是多少?
肯定就小于 1/18,那么怎么估计呢?
在 Good Turing 下,对每一个计数 r,我们做一个调整,变为 r*,公式如下,其中 nrnr 表示出现过 r 次的 n-gram。
然后,我们就有
所以,c=1时,
问题
然后,问题来了,如果怎么办?这在 r 很高的情况下很常见,因为在对计数进行计数时(counts of counts),会出现 “holes”。即使没有这个 hole,对很高的 r 来说, 也是有噪音的(noisy)。
所以,我们应该这样来看 :
Interpolation(差值)
差值,简单来讲,就是把不同阶的模型结合起来:
用线性差值把不同阶的 N-gram 结合起来,这里结合了 trigram,bigram 和 unigram。用 lambda 进行加权:
【简单理解】自然语言处理-平滑方法(Smoothing)相关推荐
- Android AIDL(接口定义语言)简单理解和基本使用方法
一.概述 AIDL意思即Android Interface Definition Language,翻过来就是Android接口定义语言,是用于定义服务端和客户端通信接口的一种描述语言,可以拿 ...
- 简单理解判断类型的方法(四种)
判断类型有四种方法(不全但是相对来说挺全了,而且也够用了) 1.typeof 2.instanceof 3.constructor 4Object.prototypy.tostring.call() ...
- java阻塞队列作用_简单理解阻塞队列(BlockingQueue)中的take/put方法以及Condition存在的作用...
简单理解阻塞队列(BlockingQueue)中的take/put方法以及Condition存在的作用 Condition:可以理解成一把锁的一个钥匙,它既可以解锁(通知放行),又可以加锁(阻塞) n ...
- 以拼音输入法(自然语言处理)为例,简单理解隐含马尔可夫模型
最近在学习 语音&搜索 方面的知识,属于从门外汉起步,很多这方面的书在讲解的时候都是要求有相关知识背景或者是一堆公式让像我这样不是学计算机出身而且数学也学得不好的菜鸟看得头晕眼花的,因此特地写 ...
- 深入理解设计模式-简单工厂模式vs工厂方法模式vs抽象工厂模式对比讲解
文章目录 前言 一.简单工厂模式 1.描述 2.特点 3.优缺点 4.类图说明 二.工厂方法模式 1.描述 2.特点 3.适用场景 4.类图说明 5.简单工厂模式与工厂方法模式区别: 三.抽象工厂模式 ...
- 指数平滑方法(一次指数平滑、二次指数平滑、三次指数平滑):理论、代码、参数 介绍(全)
@创建于:20210324 @修改于:20210324 文章目录 特别说明 参考来源 包版本号 1.简介 2.一次指数平滑 2.1 理论介绍 2.2 代码展示 2.3 参数介绍 3. 二次指数平滑 3 ...
- python指数平滑预测_指数平滑方法简介
本文链接:个人站 | 简书 | CSDN 版权声明:除特别声明外,本博客文章均采用 BY-NC-SA 许可协议.转载请注明出处. 指数平滑(Exponential smoothing)是除了 ARIM ...
- 运用深度学习教机器人理解自然语言
运用深度学习教机器人理解自然语言 2016-08-16 16:33 转载 CSDN 1条评论 雷锋网按:本文作者Jonathan是21CT的首席科学家.他主要研究机器学习和人工智能如何使用在文本和知识 ...
- Efficient Methods for Natural Language Processing: A Survey自然语言处理有效方法综述
Efficient Methods for Natural Language Processing: A Survey 关于自然语言处理有效方法的一个综述,近来关于自然语言处理已经取得了非常显著的结果 ...
最新文章
- 在 CUDA C/C++ kernel中使用内存
- Android:项目关联Library
- 三角形css_纯 CSS 实现绘制各种三角形(各种角度)
- Problem 77:Prime summations
- Java bitset转string_JAVA 假如String01010 我要怎样把它转成bitset?
- 微软开源计算机视觉专题库,含分类、检测、分割、关键点、跟踪、动作识别等主流方向...
- XSSFWorkbook 设置单元格样式_如何设置Excel单元格才能只输入数字!
- TensorFlow 2.0和PyTorch谁更好?大牛们争了好几天
- aes js 加盐值 解密_cryptoJS AES 加解密简单使用
- vue | 基于vue的城市选择器和搜索城市对应的小区
- STL源码剖析(三)
- qt linux 视频教程,详解 QT 显示视频 Linux下 Qt 和 Xv实现
- 适配各种Windows分辨率,为DPI添加感知,当在高DPI时,禁用WINFORM缩放等。
- px4仿真无法起飞问题(Failsafe enabled: no datalink)
- 对计算机课程的意见和建议对老师,对老师教学工作的一点建议和意见(精选5篇)...
- where is java_Linux下的搜索查找命令的详解(whereis)
- java实现多张图片同时上传
- 利用Matlab将任意曲线旋转任意角度
- MATLAB - 八个常用函数入门标量函数可视化
- servers split sql_SQL中实现SPLIT函数几种方法总结(必看篇)