N-gram基本原理
N-gram模型是一种语言模型(Language Model,LM),语言模型是一个基于概率的判别模型,它的输入是一句话(单词的顺序序列),输出是这句话的概率,即这些单词的联合概率(joint probability)。

N-gram本身也指一个由N个单词组成的集合,考虑单词的先后顺序,且不要求单词之间互不相同。常用的有 Bi-gram (N=2N=2N=2) 和 Tri-gram (N=3N=3N=3),一般已经够用了。例如在上面这句话里,我可以分解的 Bi-gram 和 Tri-gram :
Bi-gram : {I, love}, {love, deep}, {love, deep}, {deep, learning}
Tri-gram : {I, love, deep}, {love, deep, learning}N-gram中的概率计算

联合概率的简单推导过程:A,B,C三个有顺序的句子。
由于
P(C/(A,B))=P(A,B,C)/P(A,B)
P(B/A) = P(A,B)/P(B)
所以
P(C/(A,B))=P(A,B,C)/(P(B/A) *P(B))
P(A,B,C) = P(C/(A,B))*P(B/A) *P(B)
所以我们可以很容易的得到上面的多个单词的联合概率,但是由于存在参数空间过大等问题,我们可以仅仅考虑之前的一个或者几个词的前提条件的联合概率,可以降低时间复杂度,减少计算量。

然后通过极大似然函数求解上面的概率值

是从整个数据库中去计算上述的概率值,而不是一整句话。
1、可以用于词性标注,类似成多分类的情况:
例如:我爱中国!
判断爱的词性可以通过P(词性i/(名词我出现,爱字出现))=P(名词我出现,爱字不同的词性)/P(名词的我出现,爱字所有出现的次数)
2、可以用于垃圾短信分类:

- 步骤一:给短信的每个句子断句。
- 步骤二:用N-gram判断每个句子是否垃圾短信中的敏感句子。
- 步骤三:若敏感句子个数超过一定阈值,认为整个邮件是垃圾短信。
3、用于分词作用
在NLP中,分词的效果很大程度上影响着模型的性能,因此分词甚至可以说是最重要的工程。用N-gram可以实现一个简单的分词器(Tokenizer)。同样地,将分词理解为多分类问题:X表示有待分词的句子,Yi表示该句子的分词方案:
X="我爱深度学习"
Y1={"我","爱深","度学习"}
Y2={"我爱","深","度学","习"}
Y3={"我","爱","深度学习"}
p(Y1)=p(我)p(爱深∣我)p(度学习∣爱深)
p(Y2)=p(我爱)p(深∣我爱)p(度学∣深)p(习∣度学)
p(Y3)=p(我)p(爱∣我)p(深度学习∣爱)
三个概率中,“我爱”可能在语料库中比较常见,因此p(爱∣我)p(爱|我)p(爱∣我)会比较大,然而“我爱深”这样的组合比较少见,
于是p(爱深∣我)p(爱深|我)p(爱深∣我)和p(深∣我爱)p(深|我爱)p(深∣我爱)都比较小 ,因此第三种分词方案最佳。
语音识别和机器翻译中也用到。
N-gram中的数据平滑方法
由于N-gram的N越大,模型效果越好。这在直观意义上是说得通的,毕竟依赖的词越多,我们获得的信息量越多,对未来的预测就越准确。然而,语言是有极强的创造性的(Creative),当N变大时,更容易出现这样的状况:某些n-gram从未出现过,这就是稀疏问题。
n-gram最大的问题就是稀疏问题(Sparsity)。例如,在bi-gram中,若词库中有20k个词,那么两两组合就有近2亿个组合。其中的很多组合在语料库中都没有出现,根据极大似然估计得到的组合概率将会是0,从而整个句子的概率就会为0。最后的结果是,我们的模型只能计算零星的几个句子的概率,而大部分的句子算得的概率是0,这显然是不合理的。
因此,我们要进行数据平滑(data Smoothing),数据平滑的目的有两个:一个是使所有的N-gram概率之和为1,使所有的n-gram概率都不为0。它的本质,是重新分配整个概率空间,使已经出现过的n-gram的概率降低,补充给未曾出现过的n-gram。


为了解决稀疏问题和参数空间过大的问题,从机器学习的角度看N-gram模型:


vi*hi代表利用神经网络学习出来的预测值,利用预测值与真实的概率值的差值作为损失函数。

v和h通过上述这种网络结构进行学习,然后经过softmax函数计算出概率值然后和目标值做差进行更新参数v,h。
每一个神经元在上一个单词的前提下预测此单词的概率,最终把所有的计算出来,相乘就是最终的结果。在RNN上的应用

RNN结构比神经网络结构好是因为可以减少参数。

N-gram基本原理的更多相关文章
- Ognl表达式基本原理和使用方法
Ognl表达式基本原理和使用方法 1.Ognl表达式语言 1.1.概述 OGNL表达式 OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,他是一个 ...
- Android自定义控件之基本原理
前言: 在日常的Android开发中会经常和控件打交道,有时Android提供的控件未必能满足业务的需求,这个时候就需要我们实现自定义一些控件,今天先大致了解一下自定义控件的要求和实现的基本原理. 自 ...
- HMM基本原理及其实现(隐马尔科夫模型)
HMM(隐马尔科夫模型)基本原理及其实现 HMM基本原理 Markov链:如果一个过程的“将来”仅依赖“现在”而不依赖“过去”,则此过程具有马尔可夫性,或称此过程为马尔可夫过程.马尔可夫链是时间和状态 ...
- 动态令牌-(OTP,HOTP,TOTP)-基本原理
名词解释和基本介绍 OTP 是 One-Time Password的简写,表示一次性密码. HOTP 是HMAC-based One-Time Password的简写,表示基于HMAC算法加密的一次性 ...
- ZooKeeper基本原理
ZooKeeper简介 ZooKeeper是一个开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等. ZooKeeper设计目的 1. ...
- GBDT的基本原理
这里以二元分类为例子,给出最基本原理的解释 GBDT 是多棵树的输出预测值的累加 GBDT的树都是 回归树 而不是分类树 分类树 分裂的时候选取使得误差下降最多的分裂 计算的技巧 最终分裂收益按照下面 ...
- 全文检索引擎 Solr 部署与基本原理
全文检索引擎 Solr 部署与基本原理 搜索引擎Solr环境搭建实例 关于 solr , schema.xml 的配置说明 全文检索引擎Solr系列-–全文检索基本原理 一.搜索引擎Solr环境搭建实 ...
- 相机位姿估计0:基本原理之如何解PNP问题
关键词:相机位姿估计 PNP问题求解 用途:各种位姿估计 文章类型:原理 @Author:VShawn(singlex@foxmail.com) @Date:2016-11-18 @Lab: CvLa ...
- geohash基本原理
geohash基本原理是将地球理解为一个二维平面,将平面递归分解成更小的子块,每个子块在一定经纬度范围内拥有相同的编码,这种方式简单粗暴,可以满足对小规模的数据进行经纬度的检索 目录: 经纬度常识 认 ...
- Struts框架——(一)用Servlet + JSP演示Struts基本原理
一. 用Servlet + JSP演示Struts基本原理 struts是开源项目.它通过采用 Java Servlet/JSP 技术,实现了基于Java EE Web应用的MVC的应用框架.Stru ...
随机推荐
- 德承工控机DA-1000 RS-485串口设置
由于一般情况下调试串口常使用RS-485转USB接口来进行调试,但是USB接口在长时间的调试下,接口容易松动,通讯也比较不稳定容易中断,所以改为DB9接口的RS-485来调试,稳固不松脱.抗干扰能力强 ...
- Uniapp input的v-model问题
前情 uni-app是我很喜欢的跨平台框架,它能开发小程序,H5,APP(安卓/iOS),对前端开发很友好,自带的IDE让开发体验也很棒,公司项目就是主推uni-app. 坑位 最近在做一个input ...
- R数据分析:生存数据预测模型的建立和评价(二)timeROC与决策曲线
上篇文章依照jama surgery的一篇文章给大家写了生存数据预测模型评价的C指数.校准曲线和模型验证结果的做法,其实生存数据预测模型的评价方法还有很多,本期接着往下看. Time-dependen ...
- IOS多线程之NSOperation(1)
IOS多线程之NSOperation(1) NSOperation 是 OC 语言中基于 GCD 的面向对象的封装: 提供了一些用 GCD 不好实现的功能: 线程的生命周期由系统自动管理. NSOpe ...
- 微信小程序无法抓包
1.问题 1.1. 问题描述 夜神模拟器中,微信小程序请求超时(是因为开了抓包程序) 1.2. 问题截图 2.解决问题 2.1. 步骤 开启调试模式,之后重启小程序 2.2. 结果
- JSchException: Algorithm negotiation fail问题解决之路
最近一个需求用到了SFTP上传功能,同事之前已经封装好了SFTP工具类,用的是JSch,本着不要重复造轮子的想法,就直接拿来用了.交代下环境,JDK为1.7,JSch版本为0.1.51.自测通过.测试 ...
- Qt音视频开发29-Onvif云台控制
一.前言 云台控制也是onvif功能中最常用的,最常用的功能排第一的是拿到视频流地址,排第二的就是云台控制了,云台控制的含义就是对带云台的摄像机进行上下左右的移动,一般云台摄像机都是带有一个小电机,一 ...
- [转]Linux系统下的GCC编译过程、使用命令详解(多文件编译、动态库、静态库)
Linux系统下的GCC编译过程.使用命令详解(多文件编译.动态库.静态库) [Linux]gcc简介+编译过程 翻译 搜索 复制
- JMeter 线程组全家桶教程
宝子们,今天咱就来唠唠 JMeter 里那些超重要的线程相关的玩意儿,学会了它们,你就能在性能测试的世界里 "横冲直撞" 啦! 一.线程组 -- 性能测试的主力军 想象一下,你开了 ...
- 收藏几个常用的vue自定义组件,抄自 他人,以防丢失
在 Vue,除了核心功能默认内置的指令 ( v-model 和 v-show ),Vue 也允许注册自定义指令.它的作用价值在于当开发人员在某些场景下需要对普通 DOM 元素进行操作. Vue自定义指 ...