1.N-Gram的介绍

N-Gram是基于一个假设:第n个词出现与前n-1个词相关,而与其他任何词不相关(这也是隐马尔可夫当中的假设)。整个句子出现的概率就等于各个词出现的概率乘积。各个词的概率可以通过语料中统计计算得到。通常N-Gram取自文本或语料库。

N=1时称为unigram,N=2称为bigram,N=3称为trigram,假设下一个词的出现依赖它前面的一个词,即 bigram,假设下一个词的出现依赖它前面的两个词,即 trigram,以此类推。

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

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

理论上,n 越大越好,经验上,trigram 用的最多,尽管如此,原则上,能用 bigram 解决,绝不使用 trigram。

假设句子T是有词序列w1,w2,w3...wn组成,用公式表示N-Gram语言模型如下:

P(T)=P(w1)*p(w2)*p(w3)***p(wn)=p(w1)*p(w2|w1)*p(w3|w1w2)** *p(wn|w1w2w3...) p(T) 就是语言模型,即用来计算一个句子 T 概率的模型。

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

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)

一般常用的N-Gram模型是Bi-Gram和Tri-Gram。分别用公式表示如下:

Bi-Gram:  P(T)=p(w1|begin)*p(w2|w1)*p(w3|w2)***p(wn|wn-1)
Tri-Gram:  P(T)=p(w1|begin1,begin2)*p(w2|w1,begin1)*p(w3|w2w1)***p(wn| wn-1,wn-2) 

注意上面概率的计算方法:P(w1|begin)=以w1为开头的所有句子/句 子总数;p(w2|w1)=w1,w2同时出现的次数/w1出现的次数。以此类推

2.一个经典的二元语言模型例子

语料库中一些单词的词频,统计出各个单词与其他单词的前后联系的频次,组成一个7*7的二维矩阵,如下图

那么语句  “I want to eat Chinese food”  的二元语言模型概率计算过程如下

3.构建 N-Gram 语言模型

通常,通过计算最大似然估计(Maximum Likelihood Estimate)构造语言模型,这是对训练数据的最佳估计,如 bigram 公式如下:

p(wi|wi−1)=fraccount(wi−1,wi)count(wi−1)——条件概率

如给定句子集“<s> I am Sam </s>

<s> Sam I am </s>

<s> I do not like green eggs and ham </s>”

部分 bigram 语言模型如下所示

count(wi) 如下:

count(wi−1,wi) 如下:

则 bigram 为:

那么,句子“<s> I want chinese food </s>”的概率为:

p(<s>Iwantchinesefood</s>) =p(I|<s>)P(want|I)p(chinese|want)p(food|chinese)p(</s>|food)=.000031

转载于:https://www.cnblogs.com/bep-feijin/p/9430164.html

N-Gram的基本原理相关推荐

  1. Computer OS系统基本原理

    Computer OS系统基本原理 第一章 绪论(考概念) 什么是OS? o 操作系统是一组控制和管理计算机软硬件资源.合理地对各类作业进行调度以及方便用户使用的程序集合. o 操作系统是位于硬件层( ...

  2. XGBoost4J-Spark基本原理

    XGBoost4J-Spark基本原理 XGBoost4J-Spark是一个项目,旨在通过使XGBoost适应Apache Spark的MLLIB框架,无缝集成XGBoost和Apache Spark ...

  3. Docker基本原理概述

    Docker基本原理概述 Docker是一个用于开发,交付和运行应用程序的开放平台.Docker能够将应用程序与基础架构分开,从而可以快速交付软件.借助Docker,可以以与管理应用程序相同的方式来管 ...

  4. 多机多卡训练基本原理

    多机多卡训练基本原理 在工业实践中,许多较复杂的任务需要使用更强大的模型.强大模型加上海量的训练数据,经常导致模型训练耗时严重.比如在计算机视觉分类任务中,训练一个在ImageNet数据集上精度表现良 ...

  5. MindSpore基本原理

    MindSpore基本原理 • MindSpore介绍 o 自动微分 o 自动并行 • 安装 o pip方式安装 o 源码编译方式安装 o Docker镜像 • 快速入门 • 文档 MindSpore ...

  6. Docker Context基本原理

    Docker Context基本原理 介绍 本指南介绍了上下文如何使单个Docker CLI轻松管理多个Swarm集群.多个Kubernetes集群和多个单独的Docker节点. 单个Docker C ...

  7. 垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?...

    一.垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?   1.对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址.大小以及使用情况. 通常, ...

  8. g-git 相关命令 及其 基本原理探索(二):git 在工作中的常用命令操作 ,超级实用!!!

    上一篇git 基本原理对git的使用以及文件分布已经有了一个整体的了解. 本篇将对工作中常用的一些git 操作命令的操作进行总结归纳,方便今后查阅. 文章目录 1. 分离头指针 2. 通过HEAD 来 ...

  9. JVM学习--(一)基本原理

    前言 JVM一直是java知识里面进阶阶段的重要部分,如果希望在java领域研究的更深入,则JVM则是如论如何也避开不了的话题,本系列试图通过简洁易读的方式,讲解JVM必要的知识点. 运行流程 我们都 ...

  10. Flink 基本原理与生产实践分享【入门必读,概念清晰】

    Flink 基本原理与生产实践分享[入门必读,概念清晰] https://zh.wikipedia.org/zh-hans/Apache_Flink Apache Flink是由Apache软件基金会 ...

最新文章

  1. [4月21日]《51CTO 编辑部的外传》——剧本篇(上)
  2. Elasticsearch使用BulkProcessor批量插入
  3. Content Aware ABR技术
  4. 统计字符串中单词个数的算法优化
  5. Oracle Study---Oracle 11g 不可见索引案例
  6. Java中的Google协议缓冲区
  7. 技术动态 | 清华大学开源OpenKE:知识表示学习平台
  8. Python之XML解析详解
  9. JavaScript之事件委托(附原生js和jQuery代码)
  10. ASP.NET实现多域名多网站共享Session值
  11. ACM 美素数 (没AC)
  12. Intouch/ifix语音报警系统制作(3-利用自定义过程和函数,重构先前版本)
  13. 昆明钟英高中2021年高考成绩查询,昆明官渡钟英中学2021年排名
  14. !!终于把【库存管理的大致功能完成了!】
  15. 背包问题九讲 2.0 beta1.1
  16. linux加密狗复制克隆教程,圣天狗SentinelDog
  17. Typhoon-v1.02渗透笔记
  18. poj 1125 Stockbroker(多源最短路径)
  19. Servlet GET和POST请求
  20. 调用中国气象局天气的接口 遇到WebService客户端引用 服务器无法处理请求。 ---> 未将对象引用设置到对象的实例

热门文章

  1. Windows消息机制详解
  2. CentOs简单分区方案
  3. JSON解析---初识
  4. 原创:MS Dynamics AX - XBRL 功能
  5. ob 接oracle10时接不上怎么办?
  6. c语言中void msg,如何连接到IRC服务器/解析C语言(提供代码)的IRC MSG/PING-PONG处理...
  7. php使用redis持久化,redis如何持久化
  8. pythonflat怎么设置_python – numpy 2d和1d add flat
  9. Redis持久化总结
  10. synchronized的用法