RNN既可以表述为循环神 经网络(recurrent neural network),也可以表述为递归神经网络(recursive neural network),前者一般用于处理以时间序列为输入的问题(比如把一个句子看成词组成的序列),每次向循环神经网络输入一个词,知道整个句子输入结束。后者一般用于处理图结构或树结构问题(比如为了处理歧义问题,我们构造语法树为输入,而不是循环输入每一个词)。

下图是循环神经网络的展开

图1

下面是一个句子对上图的应用

图2

可以这样理解:将所有用到的英文词向量化之后,the表示为(0.4,0.3),对应图1中的x输入,经过神经元计算之后输出为(1,3.5),神经元内部的计算方式为:

函数f通常是诸如tanh或者ReLU的非线性函数,U,x,St-1都为向量且U、V、W都是待训练参数。输出O可以选择softmax函数,其表达式如下

这里的变量i对应图1中的变量t,可见

也就是说循环神经网络所有输出之和为1,输出O的计算公式为

其中V和St都是向量。也就是说神经元先计算隐状态St,然后计算输出Ot

下面以树结构为例来说明递归神经网络的输入与计算

1.将句子分词之后,给每个词一个向量,这里词的向量化可以采用one-hot或者其他一些向量化工具,比如Google的gensim

2.将词按照树形结构输入,以图3为例

图3

2.1 首先计算“两个”和“外语学院”的父节点的向量,计算方法是:假设“两个”的词向量表示为c1,“外语学院”的词向量表示为c2,那么父节点对应的向量P为

其中W和b是训练好的参数,tanh是双曲正切函数,表达式为

2.2 依次迭代计算各个父节点对应的向量,最终得到根节点对应向量。

因为是以语法树输入的,所以对于歧义问题有较好的处理能力,比如图3中的句子也可以用图4的语法树来表示:

图4

事实上,图3与图4对应的根节点向量完全不同,因为词向量的输入顺序是不一样的。

在得到根节点向量后,我们就可以去完成一些更高级的任务,比如计算语义相似度或者情感分析等。

最新文章

  1. 从零开始学 Java - Windows 下安装 Tomcat
  2. The listener supports no services解决一例
  3. HDU2222 Keywords Search [AC自动机模板]
  4. Wisdombud.CommonTool及其应用
  5. 在MAC平台下编译Ngnix ,由于MD5算法不能编译通过 解决办法
  6. (转)MySql可视化工具MySQL Workbench使用教程
  7. bzoj 1876 [SDOI2009]SuperGCD(高精度+更相减损)
  8. 从一般分布式设计看HDFS设计思想与架构
  9. 40个Java多线程问题
  10. Spring Boot Hikari
  11. 【6】学习C++之类的实例化及访问
  12. day 20 - 1 序列化模块,模块的导入
  13. python爬虫第四天
  14. 高速上手C++11 14 笔记1
  15. JS动态创建元素
  16. 生产环境Linux常用命令【随时更新】
  17. H5页面input输入框含有键盘自带的表情符时显示异常
  18. <noip2017>列队
  19. 8.什么是模块,模块的导入,__name__
  20. WAV文件格式解析及处理

热门文章

  1. spring事务管理及相关知识
  2. apache的日志access_log分析
  3. chapter02 K近邻分类器对Iris数据进行分类预测
  4. HDU 1024:Max Sum Plus Plus(DP,最大m子段和)
  5. java设计模——反射的应用 (利用反射来去除if判断语句)
  6. JS Array.filter()方法
  7. HTML标签 select 里 动态添加option
  8. ZOJ3545 Rescue the Rabbit
  9. log parser 微软iis 日志分析
  10. 箭头函数中的 this