N-Gram模型

http://www.cnblogs.com/chaosimple/p/3376438.html

N-Gram模型时大词汇连续语音识别中常用的一种语言模型,对中文而言,我们称之为汉语语言模型(CLM, Chinese Language Model)。汉语语言模型利用上下文中相邻词间的搭配信息,在需要把连续无空格的拼音、笔画,或代表字母或笔画的数字,转换成汉字串(即句子)时,可以计算出最大概率的句子,从而实现从到汉字的自动转换,无需用户手动选择,避开了许多汉字对应一个相同的拼音(或笔画串、数字串)的重码问题。

该模型基于这样一种假设,第n个词的出现只与前面n-1个词相关,而与其它任何词都不相关,整句的概率就是各个词出现的概率的乘积。这些概率可以通过直接从语料中统计n个词同时出现的次数得到。常用的是二元的Bi-Gram和三元的Tri-Gram。

在介绍N-Gram模型之前,我们先来做个香农游戏(Shannon Game)。我们给定一个词,然后猜测下一个词是什么。当我说“艳照门”这个词时,你想到的下一个词时什么?我想大家很有可能会想到“陈冠希”,基本上不会有人想到“陈志杰”吧。N-Gram模型的主要思想就是这样的。

对于一个句子T,我们怎么计算它出现的概率呢?假设T是由词序列W1, W2, …, Wn组成的,那么P(T)=P(W1W2…Wn)=P(W1)P(W2|W1)P(W3|W1W2)…P(Wn|W1W2…Wn-1)。

但是这种方法存在两个致命的缺陷:

一个缺陷是参数空间过大,不可能实用化;另外一个缺陷是数据稀疏严重。

为了解决这个问题,我们引入马尔科夫假设:

一个词的出现仅仅依赖于它前面出现的一个或者有限的几个词。

如果一个词的出现仅仅依赖于它前面出现的一个词,我们就称之为Bi-Gram。即:

P(T)=P(W1W2…Wn)=P(W1)P(W2|W1)P(W3|W1W2)…P(Wn|W1W2…Wn-1)

≈P(W1)P(W2|W1)P(W3|W2)…P(Wn|Wn-1)

如果一个词的出现仅依赖于它前面出现的两个词,那么我们称之为Tri-Gram。在实践中用的最多的就是Bi-Gram和Tri-Gram,而且效果不错,高于四元的用的很少,因为训练它需要更庞大的语料,而且数据稀疏严重,时间复杂度高,精确度却提高的不多。

那么我们怎么样才能够得到P(Wn|W1W2…Wn-1)呢?一种简单的估计方法就是最大似然估计。即:

P(Wn|W1W2…Wn-1)=C(W1W2…Wn)/C(W1W2…Wn-1)

剩下的工作就是在训练语料库中数数儿了,即统计序列W1W2…Wn出现的次数和W1W2…Wn-1出现的次数。

下面我们用Bi-Gram举个例子,假设语料库总词数为13748,

这里还有一个问题要说:那就是数据稀疏问题!假设词表中有20000个词,如果采用Bi-Gram模型,则可能的N-Gram就有400000000个,如果是Tri-Gram,那么可能的N-Gram就有8000000000000个!那么对于其中的很多词对的组合,在语料库中都没有出现,根据最大似然估计得到的概率将会是0,这会造成很大的麻烦,在算句子的概率时一旦其中的某项为0,那么整个句子的概率就会为0,最后的结果时,我们的模型只能算可怜兮兮的几个句子,而大部分的句子算得的概率时0。因此,我们要进行数据平滑(Data Smoothing),数据平滑的目的有两个:一个是使所有的N-Gram概率之和为1,使所有的N-Gram概率都不为0。

时间: 2024-11-07 13:17:33

N-Gram模型的相关文章

Word2vector原理

词向量:用一个向量的形式表示一个词 词向量的一种表示方式是one-hot的表示形式:首先,统计出语料中的所有词汇,然后对每个词汇编号,针对每个词建立V维的向量,向量的每个维度表示一个词,所以,对应编号位置上的维度数值为1,其他维度全为0.这种方式存在问题并且引发新的质疑:1)无法衡量相关词之间的距离  2)V维表示语义空间是否有必要 词向量获取方式: 1)基于奇异值分解的方法 a.单词-文档矩阵 基于的假设:相关词往往出现在同一文档中,例如,banks 和 bonds, stocks,money

Tensorflow 的Word2vec demo解析

简单demo的代码路径在tensorflow\tensorflow\g3doc\tutorials\word2vec\word2vec_basic.py Sikp gram方式的model思路 http://tensorflow.org/tutorials/word2vec/index.md 另外可以参考cs224d课程的课件. ? ? 窗口设置为左右1个词 对应skip gram模型 就是一个单词预测其周围单词(cbow模型是 输入一系列context词,预测一个中心词) ? ? Quick

词向量之Word2vector原理浅析

原文地址:https://www.jianshu.com/p/b2da4d94a122 一.概述 本文主要是从deep learning for nlp课程的讲义中学习.总结google word2vector的原理和词向量的训练方法.文中提到的模型结构和word2vector的代码实现并不一致,但是可以非常直观的理解其原理,对于新手学习有一定的帮助.(首次在简书写技术博客,理解错误之处,欢迎指正) 二.词向量及其历史 1. 词向量定义 ??词向量顾名思义,就是用一个向量的形式表示一个词.为什么

【统计学习】随机梯度下降法求解感知机模型

1. 感知机学习模型 感知机是一个二分类的线性分类问题,求解是使误分类点到超平面距离总和的损失函数最小化问题.采用的是随机梯度下降法,首先任意选取一个超平面w0和b0,然后用梯度下降法不断地极小化目标损失函数,极小化过程中不是一次使所有误分类点的梯度下降,而是一次随机选取一个误分类点使其梯度下降.假设误分类点集合M是固定的,那么损失函数L(w,b)的梯度: 随机选取一个误分类点,对w和b进行更新: 其中n是步长,又称为学习率(learning rate),这样通过迭代可以使损失函数L(w,b)不

DL4NLP —— 看图说话(Image Caption)任务的论文笔记(一)评价指标和NIC模型

看图说话(Image Caption)任务是结合CV和NLP两个领域的一种比较综合的任务,Image Caption模型的输入是一幅图像,输出是对该幅图像进行描述的一段文字.应用场景:比如说用户在拍了一张照片后,利用Image Caption技术可以为其匹配合适的文字,方便以后检索或省去用户手动配字:此外它还可以帮助视觉障碍者去理解图像内容.类似的任务还有Video Caption,输入是一段视频,输出是对视频的描述. (一)任务描述 目前来说,Image Caption任务主要集中在英文上,数

自然语言处理中N-Gram模型的Smoothing算法

在之前的文章<自然语言处理中的N-Gram模型详解>里,我们介绍了NLP中的模型.最后谈到,为了解决使用N-Gram模型时可能引入的稀疏数据问题,人们设计了多种平滑算法,本文将讨论其中最为重要的几种. Add-one (Laplace) Smoothing Add-k Smoothing(Lidstone's law) Backoff Interpolation Absolute Discounting Kneser-Ney Smoothing 欢迎关注白马负金羁的博客 http://blog

xBIM 基本的模型操作

目录 XBIM 应用与学习 (一) XBIM 应用与学习 (二) 基本的模型操作 xBIM 日志操作 XBIM 3D 墙壁案例 格式之间转换 使用Linq 来优化查询 数据提取 插入复制功能 基于 WexBIM 文件在 WebGL 浏览和加载 本次案例我们主要查看xBIM 一些简单的基本操作,我们将介绍被称为CRUD(创建,检索,更新和删除)的持久性存储的四个基本功能 .以下示例通常适用于IFC4,但您也可以对IFC2x3执行相同的操作.实际上,大部分代码都是IFC版本不可知的,因为它使用IFC

最小角回归 LARS算法包的用法以及模型参数的选择

Lasso回归模型,是常用线性回归的模型,当模型维度较高时,Lasso算法通过求解稀疏解对模型进行变量选择.Lars算法则提供了一种快速求解该模型的方法.Lars算法的基本原理有许多其他文章可以参考,这里不过多赘述, 这里主要简介如何在R中利用lars算法包求解线性回归问题以及参数的选择方法. 以下的的一些用法参照lars包的帮助文件,再加上自己的使用心得.所用的示例数据diabetes是Efron在其论文中"Least Angle Regression"中用到的,可以在加载lars包

tensorflow在文本处理中的使用——skip-gram模型

代码来源于:tensorflow机器学习实战指南(曾益强 译,2017年9月)--第七章:自然语言处理 代码地址:https://github.com/nfmcclure/tensorflow-cookbook 数据来源:http://www.cs.cornell.edu/people/pabo/movie-review-data/rt-polaritydata.tar.gz 理解互相关联的单词:king - man + woman = queen 如果已知man和woman语义相关联,那我们可

tensorflow在文本处理中的使用——CBOW词嵌入模型

代码来源于:tensorflow机器学习实战指南(曾益强 译,2017年9月)--第七章:自然语言处理 代码地址:https://github.com/nfmcclure/tensorflow-cookbook 数据:http://www.cs.cornell.edu/people/pabo/movie-review-data/rt-polaritydata.tar.gz CBOW概念图: 步骤如下: 必要包 声明模型参数 读取数据集 创建单词字典,转换句子列表为单词索引列表 生成批量数据 构建