N-gram语言模型简单介绍
N-gram语言模型
考虑一个语音识别系统,假设用户说了这么一句话:“I have a gun”,因为发音的相似,该语音识别系统发现如下几句话都是可能的候选:1、I have a gun. 2、I have a gull. 3、I have a gub. 那么问题来了,到底哪一个是正确答案呢?
一般的解决方法是采用统计的方法。即比较上面的1、2和3这三句话哪一句在英语中出现的概率最高,哪句概率最高就把哪句返回给用户。那么如何计算一个句子出现的概率呢?说白了就是“数数”的方法。但是即使是“数数”也有很多种数法,其中,最简单的策略如下:
给定一个语料库,数出其中所有的长度为4的句子的个数,设为N,然后再看在这N个长度为4的句子中,“I have a gun”出现了多少次,不妨设为N0,那么句子“I have a gun”的概率就是N0/N。其它两个句子的概率也这么计算。
上述的这种数数方法,从逻辑上讲是完全OK的,但是因为自然语言的灵活多变性,以及语料库的规模总是有限的,对于一个稍长一点的句子,很可能语料库中根本就没有。比如说下面这个句子:“I am looking for a restaurant to eat breakfast”,直观上看,这句话在语料库中应该出现次数很多吧?但是如果把这句话输入到Google的搜索框中,点击搜索,你会发现返回的结果中根本就没有完全匹配上的。所以,我们需要提出更加有效的“数数”方法。
为了把事情说清楚,需要引入一些简单的数学符号。
1、word序列:w1, w2, w3, … , wn
2、链式规则:P(w1, w2, w3, … , wn)=P(w1)P(w2|w1)P(w3|w1w2)P(w4|w1w2w3)…P(wn|w1w2…wn-1)
好了,我们想要计算“I have a gun”的概率,也就是计算P(I,have,a,gun),按照链式规则,则有:
P(I,have,a,gun)=P(I)P(have|I)P(a|I,have)P(gun|I,have,a)
但是事情并没有得到简化,例如要计算P(gun|I,have,a),按照条件概率公式展开:
P(gun|I,have,a) = P(I,have,a,gun)/P(I,have,a)
发现了什么?为了计算P(gun|I,have,a),我们需要先计算P(I,have,a,gun)和P(I,have,a)。哎?P(I,have,a,gun)不就是我们一开始想要计算的值吗?所以绕了一圈,我们又回到了原地?
好了,现在我们来整理一下思路。
对于一个句子,其可以表示为一个word序列:w1, w2, w3, … , wn。我们现在想要计算句子出现的概率,也就是计算P(w1, w2, w3, … , wn)。这个概率我们可以直接用数数的方法求解,但是效果并不好,所以我们利用链式规则,把计算P(w1, w2, w3, … , wn)转化为计算一系列的乘积:P(w1)P(w2|w1)P(w3|w1w2)P(w4|w1w2w3)…P(wn|w1w2…wn-1)。但是转化之后,问题并没有变得简单。怎么办?
N-gram这时候就派上用场了。
对于1-gram,其假设是P(wn|w1w2…wn-1)≈P(wn|wn-1)
对于2-gram,其假设是P(wn|w1w2…wn-1)≈P(wn|wn-1,wn-2)
对于3-gram,其假设是P(wn|w1w2…wn-1)≈P(wn|wn-1,wn-2,wn-3)
依次类推。
所以:
在1-gram模型下:
P(w1, w2, w3, … , wn)=P(w1)P(w2|w1)P(w3|w1w2)P(w4|w1w2w3)…P(wn|w1w2…wn-1)
≈P(w1)P(w2|w1)P(w3|w2)P(w4|w3)…P(wn|wn-1)
在2-gram模型下:
P(w1, w2, w3, … , wn)=P(w1)P(w2|w1)P(w3|w1w2)P(w4|w1w2w3)…P(wn|w1w2…wn-1)
≈P(w1)P(w2|w1)P(w3|w1w2)P(w4|w2w3)…P(wn|wn-2wn-1)
在3-gram模型下:
P(w1, w2, w3, … , wn)=P(w1)P(w2|w1)P(w3|w1w2)P(w4|w1w2w3)…P(wn|w1w2…wn-1)
≈P(w1)P(w2|w1)P(w3|w1w2)P(w4|w1w2w3)…P(wn|wn-3wn-2wn-1)
假设我们采用的是1-gram模型,那么:
P(I,have,a,gun)=P(I)P(have|I)P(a|have)P(gun|a).
然后,我们再用“数数”的方法求P(I)和其他的三个条件概率:
P(I)=语料库中I出现的次数 / 语料库中的总词数
P(have|I) = 语料库中I和have一起出现的次数 / 语料库中I出现的次数。
总结,本文只是对N-gram做了非常简单的介绍,目的在于简单易懂,但是不够严谨。感兴趣的同学可以进一步查阅相关的资料。在任何一本关于自然语言处理的书上都能够找到N-gram的内容。
N-gram语言模型简单介绍的更多相关文章
- [原创]关于mybatis中一级缓存和二级缓存的简单介绍
关于mybatis中一级缓存和二级缓存的简单介绍 mybatis的一级缓存: MyBatis会在表示会话的SqlSession对象中建立一个简单的缓存,将每次查询到的结果结果缓存起来,当下次查询的时候 ...
- 利用Python进行数据分析(7) pandas基础: Series和DataFrame的简单介绍
一.pandas 是什么 pandas 是基于 NumPy 的一个 Python 数据分析包,主要目的是为了数据分析.它提供了大量高级的数据结构和对数据处理的方法. pandas 有两个主要的数据结构 ...
- 利用Python进行数据分析(4) NumPy基础: ndarray简单介绍
一.NumPy 是什么 NumPy 是 Python 科学计算的基础包,它专为进行严格的数字处理而产生.在之前的随笔里已有更加详细的介绍,这里不再赘述. 利用 Python 进行数据分析(一)简单介绍 ...
- yii2的权限管理系统RBAC简单介绍
这里有几个概念 权限: 指用户是否可以执行哪些操作,如:编辑.发布.查看回帖 角色 比如:VIP用户组, 高级会员组,中级会员组,初级会员组 VIP用户组:发帖.回帖.删帖.浏览权限 高级会员组:发帖 ...
- angular1.x的简单介绍(二)
首先还是要强调一下DI,DI(Denpendency Injection)伸手获得,主要解决模块间的耦合关系.那么模块是又什么组成的呢?在我看来,模块的最小单位是类,多个类的组合就是模块.关于在根模块 ...
- Linux的简单介绍和常用命令的介绍
Linux的简单介绍和常用命令的介绍 本说明以Ubuntu系统为例 Ubuntu系统的安装自行百度,或者参考http://www.cnblogs.com/CoderJYF/p/6091068.html ...
- iOS-iOS开发简单介绍
概览 终于到了真正接触IOS应用程序的时刻了,之前我们花了很多时间去讨论C语言.ObjC等知识,对于很多朋友而言开发IOS第一天就想直接看到成果,看到可以运行的IOS程序.但是这里我想强调一下,前面的 ...
- iOS开发多线程篇—多线程简单介绍
iOS开发多线程篇—多线程简单介绍 一.进程和线程 1.什么是进程 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 比如同时打开QQ.Xcod ...
- iOS开发UI篇—UITabBarController简单介绍
iOS开发UI篇—UITabBarController简单介绍 一.简单介绍 UITabBarController和UINavigationController类似,UITabBarControlle ...
随机推荐
- http协议--笔记
HTTP协议的缺点:1.通信使用明文(不加密),内容可能会被窃听2.不验证通信方的身份,因此有可能遭遇伪装3.无法证明报文的完整性,所以有可能已遭篡改 防止窃听保护信息的几种对策:加密技术通信的加密H ...
- bootstrap's plugin:sthe usage of carousel
if we want use the carousel.js,we need quote it in the page. sample code: <div id="myCarouse ...
- Linux + Apache + PHP 环境搭建
搭建环境: Ubuntu 15.04 Apache 2.4.16 PHP 5.6.15 1 安装Apache 先安装依赖程序(都安装在 /usr/local/ 目录下) apr-1.5.2.tar.g ...
- Linux -- ls只显示目录
ls没有直接显示目录的选项, 不过根据目录和文件显示的差异,可以搭配grep来实现 方法1: ll | grep "^d" 方法2: ls -F | grep$ "/$& ...
- 批量文件重命名工具-极力推荐 advanced renamer
http://www.advancedrenamer.com/ 功能太强大了,自己慢慢探索吧.
- PAT1008
1008. Elevator (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B The highest building in our city has on ...
- [转载] ASP.NET MVC4使用百度UEDITOR编辑器
前言 配置.net mvc4项目使用ueditor编辑器,在配置过程中遇见了好几个问题,以此来记录解决办法.编辑器可以到http://ueditor.baidu.com/website/downloa ...
- 区间DP 入门
首先我们先需要知道区间是如何用dp来做的,让我们来看一下模板. ; i <= n; i++){//枚举区间里面的个数 ; j <= 能枚举到得最大的pos; j++){ ;//表示在目前能 ...
- pm
如何不被程序员(RD)们嫌弃--写给那些血气方刚的产品经理(PM)http://www.36kr.com/p/212020.html 最近有位刚做 PM(产品经理)的小伙跑来跟我控诉,说公司技术部的 ...
- zf-关于注册码过期
Webroot-index.jsp下 少写了个函数 导致登陆进去不能弹出注册码过期的对话框,函数如下 window.onload = function() { <ww:iterator valu ...