Press "Enter" to skip to content

word2vec与深度学习-随记

给你前面的句子,我来告诉你应该回答什幺。不一定是句子,可以是字或符号。

 

这里有一个问题,如果你把每个单字作为模型输入的话,你把x1,x2,x3输入分类器,而分类器每次只能处理一个x。例如当你输入”你”,我告诉你下一个字是”瞅”,你告诉我”瞅”,我告诉你下一个字是”啥”,你告诉我”啥”,我告诉你”瞅你咋地?!”,用人的思维想就知道,这是不可能的,因为歧义太多了,如果我们是一个一个塞进我们的分类器的话,他们之间的关系是不能被保证的,不知道整个语境有多长,不知道语境下面它到底是什幺意思,这时我们需要一种带记忆的神经网络来解决这个问题。

 

带记忆的神经网络

X1输入保留它的状态,x2输入保留它的状态,x3输入后,输出整体的Ot

s是指记忆的状态。

 

记忆

如果说我的(context)对话非常长,例如今天吃 吃的怎幺样,今天天气 天气怎幺样,然后你又问刚刚 穿山甲说了什幺?对于这种情况,如果我们只考虑前面的对话的话,穿山甲说了什幺?你是完全不记得的。穿山甲说的话在很早之前就说过了,而现在又有人问这句话,最好的方式是 比如说把整个对话句子都囊括进RNN的N(context里面),但这件事有个非常大的问题是不经济实惠,要花太多的计算量来记住太多的东西。对于这问题怎幺办,于是就有个RNN的升级版LSTM。

 

RNN的N(context)是要设置的,你要告诉它看有多长的路要看,多长的历史要看,把Xt的关联关系都得考虑上。

 

LSTM(长效的短期记忆 long short-term memory)

案例

 

题目原型:What’s Next? 可以在不同的维度上:

1.下一个字母是什幺?
2.下一个单词是什幺?
3.下一个句子是什幺?(问答机器人)
4.下一个图片/音符/…是什幺?

文本分类

把一个句子看成一幅画,然后用卷积神经网络来看这幅画。

 

CNN4Text

用滤镜处理出各种不同的特征图

每个词处理成6维的向量,每个句子组成一个矩阵,矩阵的高是句子的长,宽是词向量。

把每个句子做成特征向量,然后用一个一维的filter来扫描。

 

为什幺CNN可以处理text,而RNN也可以处理text,他们的区别是?

RNN它认为它是在模拟我们人类在看到句子的时候是一个单词一个单词进入我们的眼睛的。RNN被用在生成模型上。对生成而言我们是不能容忍语病存在的,我们要保证每句话从头到尾逻辑严谨,前后之间关系都是好的。

我们人在看到一句话时,是以一幅画的形式进入眼睛的。CNN被用在分类模型上。CNN可以把语病的句子也模拟的很好,就是说意思上相近的东西,都能被CNN认为是一种分类。对分类而言我们要容忍语病的存在。

 

上面句子中的关键字(看,话,感)当做是注意力。

 

边界处理

 

我们该如何申请一个filter。申请一个3*3的filter在矩阵的中心会工作的很好,但是在矩阵的边际会怎样呢?矩阵的第一个元素,其顶部和左边都没有相邻元素,你该如何将filter应用到这样的元素上?你可以使用zero-padding(0填充)所有落到矩阵以外的元素都将用0代替。这样你就可以将filter应用到你输入的任何矩阵中了,并且可以得到一个更大或等大的矩阵作为输出。添加zero-padding也被称为wide convolution,而不使用zero-padding的将称为narrow convolution。下图是一个1维的例子:

Narrow vs. Wide Convolution. Filter size 5, input size 7. Source: A Convolutional Neural Network for Modelling Sentences (2014)

 

当你的filter比输入的size还大时,你可以看到wide convolution是多幺的有用,甚至说是必须的。如上所示,narrow convolution产出的尺寸是(7-5)+1=3,而wide convolution产出尺寸是(7+2*4-5)+1=11。通常,输出尺寸的规则表达式为:

在上图我们可以看到一个典型的Stride Size为1的Convolution,而更大的Stride Size可以让你建立一个类似与RNN结构的模型,也就是看起来像一棵树。

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注