深入浅出讲解语言模型

转载自  深入浅出讲解语言模型

深入浅出讲解语言模型

1、什么是语言模型呢?

简单地说,语言模型就是用来计算一个句子的概率的模型,也就是判断一句话是否是人话的概率?

那么如何计算一个句子的概率呢?给定句子(词语序列)

它的概率可以表示为:

可是这样的方法存在两个致命的缺陷:

  1. 參数空间过大:条件概率P(wn|w1,w2,..,wn-1)的可能性太多,无法估算,不可能有用;

  2. 数据稀疏严重:对于非常多词对的组合,在语料库中都没有出现,依据最大似然估计得到的概率将会是0。

 

2、马尔科夫假设

为了解决參数空间过大的问题。引入了马尔科夫假设:随意一个词出现的概率只与它前面出现的有限的一个或者几个词有关。

如果一个词的出现与它周围的词是独立的,那么我们就称之为unigram也就是一元语言模型:

如果一个词的出现仅依赖于它前面出现的一个词,那么我们就称之为bigram:

假设一个词的出现仅依赖于它前面出现的两个词,那么我们就称之为trigram:

一般来说,N元模型就是假设当前词的出现概率只与它前面的N-1个词有关。而这些概率参数都是可以通过大规模语料库来计算,比如三元概率有:

在实践中用的最多的就是bigram和trigram了,高于四元的用的非常少。

因为训练它须要更庞大的语料,并且数据稀疏严重,时间复杂度高,精度却提高的不多。

下面我们详细介绍一下一元语言模型,二元语言模型来帮助大家理解语言模型。

 

3、一元语言模型

一元语言模型中,我们的句子概率定义为:

 

,在这里,这个式子成立的条件是有一个假设,就是条件无关假设,我们认为每个词都是条件无关的。

那好,刚刚说了语言模型是得到一个句子的概率,此时我们句子的概率计算公式已经有了,那么如何估计  

这些值呢?

首先介绍一下,这里的参数种类是一种  ,但是参数实例有V个(V是我们的词典大小)

我们应该如何得到每个参数实例的值。

用的是极大似然估计法。

比如我们说我们的训练语料是下面这个简单的语料。

那么我们的字典为:“星期五早晨,我特意起了个大早为的就是看天空。” 22个不同词,每个词语的概率直接用极大似然估计法估计得到。

如:p(星)=1/27,p(期)=1/27,一直算到后面的空为1/27.

于是我们就需要存储我们学习得到的模型参数,一个向量,22维,每个维度保存着每个单词的概率值。

那么有同学就需要问了,来了一句话,我们应该怎么估计呢?

下面我举一个简单的例子来模拟一下如何用语言模型估计一句话的概率,比如:

p(我看看早晨的天空)=p(我)*p(看)*p(看)*p(早)*p(晨)*p(的)*p(天)*p(空)=1/27*1/27*1/27*....*1/27就能够直接运算出来。

于是我们得出,只要将每句话拆开为每个单词然后用累积形式运算,这样我们就能算出每句话的概率来了。

但是这样是不是就解决我们所有的问题呢?并没有,下面我们介绍二元语言模型。

 

4、二元语言模型

介绍二元语言模型之前,我们首先来看两句话,he eats pizza与he drinks pizza,我们需要用语言模型来判断这两句话出现的概率。

好,那么我们现在用一元语言模型来分别计算这两个句子的概率大小。

p(he eats pizza) = p(he)*p(eats)*p(pizza)

p(he drinks pizza) = p(he)*p(drinks)*p(pizza)

我们可以看出,其实通过一元语言模型的计算公式,我们看不出上面两个句子的概率有多大差别。

但是我们很明显知道第一句话比第二句话的概率要大的多,因为正确的表达应该就是吃披萨,而不是喝披萨。

但是由于我们用了一元语言模型,假设每个词都是条件无关的,这样的话就会导致我们考虑不到两个词之间的关系搭配。

比如在这个例子中,很明显应该判断的是p(pizza|eats)与p(pizza|drinks)的概率大小比较。

这也就是二元语言模型需要考虑的问题。

我们需要计算p(pizza|eats)与p(pizza|drinks)的概率,我们首先给出二元语言模型的定义

下面我们举出一个例子(例子来源于https://class.coursera.org/nlp/):

这个例子来自大一点的语料库,为了计算对应的二元模型的参数,即P(wi | wi-1),我们要先计数即c(wi-1,wi),然后计数c(wi-1),再用除法可得到这些条件概率。

可以看到对于c(wi-1,wi)来说,wi-1有语料库词典大小(记作|V|)的可能取值,wi也是,所以c(wi-1,wi)要计算的个数有|V|^2。

c(wi-1,wi)计数结果如下:

c(wi-1)的计数结果如下:

那么二元模型的参数计算结果如下:

比如计算其中的P(want | i) = 0.33如下:

那么针对这个语料库的二元模型建立好了后,我们可以计算我们的目标,即一个句子的概率了,一个例子如下:

P(<s> I want english food </s>) = P(I|<s>) ×  P(want|I) × P(english|want) ×  P(food|english)  ×  P(</s>|food) = 0.000031

那么我们就能通过一个二元语言模型能够计算所需要求的句子概率大小。

二元语言模型也能比一元语言模型能够更好的get到两个词语之间的关系信息。

比如在p(pizza|eats)与p(pizza|drinks)的比较中,二元语言模型就能够更好的get到它们的关系,比如我们再看一下该二元模型所捕捉到的一些实际信息:

 

图片来自于:http://blog.csdn.net/a635661820/article/details/43906731(图片放大看比较能看清楚红色字)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/324734.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

set注意点map遍历

/** 使用各种set存储多个学生信息问题1&#xff1a;为什么课程名称&#xff08;String&#xff09;放入到HashSet、LinkedHashSet都可以保证唯一性&#xff0c;但是学生&#xff08;Student&#xff09;放入到HashSet、LinkedHashSet&#xff0c;却无法实现唯一性。问题2&…

《认知红利》读书笔记

认知红利 谢春霖 24个笔记 ◆ 上篇 概念重塑 所以&#xff0c;金钱并不是你的财富&#xff0c;而是你“已经交换出去的那部分财富”的数字存在形式而已。 总之&#xff0c;真不真不重要&#xff0c;对不对不重要&#xff0c;你看不看才重要&#xff01; 一片树叶从树上落下&am…

基于.NET CORE微服务框架 -surging的介绍和简单示例 (开源)

一、前言 至今为止编程开发已经11个年头&#xff0c;从 VB6.0,ASP时代到ASP.NET再到MVC, 从中见证了.NET技术发展&#xff0c;从无畏无知的懵懂少年&#xff0c;到现在的中年大叔&#xff0c;从中的酸甜苦辣也只有本人自知。随着岁月的成长&#xff0c;技术也从原来的三层设计到…

ssl2331OJ1373-鱼塘钓鱼 之2【贪心堆优化】

前言 上篇&#xff1a;纯贪心做法 下篇&#xff1a;dp做法 题目&#xff1a;OJ1373 正题 有N个鱼塘&#xff0c;给出每分钟可以钓到的鱼数和每钓一次下一次钓减少的鱼数和到下一个鱼塘需要几分钟&#xff08;不能回头&#xff09;。求限定时间内最多能够钓到的鱼数 解题思路…

NLP Coursera By Michael Collins - Week1

转载自 NLP Coursera By Michael Collins - Week1 NLP Coursera By Michael Collins - Week1 构建模型框架 - Markov Process 毕竟是机器学习嘛&#xff0c;所以第一步&#xff0c;先要把实际问题转化成数学模型。 在NLP中&#xff0c;一般使用的都是概率模型&#xff0c;…

JDBC登录功能实现

模拟淘宝登录 package com.bjsxt.jdbc2;import com.bjsxt.entity.User; import entity.Emp;import java.nio.file.attribute.UserDefinedFileAttributeView; import java.sql.*; import java.util.ArrayList; import java.util.List; import java.util.Scanner;/*** 模拟淘宝登…

19级:班级日常分享,一天一瞬间

点击上方蓝色关注我们&#xff01;19级的同学们目前正在做KTV点歌系统项目&#xff0c;截止今日为止&#xff0c;项目已经进展了1天多了&#xff0c;进度还在可控范围内&#xff0c;大部分组的后台都已完成&#xff0c;刘娜小组稍微比较慢了点儿。李磊小组的进度最快&#xff0…

Attentive Sequence to Sequence Networks

转载自 Attentive Sequence to Sequence Networks Attentive Sequence to Sequence Networks 1、Encoder-Decoder 框架 首先我们模型的整体框图如下&#xff1a; Encoder-Decoder 框架可以这么直观地去理解&#xff1a;可以把它看作适合处理由一个句子&#xff08;或篇章&a…

ssl2331OJ1373-鱼塘钓鱼 之3【dp】

前言 上篇&#xff1a; 纯贪心做法 堆优化贪心 题目&#xff1a;OJ1373 正题 有N个鱼塘&#xff0c;给出每分钟可以钓到的鱼数和每钓一次下一次钓减少的鱼数和到下一个鱼塘需要几分钟&#xff08;不能回头&#xff09;。求限定时间内最多能够钓到的鱼数 解题思路 用f[i][…

多线程三种创建方式

方法一&#xff1a;继承Thread Thread package com.bjsxt.create;/*** author dell* data 2021/3/2* 创建一个线程对象&#xff0c;并启动线程** 注意&#xff1a;启动main方法&#xff0c;自动创建main线程* * thread.join() 阻塞乌龟线程&#xff0c;乌龟执行完…

20级四班班级管理规章制度

点击上方蓝色关注我们&#xff01;

完全图解RNN、RNN变体、Seq2Seq、Attention机制

转载自 完全图解RNN、RNN变体、Seq2Seq、Attention机制 完全图解RNN、RNN变体、Seq2Seq、Attention 机制 本文首发于知乎专栏“ai insight”&#xff01; 本文主要是利用图片的形式&#xff0c;详细地介绍了经典的RNN、RNN几个重要变体&#xff0c;以及Seq2Seq模型、Attent…

OJ1306-最长公共子上升序列【dp】

前言 这是一道比较久之前的题了&#xff0c;之前没做完。不过这次不是因为我改了&#xff0c;而是数据改了&#xff08;可能之前有问题&#xff09;&#xff0c;然后偶然今天翻的时候就发现自己对了QAQ。 题目 OJ1306 就是给出两个序列&#xff0c;求出这两个序列中公共的最…

多线程三种同步方式(模拟银行取款)

方法一&#xff1a;同步代码块 Accoun package com.bjsxt.synch1;/*** 银行账户类*/ public class Account {private int balance 600;//余额/*** 取款* param money*/public void withDraw(int money){this.balance this.balance -money;}/*** 查看余额* return*/public i…

今天就唠叨唠叨吧……

点击上方蓝色关注我们&#xff01;看书这个爱好是从去年年底开始的。看关于教育教学管理类型的书籍是从今年前半年开始的&#xff0c;有好些书都是王晓春老师写的&#xff0c;例如《做一个专业的班主任》、《问题学生诊疗手册》《今天怎样做教师》&#xff0c;每本书都有不一样…

利用redis保存验证码并设置过期时间

package com.atguigu.jedis;import redis.clients.jedis.Jedis;import java.util.Random;public class PhoneCode {public static void main(String[] args) {//模拟验证码发送verifyCode("13678765435");//模拟验证码校验//getRedisCode("13678765435",&q…

洛谷P2085ssl1411OJ1370-最小函数值【堆,贪心】

前言 有一个东西卡了我一会 折叠N*或N 正整数集 (由全体正整数组成的集合) N*:{1,2,3,…,n,…} 题目 洛谷P2085 OJ1370 给出n个ai,bi,ci。定义一个函数 fi(x)aix2bixci(x∈N∗)fi(x)aix2bixci(x∈N∗)然后求最小的m个数解题思路 这道题比较简单&#xff0c;一下就想到了…

如何轻松愉快的理解条件随机场(CRF)

转载自 如何轻松愉快的理解条件随机场&#xff08;CRF&#xff09; 如何轻松愉快的理解条件随机场&#xff08;CRF&#xff09;&#xff1f; 理解条件随机场最好的办法就是用一个现实的例子来说明它。 但是目前中文的条件随机场文章鲜有这样干的&#xff0c;可能写文章的人…