深度学习-自然语言模型随记

为什么要研究深度学习?

语言模型

看概率!

n-gram

一行一行看,比如第一行,i后面接i的出现次数,i后面接want的出现次数。
上面表表示词后面接某词的次数,下面表表示词后面接某词的概率。

N表示预料库的大小,小n在建模时一般取2,3就可以,也可以取到4,再大就会造成模型太过庞大。

词向量

one-hot构造词向量在此处的问题?但是构造出来的东西的价值利用程度高不高,它无非就是一个词的映射。这种情况下词与词之间,句子与句子就失去了关系。我们不光是要生成词的向量还要使词与词之间是有意义的。所谓的意义就是不能像one-hot编码这么简单,要让词和词之间要有一个潜在的含义。
怎样把一个词转换成一个向量?(word2vector)
词向量必须具有一层潜在的含义,相似的词挨的比较近,转换后的词向量也应该挨的比较近。在我们语言空间上应该表现出来这样一层含义。

计算机需要理解上表达意思相近的词的含义,比如今天的菜便宜和今天的菜贱,当他们都是指菜便宜这一件事时,计算机应该要在向量空间中表达出来。所以说同义词是非常重要的。

右侧是西班牙语表达的词向量空间。 这两种语言构造出来的模型是相似的,这为什么呢?因为我们构造出来的词向量并不是跟语言挂钩,只跟语义的逻辑环境挂钩。 我们不关心词的性质(大小),关心的是词上下文的整体逻辑。

神经网络模型

词向量模型和神经网络模型有什么挂钩?

在Projection Layer(投影层)对输入的词向量进行一个拼接,讲他们的向量合层一个整体来处理。

在统计模型看来,猫在房间跑和狗在房间跑是明显不同的。

猫在房间跑和狗在房间在神经网络看来就是动物在房间跑,所以其中的一个句子的出现概率增大,另一个句子的出现概率也会相应的增大。这是神经网络模型比较重要的特点。这就是为什么我们要用神经网络来进行一个求解,因为在神经网络语言模型当中我们可以得到词语之间近似的一个含义,而且它求解出来的空间语言模型也是符合我们真实的一个规律的。

Hierarchical Softmax(分层的softmax)

神经网络实现的两种方案:

左侧模型是根据上下文的词来预测我们的当前词是什么。右侧模型的输入是当前词,来预测上下文。

CBOW

使当前词出现的概率越大越好。

哈弗曼树

权值*步长
我们可以把哈弗曼树的权值想象成词的词频,意图是讲我们生活当中越常使用的词在哈弗曼树中越靠前。在树中分层的softmax也就是说分层的进行一个判断,这样可以使得最重要的词在前面。

哈弗曼树构造的流程。
我们还可以拿哈弗曼树来进行编码,如果我想知道一个词对应的编码是什么,在哈弗曼树中可以利用到0(左子树)和1(右子树)编码。
哈弗曼树可利用的两点就是:带权路径最短和哈夫曼编码。
那对哈夫曼树进行判断是往左子树走还是往右子树走?我们要用到Hierarchical Softmax来进行判断。对于这样一个二分类,我们通常用的是逻辑回归。

Softmax是一个多分类的逻辑回归!!

CBOW模型实例

首先看怎样才能走到足球,需要一次次的判断往左走还是往右走。
得出结果足球的计算是个累乘的过程,相当于第一次*第二次*第三次*第四次

CBOW求解目标

求解目标:什么样的Context(w)使得p(概率)达到最大。

梯度上升求解

求一个最大值,那就采用梯度上升的方法。

还需要对X进行一个求导,因为X也会对结果才是一个非常大的影响。

式子的第一项是每个词的词向量。

Negative Sampling(负采样),一般采用这种建模方式(简单)

词库特别特别大的时候,那么哈弗曼树中间或后面的词节点咋办,计算复杂度还是很高。

1:代表预测出来的结果和我的词对应上,0:代表没对应上。
预测的结果有正例和负例。

词频越大的越容易被随机到,哈弗曼树是比较老的做法,现在采用的负采样来帮助我们分类。

NEG表示负样本的空间。1-不属于这个词的概率,结果就是属于这个词的概率。

v(w)就是最终我想要的词的词向量结果。

猜你喜欢

转载自juejin.im/post/5bd988b6e51d456881198aea