目录

推到n-gram语言模型

平滑处理稀疏性

生成语言


推到n-gram语言模型

我们的目标是获得任意 m 个单词序列的概率:

第一步:应用链式法则将联合概率转换为条件概率

通过上面的转换,我们发现仍然很难去处理。因此我们做出简化的假设,也就是马尔可夫假设

这个转换也就是,第i个单词不用依赖于前面所有词,而是依赖于前面n个词。这也就是我们今天所说的n-gram模型。

接下来,我们需要思考如何来计算这些概率?根据我们语料库中的计数进行估计

上面公式中的C指的就是出现次数。分子是从i-n+1到i这些词同时在语料库中出现的次数;分母是从i-n+1到i-1这些词同时出现在语料库中的次数。

然后,需要引入一个用于表示序列开始和结束的特殊标签:
使用<s> 表示 句子开始;</s> 表示句子结束。

n-gram当然也存在一些问题,从公式出发,如果某一项的词并不在语料库中,会导致该项的概率为0并且,整体概率为0,该如何处理?

比如w2在语料库中未出现,因此C(w2) =0 所以该项的概率 为0, 整体概率也为0,但是我们需要去用概率值和其他的可能的句子比较,如果多个句子都是等于0,就无法比较。

此时需要用到平滑,也就是接下来的部分。

平滑处理稀疏性

有很多种平滑处理的方法,此处主要对四种进行列举分析:

  • 拉普拉斯平滑,也叫加1平滑
  • 加k平滑
  • absolute discounting
  • Kneser-Ney

拉普拉斯平滑

简单的想法:假设我们看到的每个 n-gram 都多一次。下面公式中|V|是词表大小

加k平滑(Lidstone Smoothing)

与上面类似,发现添加1个往往太多,因此添加一个分数 k

但是这个k得人为指定,比如0.1等

absolute discounting

和上面的算法类似,不过是通过从观察到的 n-gram 计数中“借用”一个固定的概率质量
并将其重新分配到看不见的 n-gram。也就是给有概率的n-gram打折,折扣加到概率为0的n-gram上。

这里面提到一个概念叫back-off,回退,也就是说如果在高阶模型中没有该n-gram出现,可以尝试换到低阶模型,举例来说就是,3-gram回退到2-gram。这是一个简单整体理解

Kneser-Ney

基于低阶 n-gram 的通用性重新分配概率质量。也就是,持续性概率,continuation probability。

这里的通用性指的是:

  • 高通用性:和很多其他单词一起出现。比如 glasses
  • 低通用性:几乎不和其他单词一起出现,比如 francisco

这里的β表示已为上下文 wi-1 打折的概率质量的数量;

直观地,Pcont 的分子部分计算的是与 wi 共同出现的唯一 wi-1 的数量。

Interpolation 插补法

这里引入插补法,是组合不同阶n-gram模型的更好方法。

插补法结合刚刚的KN算法

这里γ指的是归一化常数,使得概率和为1

生成语言

给定一个初始词,根据语言模型产生的概率分布绘制下一个词。

这个其实比较好理解,给出<s>句子开始然后,假设使用bi-gram然后不断预测下一个词,直到预测到</s>

挑选下一个词有大概3种方法:

  1. argmax:每回合取概率最高的词
    贪心搜索
  2. Beam搜索解码之后会讲:
    每回合跟踪前 N 个概率最高的单词
    选择产生最佳句子概率的单词序列
  3. 从分布中随机抽取

本次关于n-gram的模型讲解大概就是这样,这个算法还是比较实用的,辛苦大家观看,老规矩,有问题欢迎评论,探讨。

第二篇:n-gram 语言模型相关推荐

  1. Django框架之第二篇

    Django框架之第二篇 一.知识点回顾 1.MTV模型 model:模型,和数据库相关的 template:模板,存放html文件,模板语法(目的是将变量如何巧妙的嵌入到HTML页面中). view ...

  2. java设计模式中不属于创建型模式_23种设计模式第二篇:java工厂模式定义:工厂模式是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式...

    23种设计模式第二篇:java工厂模式 定义: 工厂模式是 Java 中最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 工厂模式主要是为创建对象提供过渡接口, ...

  3. 深入理解javascript函数系列第二篇——函数参数

    前面的话 javascript函数的参数与大多数其他语言的函数的参数有所不同.函数不介意传递进来多少个参数,也不在乎传进来的参数是什么数据类型,甚至可以不传参数.本文是深入理解javascript函数 ...

  4. Spotify敏捷模式详解三部曲第二篇:研发过程

    本文转自:Scrum 中文网 引言 在本系列文章的第一篇,我们介绍了Spotify的敏捷研发团队,以及它独特的组织架构.Spotify的研发团队采用的是一种非常独特的组织架构,如下图所示: 整个研发组 ...

  5. SAP PP COR2下达工单系统报错说-系统状态APNG是激活的- 分析第二篇

    SAP PP COR2下达工单系统报错说-系统状态APNG是激活的- 分析第二篇 笔者所在的项目上启用了ECM(Engineer Change Management)功能,重要数据的修改都要事先创建一 ...

  6. 学习动态性能表 第二篇--v$sesstat

    学习动态性能表 第二篇--v$sesstat  按照OracleOnlineBook中的描述,v$sesstat存储session从login到logout的详细资源使用统计. 类似于v$syssta ...

  7. 初学Python——文件操作第二篇

    前言:为什么需要第二篇文件操作?因为第一篇的知识根本不足以支撑基本的需求.下面来一一分析. 一.Python文件操作的特点 首先来类比一下,作为高级编程语言的始祖,C语言如何对文件进行操作? 字符(串 ...

  8. ASP.NET自定义控件组件开发 第一章 第二篇 接着待续

    ASP.NET自定义控件组件开发 第一章 第二篇 接着待续 ASP.NET自定义控件组件开发 第一章 第二篇 接着待续 很感谢大家给我的第一篇ASP.NET控件开发的支持!在写这些之前,我也看了一些例 ...

  9. Redis入门第二篇【存储数据结构之string类型】

    tags: Redis title: Redis入门第二篇[存储数据结构之string类型] Redis存储的数据结构 Redis支持的数据结构有好几种: It supports data struc ...

最新文章

  1. 业务逻辑应该在哪里实现更为合理呢?
  2. Java文件流输入输出
  3. Python-crawler-citeulike
  4. 全自动安装 linux光盘,CentOS 7.1全自动安装光盘制作详解
  5. nginx指定配置文件启动_【第1717期】Nginx入门指南
  6. linux ls -l 详解
  7. 安装cleanmymac软件提示已损坏无法打开,如何解决?
  8. 计算机二级考vb试题,2017计算机二级考试VB练习题及答案
  9. php反序列化绕过,浅谈php反序列化漏洞
  10. 检测VC++Redistributable运行库 vcredist_x86.exe
  11. 怎么杀php源文件的木马,PHP一句话木马及查杀
  12. Excel妙用-公式结果我都要
  13. SSH超市进销存管理系统
  14. 你不是菜鸟2:他为什么没过试用期
  15. 职场社交沟通必读图书排行榜
  16. python get rect 函数_Python之Pygame.rect函数
  17. 为什么进行数据恢复后的文件是乱码
  18. CWnd与HWND的区别与联系(相互转换)完全解析
  19. 十个鲜为人知的Linux命令-【4】
  20. 反向链接与外链区别,如何查询反向链接?

热门文章

  1. CVPR 2019收录论文ID公开,你上榜了吗?
  2. 架构师实践日 · 6.30 杭州站 | 视觉 AI 技术如何助力行业提升?来西子湖畔与业内大咖面对面交流!
  3. 陆奇谢幕后,百度的“新”时代
  4. 一文概览主要语义分割网络:FCN,SegNet,U-Net...
  5. AI一分钟 | 张亚勤:保护用户数据安全是百度的第一原则;美国开通全球首条高速自动驾驶测试路...
  6. 滴滴成立AI Labs 加大人工智能领域投入
  7. 迈吉客受邀参加《创意中国》, 85%超高支持率晋级年度盛典
  8. Git 2.25.0发布,支持部分clone、稀疏checkout
  9. 我用2年时间从财务到数据分析师!
  10. 特征工程(三)Doc2Vec