N-gram的原理、用途和研究

N-gram的基本原理

转自:http://blog.sciencenet.cn/blog-713101-797384.html

N-gram是计算机语言学和概率论范畴内的概念,是指给定的一段文本或语音中N个项目(item)的序列。项目(item)可以是音节、字母、单词或碱基对。通常N-grams取自文本或语料库。

N=1时称为unigram,N=2称为bigram,N=3称为trigram,以此类推。

举例来说:将“informationretrieval”视为一段文本,它的5-grams的items依次为:

infor,nform,forma,ormat,rmati,matio,ation,tion,ionr,onre,nret,retr,retri,etrie,triev,rieva,ieval

有时为了便于分析,还会在前面加空格,这就多出4个items:____i,___in,__inf,_info

举例中文:“你今天休假了吗”,它的bigram依次为:

你今,今天,天休,休假,假了,了吗

制造这种语言模型的原因是基于这么一种思想:在整个语言环境中,句子T的出现概率是由组成T的N个item的出现概率组成的,如下公式所示

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

以上公式难以实际应用。此时出现马尔科夫模型,该模型认为,一个词的出现仅仅依赖于它前面出现的几个词。这就大大简化了上述公式。

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)

通常采用bigram和trigram进行计算。

N-gram的用途

20世纪80年代至90年代初,n-gram技术被广泛地用来进行文本压缩,检查拼写错误,加速字符串查找,文献语种识别。90年代,该技术又在自然语言处理自动化领域得到新的应用,如自动分类,自动索引,超链的自动生成,文献检索,无分隔符语言文本的切分等。

目前N-gram最为有用的就是自然语言的自动分类功能。基于n-gram的自动分类方法有两大类,一类是人工干预的分类(Classification),又称分类;一类是无人工干预的分类(Clustering),又称聚类。人工干预的分类,是指人工预先分好类(如Yahoo!的层次结构类),然后,计算机根据特定算法自动地将新添加到数据库的文献划归某一类。这类方法缺点是,人们须预先具备关于整个文献库和分类的知识。无人工干预的分类,是指计算机自动地识别文献组(集合),人们勿需预先具备关于整个文献库和分类的知识。

可以想象,如今信息泛滥的时代,资源呈指数方式递增。依靠人工信息识别和分类已经变得不现实,人类依靠计算机对自然语言本文的自动分类正在成为现实。这又与KDA和SVM结合起来,利用机器学习,首先利用Trainingdata形成分类函数,然后利用Testingdata进行测试其准确性。

N-gram中的数据平滑

对于一个包含2000个词的文本,使用bigram方法就会形成2000×2000的矩阵,trigram就形成2000×2000×2000的矩阵,其中含有大量的0值,即稀疏矩阵。此时需要采用数据平滑技术(datasmoothing)使得;并且P(Wk)均不等于0。

N-gram的相关研究

以上介绍都很浅薄,有兴趣可以参考相关研究:

英家庆,使用N-gram模型對中文文件自動分類,硕士论文,

http://ethesys.lib.mcu.edu.tw/ETD-db/ETD-search/getfile?URN=etd-0817107-135543&filename=etd-0817107-135543.pdf

图  .N-gram处理中文流程

何浩,杨海棠,一种基于 N-Gram 技术的中文文献自动分类方法,情报学报,http://study.hbecrc.org/lcq/xueshuyanjiu/UploadFiles_9984/200704/20070417110725112.pdf

George Doddington,Automatic Evaluation of MachineTranslation Quality Using N-gram Co-Occurrence Statistics,http://dl.acm.org/citation.cfm?id=1289189.1289273

转载本文请联系原作者获取授权,同时请注明本文来自王磊科学网博客。
链接地址:http://blog.sciencenet.cn/blog-713101-797384.html

N-gram的原理、用途和研究的更多相关文章

  1. Jmeter资源监控工具ServerAgent运行原理的一些研究

    用过Jmeter的应该都了解,有个ServerAgent工具,放在linux或者windows服务器上开启服务后,在Jmeter中配置下监视器,就可以抓取到服务器的一些资源信息,抓取的主要是cpu.内 ...

  2. MapReduce多用户任务调度器——容量调度器(Capacity Scheduler)原理和源码研究

    前言:为了研究需要,将Capacity Scheduler和Fair Scheduler的原理和代码进行学习,用两篇文章作为记录.如有理解错误之处,欢迎批评指正. 容量调度器(Capacity Sch ...

  3. java栈stack和堆heap的工作原理,用途及区别?举例说明

    java堆和栈的区别[新手可忽略不影响继续学习] Java中内存分成两种:一种是栈stack,一种是堆heap.函数中的一些基本类型的变量(int, float)和对象的引用变量(reference) ...

  4. 深入研究Block捕获外部变量和__block实现原理

    Blocks是C语言的扩充功能,而Apple 在OS X Snow Leopard 和 iOS 4中引入了这个新功能“Blocks”.从那开始,Block就出现在iOS和Mac系统各个API中,并被大 ...

  5. 【转载】深入研究Windows内部原理绝对经典的资料

    原文:深入研究Windows内部原理绝对经典的资料 另一篇资料:深入研究Windows内部原理系列 (为了方便大家下,我打包了放在一下地址: 1-6:http://download.csdn.net/ ...

  6. MXF素材文件交换格式深入研究

    MXF素材文件交换格式深入研究   2012-09-03 | 访问次数:262 | 新闻来源:电科网               [摘要]DCI规定数字电影需采用MXF封装音视频等节目素材内容.为了深 ...

  7. jquery ready方法实现原理 内部原理

    jquery ready方法实现原理 内部原理 今天闲来无事研究研究jquery.ready()的内部实现,看JQ的源码一头雾水,由于自己很菜了,于是翻了翻牛人的播客,讲述详细,收获颇多. 先普及一下 ...

  8. Unity编译Android的原理解析和apk打包分析

    作者介绍:张坤 最近由于想在Scene的脚本组件中,调用Android的Activity的相关接口,就需要弄明白Scene和Activity的实际对应关系,并对Unity调用Android的部分原理进 ...

  9. ARouter原理剖析及手动实现

    ARouter原理剖析及手动实现 前言 路由跳转在项目中用了一段时间了,最近对Android中的ARouter路由原理也是研究了一番,于是就给大家分享一下自己的心得体会,并教大家如何实现一款简易的路由 ...

随机推荐

  1. Scala_Load csv data to hive via spark2.1_via pass parameters_HiveAllType

    prepare CSV data NT,col_SMALLINT,col_BIGINT,col_INT,col_FLOAT,col_DOUBLE,col_DECIMAL,col_TIMESTAMP,c ...

  2. 【手撸一个ORM】MyOrm的使用说明

    [手撸一个ORM]第一步.约定和实体描述 [手撸一个ORM]第二步.封装实体描述和实体属性描述 [手撸一个ORM]第三步.SQL语句构造器和SqlParameter封装 [手撸一个ORM]第四步.Ex ...

  3. vue——踩坑

    打包的时候,要记得改一下这个配置路径~ 教程:https://www.cnblogs.com/wanf/p/7871787.html

  4. (转)CentOS最大文件描述符限制更改

    CentOS最大文件描述符限制更改 原文:https://www.cnblogs.com/TonyXiaoClub/p/4747736.html 系统级的限制:/proc/sys/fs/file-ma ...

  5. JAVA多线程之线程池的使用

    合理利用线程池能够带来三个好处. 第一:降低资源消耗.通过重复利用已创建的线程降低线程创建和销毁造成的消耗. 第二:提高响应速度.当任务到达时,任务可以不需要等到线程创建就能立即执行. 第三:提高线程 ...

  6. .net 记录

    Stack Overflow 2016最新架构探秘 http://www.infoq.com/cn/news/2016/03/Stack-Overflow-architecture-insi#rd N ...

  7. Notepad++代码函数快速提示设置

    设置——首选项——自动完成

  8. Maven插件和细节

    1.父工程统一版本号 <!-- 集中定义依赖版本号 --> <properties> <junit.version>4.12</junit.version&g ...

  9. Composition or inheritance for delegating page methods?

    引用链接:http://watirmelon.com/2011/01/24/composition-or-inheritance-for-delegating-page-methods/ Compos ...

  10. .net中Response.End() 和Response.Redirect("http://dotnet.aspx.cc");

    问:什么情况下需要Response.End()语句,加这句有什么好处 答: 首先你要理解Response.End()的意思,它的意思是终止执行下面的语句!但有时不加和加上都一样,但还要加上好,为什么呢 ...