第二篇:n-gram 语言模型
目录
推到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种方法:
- argmax:每回合取概率最高的词
贪心搜索 - Beam搜索解码之后会讲:
每回合跟踪前 N 个概率最高的单词
选择产生最佳句子概率的单词序列 - 从分布中随机抽取
本次关于n-gram的模型讲解大概就是这样,这个算法还是比较实用的,辛苦大家观看,老规矩,有问题欢迎评论,探讨。
第二篇:n-gram 语言模型相关推荐
- Django框架之第二篇
Django框架之第二篇 一.知识点回顾 1.MTV模型 model:模型,和数据库相关的 template:模板,存放html文件,模板语法(目的是将变量如何巧妙的嵌入到HTML页面中). view ...
- java设计模式中不属于创建型模式_23种设计模式第二篇:java工厂模式定义:工厂模式是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式...
23种设计模式第二篇:java工厂模式 定义: 工厂模式是 Java 中最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 工厂模式主要是为创建对象提供过渡接口, ...
- 深入理解javascript函数系列第二篇——函数参数
前面的话 javascript函数的参数与大多数其他语言的函数的参数有所不同.函数不介意传递进来多少个参数,也不在乎传进来的参数是什么数据类型,甚至可以不传参数.本文是深入理解javascript函数 ...
- Spotify敏捷模式详解三部曲第二篇:研发过程
本文转自:Scrum 中文网 引言 在本系列文章的第一篇,我们介绍了Spotify的敏捷研发团队,以及它独特的组织架构.Spotify的研发团队采用的是一种非常独特的组织架构,如下图所示: 整个研发组 ...
- SAP PP COR2下达工单系统报错说-系统状态APNG是激活的- 分析第二篇
SAP PP COR2下达工单系统报错说-系统状态APNG是激活的- 分析第二篇 笔者所在的项目上启用了ECM(Engineer Change Management)功能,重要数据的修改都要事先创建一 ...
- 学习动态性能表 第二篇--v$sesstat
学习动态性能表 第二篇--v$sesstat 按照OracleOnlineBook中的描述,v$sesstat存储session从login到logout的详细资源使用统计. 类似于v$syssta ...
- 初学Python——文件操作第二篇
前言:为什么需要第二篇文件操作?因为第一篇的知识根本不足以支撑基本的需求.下面来一一分析. 一.Python文件操作的特点 首先来类比一下,作为高级编程语言的始祖,C语言如何对文件进行操作? 字符(串 ...
- ASP.NET自定义控件组件开发 第一章 第二篇 接着待续
ASP.NET自定义控件组件开发 第一章 第二篇 接着待续 ASP.NET自定义控件组件开发 第一章 第二篇 接着待续 很感谢大家给我的第一篇ASP.NET控件开发的支持!在写这些之前,我也看了一些例 ...
- Redis入门第二篇【存储数据结构之string类型】
tags: Redis title: Redis入门第二篇[存储数据结构之string类型] Redis存储的数据结构 Redis支持的数据结构有好几种: It supports data struc ...
最新文章
- 业务逻辑应该在哪里实现更为合理呢?
- Java文件流输入输出
- Python-crawler-citeulike
- 全自动安装 linux光盘,CentOS 7.1全自动安装光盘制作详解
- nginx指定配置文件启动_【第1717期】Nginx入门指南
- linux ls -l 详解
- 安装cleanmymac软件提示已损坏无法打开,如何解决?
- 计算机二级考vb试题,2017计算机二级考试VB练习题及答案
- php反序列化绕过,浅谈php反序列化漏洞
- 检测VC++Redistributable运行库 vcredist_x86.exe
- 怎么杀php源文件的木马,PHP一句话木马及查杀
- Excel妙用-公式结果我都要
- SSH超市进销存管理系统
- 你不是菜鸟2:他为什么没过试用期
- 职场社交沟通必读图书排行榜
- python get rect 函数_Python之Pygame.rect函数
- 为什么进行数据恢复后的文件是乱码
- CWnd与HWND的区别与联系(相互转换)完全解析
- 十个鲜为人知的Linux命令-【4】
- 反向链接与外链区别,如何查询反向链接?
热门文章
- CVPR 2019收录论文ID公开,你上榜了吗?
- 架构师实践日 · 6.30 杭州站 | 视觉 AI 技术如何助力行业提升?来西子湖畔与业内大咖面对面交流!
- 陆奇谢幕后,百度的“新”时代
- 一文概览主要语义分割网络:FCN,SegNet,U-Net...
- AI一分钟 | 张亚勤:保护用户数据安全是百度的第一原则;美国开通全球首条高速自动驾驶测试路...
- 滴滴成立AI Labs 加大人工智能领域投入
- 迈吉客受邀参加《创意中国》, 85%超高支持率晋级年度盛典
- Git 2.25.0发布,支持部分clone、稀疏checkout
- 我用2年时间从财务到数据分析师!
- 特征工程(三)Doc2Vec