1、从一个例子说起
假设要做一个智能客服系统或者智能订票系统之类的,需要用到一个叫做 Slot Filling(添槽) 的技术,举个例子,如果做一个人对智能订票系统说 ”I would like to arrive Taipei on November 2nd“。那么你的系统会有一些 Slot,在这里应该是 Destination 和 time of arrival ,然后根据对方的话讲一些词填入到这些 Slot 中。具体如下图:
那应该要怎么实现以上的 Slot Filling 呢?可以考虑用之前学过的 前馈神经网络(Feedforward Neural NetWork),将输入的单词转换成向量的形式输入神经网络进行学习。将单词转换成向量的方法有很多,如1-of-N encoding、Dimension for "others" word hashing等。
那以上的方法真的可行吗? 想一下输入的两个句子是
***arrive Taipei on November 2nd.
***leave Taipei on November 2nd.
第一句中的 Taipei 表示的是目的地,而第二句中的表示的是出发地,但是我们的前馈神经网络是无法分辨这种情况的,因为前馈神经网络并不知道在 Taipei 之前是什么单词。也就是说,因为前馈神经网络没有记忆性。
2、Recurrent Neural Network(RNN)
RNN 具有记忆性,而这是通过设置一些内存单元实现的,如在下图中,a1 和 a2 就表示内存,其中存的值就是 hidden layer 的输出。并且,a1 和 a2 同样会被当成下一阶段hidden layer 输入。
A、假设所有的 weight 都是 1,bias 都是 0,a1 和 a2 的初始值是 0, σ(z)=z(即线性函数),
a、第一次的输入为 [1, 1] ,那 hidden layer 的输出就是 [2, 2]