Coursera自然语言处理 Week1 笔记
来源:互联网 发布:手机怎么连接电脑网络 编辑:程序博客网 时间:2024/05/16 09:30
从今天开始,重新开始看Micheal Collins的NLP公开课。预计7天时间。
1. 概率模型- Markov Process
毕竟是机器学习嘛,所以第一步,先要把实际问题转化成数学模型。在NLP中,一般使用的都是概率模型,即把语言模型变成概率论范畴。
比如说,现在有一段语音,说的很含糊,没有听清楚,好像是“like your”,又好像是“lie cured”。那么到底是哪一种呢?我们就看在现有的语料库中,到底是“like your”出现的概率大,还是“lie cured”的概率大。
于是就把语音识别问题转变成了一个概率问题:输入一串字符,输出这串字符组合在一起的概率,如果概率大,就是正确的句子。下面构建这个模型:
假设有一个句子
根据贝叶斯公式(条件概率公式),可知:
为方便起见,补充
对于,其中的
然而大数定律满足的条件是,
正确的计算方式是用“Markov process”来假设:
第一种假设:
Unigram:
P(xi|x1,...,xi−1)≈P(xi) 则我们的概率模型变成:
P(S)=∏i=1nP(xi|x1,...,xi−1)≈∏i=1nP(xi)
第二种假设:
Bigram (First-order Markov):
P(xi|x1,...,xi−1)≈P(xi|xi−1) 则我们的概率模型变成:
P(S)=∏i=1nP(xi|x1,...,xi−1)≈∏i=1nP(xi|xi−1)
第三种假设:
Trigram (Second-order Markov):
P(xi|x1,...,xi−1)≈P(xi|xi−1,xi−2) 则我们的概率模型变成:
P(S)=∏i=1nP(xi|x1,...,xi−1)≈∏i=1nP(xi|xi−1,xi−2)
至此,我们模型框架已经搭建完毕,接下来只要把
2. 模型参数计算
假设训练集中共有
Unigram -
P(xi)=#(xi)V Bigram -
P(xi|xi−1)=#(xi−1,xi)#(xi−1) Trigram -
P(xi|xi−1,xi−2)=#(xi−2,xi−1,xi)#(xi−1,xi)
这里大数定律基本可以成立,因为这样的小型组合还是不难找到的。
如此,就可以把模型中的每一个参数计算出来了。
3. 参数计算的问题
3.1 Unknown words pair
虽然可以找到比较大数据集,但是在训练集中依旧可能出现
3.1.1 Linear Interpolation
第一种解决方法称为 Linear Interpolation。
先再看一下三种参数计算方式:
Unigram -
q(xi)=#(xi)V Bigram -
q(xi|xi−1)=#(xi−1,xi)#(xi−1) Trigram -
q(xi|xi−1,xi−2)=#(xi−2,xi−1,xi)#(xi−1,xi)
单纯使用式子1是最有可能造成underfitting的,因为没有一点儿上下文关联信息在里面;使用式子3是最有可能造成overfitting的,因为对上下文的关联性太强,对于训练集中的context记忆太深。
因此,解决Unknown words pair问题,提升模型泛化能力的其中一个方法,就是结合上面式子1-3,不单纯地使用一个假设,令:
其中,要求
考虑到这是一个概率问题,即训练集中,所有的三元组
P(xi|xi−1,xi−2) 之和应等于1:∑P(xi|xi−1,xi−2)=∑λ1q(xi)+∑λ2q(xi|xi−1)+∑λ3q(xi|xi−1,xi−2)=λ1∑q(xi)+λ2∑q(xi|xi−1)+λ3∑q(xi|xi−1,xi−2) 其中,因为概率计算,所以有
∑q(xi)=1 ,∑q(xi|xi−1)=1 ,∑q(xi|xi−1,xi−2)=1 ,因此,
∑P(xi|xi−1,xi−2)=λ1+λ2+λ3=1
这里的三个系数用下面的方法进行选择:
挑选
当
上面只是最简单的线性组合的形式,
如,Bucketing方法:对出现不同次的词组,使用不同的系数:
又如,将三个系数写成同一个参数的线性组合:
3.1.2 Discounting
就是从概率不为0的词组中预留一部分的概率给未出现过词组。
4. 模型评估
模型想要达到的目的是,generate出来的句子是正确的!而这个“正确性”是由概率来表示的,概率
下面假设从测试集中生成了句子
注意到一个问题,在实际编程中,使用
然后从测试集中,我们生成了好多的句子
一般在机器学习中,评估标准是cost function,越小越好,在这里也是一样,为了满足越小越好,将上式变成下面的形式:
可以看到,Perplexity越小,正确性越高(概率越大)。
- Coursera自然语言处理 Week1 笔记
- Coursera自然语言处理 Week2 笔记
- Coursera自然语言处理 Week3 笔记
- Coursera自然语言处理 Week4 笔记
- Coursera机器学习 Week1 笔记
- Coursera Machine Learning Week1 学习笔记
- 【Coursera Machine Learning】 Week1 学习笔记
- Coursera机器学习笔记(week1)
- coursera NLP学习笔记之week1课程介绍&基础的文本处理
- coursera NLP学习笔记之week1最小编辑距离计算
- Coursera课程《Machine Learning》学习笔记(week1)
- Coursera上的Andrew Ng《机器学习》学习笔记Week1
- Coursera-Crypto1 Week1
- 《python自然语言处理》笔记
- 自然语言处理-手写笔记
- 自然语言处理学习笔记
- 自然语言处理学习笔记
- COURSERA Machine Learning WEEK1&&WEEK2
- Rhyme/Linux ACL权限管理简介、查看与开启ACL权限管理命令
- python控制台代码自动补全
- Unity3D之Mecanim动画系统学习笔记(一):认识Mecanim动画系统
- JAVA分布式快速开发基础平台 iBase4J 推荐 国产 J2EE框架
- angular 表单验证,密码双向验证
- Coursera自然语言处理 Week1 笔记
- MarkDown用法介绍
- Android6.0没有权限读取外部存储的问题
- [C++]数组初始化
- Discuz! X3.2手动升级到最新版本的方法?
- centos下Docker在线安装
- POJ 2411 Mondriaan's Dream(状压DP)
- 牛顿法与拟牛顿法学习笔记(一)牛顿法
- chmod用数字来表示权限的方法