分享

人工智能的自然语言原理是什么?


问题导读

1.深度学习理解自然语言是通过什么来实现的?
2.邮件自动回复模型的原理是什么?
3.LSTM可以实现什么?








人工智能有很多很多的模型/方法来实现,我这里主要谈谈在深度学习下,特别是在编/解码器架构下,机器理解自然语言的原理。
深度学习理解自然语言是通过编码器(Encoder)来实现的。对于自然语言的句子,机器并没有办法直接理解它的意思,我们需要用编码器把句子转换成机器比较容易理解的编码才行。

以如下邮件自动回复模型为例,
v2-b0ef923f9f13e1bac4f441dacc749e18_r.jpg

左边编码器(ENCODER)以LSTM为基本网络结构(LSTM是RNN的一种经典实现),依次从左要右读入邮件中的词,最终所有词都读完后,得到的输出(图中的thought vector)是一个浮点数向量。我们称这个向量是该邮件的编码,该编码中隐含了机器对这个邮件的理解。
当然,这个浮点数向量本身对于人类来说是不可阅读的,所以我们要用解码器(DECODER)让机器输出我们能理解句子。上图中,解码器也是一个LSMT,它依次输出各个词,直到输出<END>为止。

听起来这确实有点玄乎,但在实际运用中却能够取得不错的效果。我觉得这主要还是得益于我们用大量的训练数据(<邮件原文,邮件回复>)去训练这组编解码器,使得网络中的各种权重拟合了数据的样式。

在上述例子中,ENCODER和DECODER都是LSTM来实现的,因为LSTM擅长处理序列输入和序列输出。但这并不意味着我们在理解自然语言的任务中只有这样一种选择,特别是当我们要解决一个分类问题的时候,我们会更加自然地用一个简单的Softmax层作为DECODER。哪怕在一个邮件自动回复系统或者机器翻译任务中,只要网络的组合方式合理得当,我们仍然可以选择CNN[Gehring et al. 2017],ATTENTION[Vaswani, et al., 2017]等非RNN的网络作为Encoder、Decoder的基本结构,并取得不错的效果。

最后,值得一提的是,在上述例子中,我们一般不会把词语直接读入LSTM,而是先把词语映射成一个浮点数向量(不同的词语对应不同的向量),用来表示这个词的语义。假设你的词典里面有100,000个词,那么就有100,000个向量。我们称这样的向量为embedding或者word vector。增加这个步骤的目的是为了增强编/解码器对于词语的理解。当我们训练完这组编/解码器之后,就会神奇地发现,词向量具有了词语的语义。如下图所示,
v2-d2e901cdfb1261fcd3ab000942cd97b2_hd.jpg
这也就给词语的加减运算赋予了物理意义,这对于神经网络理解整个文本是很有益处的。




作者:Da Huang
链接:https://www.zhihu.com/question/19881596/answer/282647739
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


已有(1)人评论

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条