FastText就是一种word2vec,只不过FastText更加目标化。
文本生成
这里有一个问题,如果你把每个单字作为模型输入的话,你把x1,x2,x3输入分类器,而分类器每次只能处理一个x。例如当你输入"你",我告诉你下一个字是"瞅",你告诉我"瞅",我告诉你下一个字是"啥",你告诉我"啥",我告诉你"瞅你咋地?!",用人的思维想就知道,这是不可能的,因为歧义太多了,如果我们是一个一个塞进我们的分类器的话,他们之间的关系是不能被保证的,不知道整个语境有多长,不知道语境下面它到底是什么意思,这时我们需要一种带记忆的神经网络来解决这个问题。
带记忆的神经网络
记忆
RNN的N(context)是要设置的,你要告诉它看有多长的路要看,多长的历史要看,把Xt的关联关系都得考虑上。
LSTM(长效的短期记忆 long short-term memory)
案例
题目原型:What's Next? 可以在不同的维度上:
- 1.下一个字母是什么?
- 2.下一个单词是什么?
- 3.下一个句子是什么?(问答机器人)
- 4.下一个图片/音符/...是什么?
文本分类
CNN4Text
为什么CNN可以处理text,而RNN也可以处理text,他们的区别是?
上面句子中的关键字(看,话,感)当做是注意力。
边界处理
我们该如何申请一个filter。申请一个3*3的filter在矩阵的中心会工作的很好,但是在矩阵的边际会怎样呢?矩阵的第一个元素,其顶部和左边都没有相邻元素,你该如何将filter应用到这样的元素上?你可以使用zero-padding(0填充)所有落到矩阵以外的元素都将用0代替。这样你就可以将filter应用到你输入的任何矩阵中了,并且可以得到一个更大或等大的矩阵作为输出。添加zero-padding也被称为wide convolution,而不使用zero-padding的将称为narrow convolution。下图是一个1维的例子:
当你的filter比输入的size还大时,你可以看到wide convolution是多么的有用,甚至说是必须的。如上所示,narrow convolution产出的尺寸是(7-5)+1=3,而wide convolution产出尺寸是(7+2*4-5)+1=11。通常,输出尺寸的规则表达式为:
步伐大小
Stride size,定义了你的filter在每步中滑动多少。上面提到的所有例子中都是默认为1,并且是连续重叠的应用filter。Stride size越大,filters的应用次数就会越少,输出的size就会越小。下图描述了Stride size分别为1和2,应用到1维的输入上: