语言模型 Language Model (LM)
定义
什么是语言模型,通俗的讲就是从语法上判断一句话是否通顺。即判断如下的概率成立:
\]
链式法则(chain rule)
\]
Markov assumption
Markov assumption(first order)
\]
Markov assumption(second order)
\]
N-gram语言模型
我们基于上述的Markov assumption将n=1、n=2、n=3等模型进行说明
Unigram
n=1的情况下,是相对于first order markov assumption情况更简单的语言模型,其假设各个词之间时相互独立的,如下示:
\]
Bigram
n=2的情况下,即是Bigram语言模型,其来源于first order markov assumption,其考虑了词与词之间的先后顺序,如下所示:
\]
trigram
n=3的情况下,即是Trigram语言模型,其来源于second order markov assumption,其考虑了当前词与其前面两个词的先后顺序关系,如下所示:
\]
基于上述情况,常用的也就是Bigram,Trigram相对计算复杂结果更准确,n>3的情况下目前相对较少。
如何训练语言模型
上述我们说明了n=1、2、3等情况下的语言模型,那如何训练计算中的各个单词的概率值呢?
一般情况下,我们是通过给定的训练语料经过分词后,统计各个词出现的频率(或者条件频率)进行计算的,即在Unigram语言模型中,我们计算单个词的概率,是拿该词出现的次数除以整个训练语料中词的个数;在Bigram语言模型中,计算 \(p(w_i|w_{i-1})\) 的值,则需要先计算 \(w_{i-1}\) 这个词出现的次数 \(C(w_{i-1})\) ,而后计算 \(w_{i-1}\) 词后出现 \(w_i\) 这个词的数目 \(C(w_i|w_{i-1})\) ,则
\]
Trigram的计算过程和上述基本一致,这里不再进行说明。
如何评估语言模型
perplexity
基本思想是,给测试集的句子赋予较高概率值的语言模型较好,当语言模型训练完之后,测试集中的句子都是正常的句子,那么训练好的模型就是在测试集上的概率越高越好。表达式为:
\]
上式中 \(logp(w_i)\) 是我们在测试集中计算各个单词的概率,比如Unigram即是单个词的概率,Bigram即是 \(p(w_i|w_{i-1})\) 的概率,依次类推。
smoothing
在计算各个概率的过程中,受限于语料集的问题,并不能涵盖所有的词,如果不做smoothing平滑的话,会导致某些词的概率为0,这种情况下不管其他词概率为多少,计算的结果均为0,这种情况违背了我们的初衷。解决此问题的方式是增加平滑项。
- Add-one smoothing
- Add-k smoothing
- Interpolation
- Good-turning smoothing
Add-one smoothing
计算公式如下所示:
\]
其中V是词库大小
Add-k smoothing
计算公式如下所示:
\]
Interpolation
Interpolation综合Unigram、Bigram、Thrigram等方法进行平滑
\]
其中 \(\lambda_1 + \lambda_2 + \lambda_3 = 1\)
Good-turning smoothing
其主要思想是从概率的总量中分配少量的比例给零概率项。
假定给定的语料库中出现\(r\) 次数的词有 \(N_r\) 个,则有
\]
当\(r\) 较小时,我们使用 \(d_r\) 代替 \(r\) ,这里 \(d_r < r\) , \(d_r\) 的值可有下式表示
\]
其期望可以表示为
\]
其中\(N\) 为现有语料库中所有单词频数的总和,这样可以保证
\]
一般情况下,发生次数为\(r\) 的词个数大于发生次数为 \(r\) +1的词个数, \(r\) 越大,词的数量 \(N_r\) 越小。通过Good-turning smooth可以让数据稀疏度有效的降低,所有词的概率估计会看起来很平滑。
语言模型 Language Model (LM)的更多相关文章
- 用CNTK搞深度学习 (二) 训练基于RNN的自然语言模型 ( language model )
前一篇文章 用 CNTK 搞深度学习 (一) 入门 介绍了用CNTK构建简单前向神经网络的例子.现在假设读者已经懂得了使用CNTK的基本方法.现在我们做一个稍微复杂一点,也是自然语言挖掘中很火 ...
- 线上学习-语言模型 language model
chain rule markov assumption 评估语言模型 平滑方法
- NLP问题特征表达基础 - 语言模型(Language Model)发展演化历程讨论
1. NLP问题简介 0x1:NLP问题都包括哪些内涵 人们对真实世界的感知被成为感知世界,而人们用语言表达出自己的感知视为文本数据.那么反过来,NLP,或者更精确地表达为文本挖掘,则是从文本数据出发 ...
- 论文分享|《Universal Language Model Fine-tuning for Text Classificatio》
https://www.sohu.com/a/233269391_395209 本周我们要分享的论文是<Universal Language Model Fine-tuning for Text ...
- Traditional Language Model
Traditional Language Model通常用于回答下述问题: How likely is a string of English words good English ? \(p_{LM ...
- A Neural Probabilistic Language Model
A Neural Probabilistic Language Model,这篇论文是Begio等人在2003年发表的,可以说是词表示的鼻祖.在这里给出简要的译文 A Neural Probabili ...
- (六) 语言模型 Language Madel 与 word2vec
语言模型简介(Language Model) 简单的说,语言模型 (Language Model) 是用来计算一个句子出现概率的模型,假设句子 ,其中 代表句子中的第 个词语,则语句 W 以该顺 ...
- 将迁移学习用于文本分类 《 Universal Language Model Fine-tuning for Text Classification》
将迁移学习用于文本分类 < Universal Language Model Fine-tuning for Text Classification> 2018-07-27 20:07:4 ...
- #论文阅读# Universial language model fine-tuing for text classification
论文链接:https://aclweb.org/anthology/P18-1031 对文章内容的总结 文章研究了一些在general corous上pretrain LM,然后把得到的model t ...
随机推荐
- Kubernetes部署通用手册 (支持版本1.19,1.18,1.17,1.16)
Kubernetes平台环境规划 操作环境 rbac 划分(HA高可用双master部署实例) 本文穿插了ha 高可用部署的实例,当前章节设计的是ha部署双master 部署 内网ip 角色 安装软件 ...
- 微信小程序wx.switchTab跳转到tab页面后onLoad里面的方法不执行
相信大家在做小程序的时候启动页跳转到tab首页会用到switchTab 但是在跳转后发现页面模块不全,后面console.log()后发现是onLoad里面的方法不执行 解决这种问题的方法页有很多中, ...
- sql中in和exists的原理及使用场景。
在我们的工作中可能会遇到这样的情形: 我们需要查询a表里面的数据,但是要以b表作为约束. 举个例子,比如我们需要查询订单表中的数据,但是要以用户表为约束,也就是查询出来的订单的user_id要在用户表 ...
- 理解js中的几种设计模式
目录 工厂模式 构造函数模式 原型模式 组合使用构造函数模式和原型模式 动态原型模式 其它模式 工厂模式 function createPerson(name, age){ var o = new O ...
- Websphere修改web.xml不生效的解决办法(转)
在websphere下部署了一个java工程后,如果修改了web.xml文件,重新启动这个java工程发现websphere并没有自动加载web.xml文件,即修改后的web.xml并不起作用,除非重 ...
- 集训作业 洛谷P3913 车的攻击
这个题一开始被我想复杂了,但总体差不多. 脑子清醒后我直接看他占领了几条长,几条宽,比如一个长3宽3的地图. 被占领了一条宽,就可以看成一个长3宽2的地图.这个长3宽2的地图就是出去可以被攻击的点剩下 ...
- 坚果云如何使用二次验证码/谷歌身份验证器/两步验证/虚拟MFA?
一般步骤:登陆后点邮箱名——安全设置——开通两步验证,用二次验证码微信小程序绑定即可 具体步骤见链接 坚果云如何使用二次验证码/谷歌身份验证器/两步验证/虚拟MFA? 二次验证码小程序于谷歌身份验证 ...
- vue-methods三种调用的形势
var btn = { template:`<button>组件add</button>` } var any = new Vue({ el: '#app', data:{ a ...
- ThinkPHP5.0、5.1和6.0教程文档合集(免费下载)
我们都知道ThinkPHP是一个免费开源的,快速.简单的面向对象的轻量级PHP开发框架. ThinkPHP6主要更新了什么呢? 1. 支持PHP最新的强类型 2. PSR开发规范得了更广泛的应用 3. ...
- Netty 学习笔记(3) ------ ChannelPipeline 和 ChannelHandler
ChannelPipeline通过责任链设计模式组织逻辑代码(ChannelHandler),ChannelHander就如同Servlet的Filter一样一层层处理Channel的读写数据. Ch ...