自然语言处理
- 检查拼写、关键词检索……
- 文本挖掘(产评价格、日期、时间、地点、地点、人民、公司名)
- 文本分类
- 机器翻译
- 客服系统
- 复杂对话系统(微软小冰)
深度学习
基础模型>>神经网络>>优化目标>>效果最优
为什么需要研究深度学习
- 手工特征耗时耗力,还不易拓展
- 自动特征学习快,方便拓展
- 深度学习提供了一种通用的学习框架,可用来表示世界、视觉和语言学信息
- 深度学习既可以无监督学习,也可以监督学习(强化学习是无监督的)
语言模型
算概率最可能的翻译
算概率标注红线
Example
我 今天 下午 打 篮球(边说边想)
p(S)=p(w1,w2,w3,w4,w5)=p(w1)p(w2∣w1)...p(w5∣w1,w2,w3,w4)
P(S)被称为语言模型,即用来计算一个句子的概率模型
** 存在问题:**
1. 数据过于稀疏
2. 参数空间太大
N-gram模型
假设下一个词只依赖它前面的一个词:
P(S)=p(w1)p(w2∣w1)...p(wn∣wn−1)
可以指定参数n的值,n=2即和前面两个词相关,通过样本计算每个词的出现概率。
模型参数的量级是O(Nn),常用参数为2或3。
词向量
把一个词转换成向量,生成的向量相似的词之间的距离要相近
我们希望我们构造出来的词向量和语言无关(因为语言的逻辑是差不多的)
因此不同语言构造出来的词向量是差不多的
神经网络模型
比如输入“今天 下午 打”(分别生成一个词向量)–> 预测第四个词
把词向量首位连接起来
隐层和隐层之间的参数
隐藏层和输出层之间的参数
训练样本
(Context(w),w)包括前n−1个词分别的向量,假定每个词的向量大小都为m
投影层
(n−1)∗m首位拼接起来的大向量
输出
yw=(yw1,yw2,...,ywn)T
表示上下文为Context(w)时,预测结果:下一个词旗号为词典中第i个词的概率
用label去表示,然后可以定义损失函数
归一化
分类层,一般用softmax,p(w∣Context(w))=eyw,iw/∑1neyw,i
神经网络模型相对于传统的语言模型的优势,举个栗子:
s1=今天去网咖,s2=今天去网吧,s1出现1000次和s2出现10次是差不多的
我们可以得到词之间的对应关系,这很符合现实。
Hierarchical Softmax(分层的softmax)
输入就是上下文,输出就是预测词
输入是当前词,输出是上下文
CBOW
CBOW是ContinuousBag−of−WorldsModel的缩写,是一种根据上下文的词语预测当前词语出现概率的模型
ι=∑w∈clogp(w∣Context(w))
输入层是上下文的词语的词向量,在训练CBOW模型,词向量只是个副产品,确切来说,是CBOW模型的一个参数。训练开始的时候,词向量是个随机值,随着训练的进行不断被更新。
投影层对其求和,所谓求和,就是简单的向量加法。
输出层输出最有可能的w。由于语料库中词汇量是固定的∣C∣个,所以上述过程其实可以看作一个多分类问题。给定特征,从∣C∣个分类中挑选一个。
哈夫曼树
带权路径长度最短的二叉树,也称为最优二叉树。
举个栗子:霍夫曼编码
高频词汇尽可能的离根结点近,即结点的权值大,最后通过哈夫曼树进行分层判断(二分类问题)。
它的构造过程就是高频词先合并,然后比较权值继续构造。
Logistic回归
Sigmoid函数:g(z)=1/1+ez
将任意一个数映射到(0,1),根据正例和负例解决二分类问题,
比如我 爱 巴西 足球,输出就是4次正例或负例的概率连乘积,
以上就是分层的softmax。
求解目标
通过Logistic回归我们就知道了当们我要得到一个词w而分层(正例的次数幂与负例的次数幂)恰好得到w的概率为:
p(djw∣Xw,θj−1w)=[σ(XwTθj−1w)]1−djw∗[1−σ(XwTθj−1w)]djw
把上面的概率公式带入CBOW语言概率模型(优化成对数和形式的似然函数):
ι=∑w∈clogp(w∣Context(w))
连续相乘在log的作用下变成了连续相加,最后得到以下公式:
ι=∑w∈c∑j=2lw(1−djw)log[σ(XwTθj−1w)]+djwlog[1−σ(XwTθj−1w)]
我们求解的目标就是优化这个似然函数求得它的最大值,我们采用梯度上升方法求解。
梯度上升
对σ求导数,求得方向,然后我们再指定一个步长,最后得到θj−1w的更新表达式:
θj−1w=θj−1w+η[1−djw−σ(XwTθj−1w)]Xw
然后再对投影层词向量的和Xw求导数,但是这里需要注意的是Xw是上下文的词向量的和,不是上下文单个词的词向量。怎么把这个更新量应用到单个词的词向量上去呢?word2vec采取的是直接将Xw的更新量整个应用导每个单词的词向量上去:
v(w)=v(w)+η∑j=2lw∂ι(w,j)/∂Xw,w∈Content(w)
负采样模型
如果语料库过大,为了避免模型过大,我们可以使用负采样模型,通过指定正样本(我 爱 打 篮球),篮球就是正样本,其它的就是负样本。
任何采样算法都应该保证频次越高的样本越容易被采样出来。基本的思路就是对于长度为1的线段,根据词语的词频将其公平的分配给每个词语。