FastText就是一种word2vec,只不过FastText更加目标化。网络
文本生成
给你前面的句子,我来告诉你应该回答什么。不必定是句子,能够是字或符号。
这里有一个问题,若是你把每一个单字做为模型输入的话,你把x1,x2,x3输入分类器,而分类器每次只能处理一个x。例如当你输入"你",我告诉你下一个字是"瞅",你告诉我"瞅",我告诉你下一个字是"啥",你告诉我"啥",我告诉你"瞅你咋地?!",用人的思惟想就知道,这是不可能的,由于歧义太多了,若是咱们是一个一个塞进咱们的分类器的话,他们之间的关系是不能被保证的,不知道整个语境有多长,不知道语境下面它究竟是什么意思,这时咱们须要一种带记忆的神经网络来解决这个问题。ide
带记忆的神经网络
X1输入保留它的状态,x2输入保留它的状态,x3输入后,输出总体的Ot
s是指记忆的状态。
记忆
若是说个人(context)对话很是长,例现在天吃 吃的怎么样,今每天气 天气怎么样,而后你又问刚刚 穿山甲说了什么?对于这种状况,若是咱们只考虑前面的对话的话,穿山甲说了什么?你是彻底不记得的。穿山甲说的话在很早以前就说过了,而如今又有人问这句话,最好的方式是 好比说把整个对话句子都囊括进RNN的N(context里面),但这件事有个很是大的问题是不经济实惠,要花太多的计算量来记住太多的东西。对于这问题怎么办,因而就有个RNN的升级版LSTM。
RNN的N(context)是要设置的,你要告诉它看有多长的路要看,多长的历史要看,把Xt的关联关系都得考虑上。3d
LSTM(长效的短时间记忆 long short-term memory)
案例
题目原型:What's Next? 能够在不一样的维度上:cdn
- 1.下一个字母是什么?
- 2.下一个单词是什么?
- 3.下一个句子是什么?(问答机器人)
- 4.下一个图片/音符/...是什么?
文本分类
把一个句子当作一幅画,而后用卷积神经网络来看这幅画。
CNN4Text
用滤镜处理出各类不一样的特征图
每一个词处理成6维的向量,每一个句子组成一个矩阵,矩阵的高是句子的长,宽是词向量。
把每一个句子作成特征向量,而后用一个一维的filter来扫描。
为何CNN能够处理text,而RNN也能够处理text,他们的区别是?
RNN它认为它是在模拟咱们人类在看到句子的时候是一个单词一个单词进入咱们的眼睛的。RNN被用在生成模型上。对生成而言咱们是不能容忍语病存在的,咱们要保证每句话从头至尾逻辑严谨,先后之间关系都是好的。
咱们人在看到一句话时,是以一幅画的形式进入眼睛的。CNN被用在分类模型上。CNN能够把语病的句子也模拟的很好,就是说意思上相近的东西,都能被CNN认为是一种分类。对分类而言咱们要容忍语病的存在。
上面句子中的关键字(看,话,感)当作是注意力。blog
边界处理
咱们该如何申请一个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。一般,输出尺寸的规则表达式为: input
步伐大小
Stride size,定义了你的filter在每步中滑动多少。上面提到的全部例子中都是默认为1,而且是连续重叠的应用filter。Stride size越大,filters的应用次数就会越少,输出的size就会越小。下图描述了Stride size分别为1和2,应用到1维的输入上: 原型
在上图咱们能够看到一个典型的Stride Size为1的Convolution,而更大的Stride Size可让你创建一个相似与RNN结构的模型,也就是看起来像一棵树。