人对一个问题的思考不会完全从头开始。比如你在阅读本片文章的时,你会根据之前理解过的信息来理解下面看到的文字。在理解当前文字的时候,你并不会忘记之前看过的文字,从头思考当前文字的含义。
传统的神经网络并不能做到这一点,这是在对这种序列信息(如语音)进行预测时的一个缺点。比如你想对**中的每个片段去做事件分类,传统的神经网络是很难通过利用前面的事件信息来对后面事件进行分类。
而循环神经网络(下面简称RNNs)可以通过不停的将信息循环操作,保证信息持续存在,从而解决上述问题。RNNs如下图所示
可以看出A是一组神经网络(可以理解为一个网络的自循环),它的工作是不停的接收 并且输出 。从图中可以看出A允许将信息不停的再内部循环,这样使得它可以保证每一步的计算都保存以前的信息。
这样讲可能还是有点晕,更好的理解方式,也是很多文章的做法,将RNNs的自循环结构展开,像是将同一个网络复制并连成一条线的结构,将自身提取的信息传递给下一个继承者,如下图所示。
这种链式的结构揭示了RNNs与序列和列表类型的数据密切相关。好像他们生来就是为了处理序列类型数据的。
谁说不是呢!在过去的几年里,RNNs在语音识别、文字建模、翻译、字幕等领域有很成功的应用。在Andrej Karpathy写的博客 The Unreasonable Effectiveness of Recurrent Neural Networks 中讨论了RNNs取得的惊人成果,这里就不详细讨论了。
很对成功的案例都有一个共性,就是都用了一种叫LSTMs的特殊的RNNs网络结构。下面就来看看什么是LSTMs。
从之前的描述可以看出来,RNNs理论上是可以将以前的信息与当前的任务进行连接,例如使用以前的视频帧来帮助网络理解当前帧。如果RNNs能做到这一点,那将会是非常的有用。但是他们能做到这点吗?答案是不一定。
有时候我们需要利用近期的信息来执行来处理当前的任务。例如,考虑用一个语言模型通过利用以前的文字信息来预测下一个文字。如果我们需要预测“the clouds are in the sky”这句话的最后一个字,我们不需要其他的信息,通过前面的语境就能知道最后一个字应该是sky。在这种情况下,相关信息与需要该信息的位置距离较近,RNNs能够学习利用以前的信息来对当前任务进行相应的操作。如下图所示通过输入的 信息来预测出
假设现在有个更为复杂的任务,考虑到下面这句话“I grew up in France… I speak fluent French”,现在需要语言模型通过现有以前的文字信息预测该句话的最后一个字。通过以前文字语境可以预测出最后一个字是某种语言,但是要猜测出French,要根据之前的France语境。这样的任务,不同之前,因为这次的有用信息与需要进行处理信息的地方之间的距离较远,这样容易导致RNNs不能学习到有用的信息,最终推导的任务可能失败。如下图所示。
理论上RNNs是能够处理这种“长依赖”问题的。通过调参来解决这种问题。但是在实践过程中RNNs无法学习到这种特征。 Hochreiter (1991) [German] 和 Bengio, et al (1994) 深入研究过为什么RNNs没法学习到这种特征。
幸好LSTMs这种特殊的RNNs是没有这个问题的。
Long Short Term Memory networks(以下简称LSTMs),一种特殊的RNN网络,该网络设计出来是为了解决长依赖问题。该网络由 Hochreiter & Schmidhuber (1997) 引入,并有许多人对其进行了改进和普及。他们的工作被用来解决了各种各样的问题,直到目前还被广泛应用。
所有循环神经网络都具有神经网络的重复模块链的形式。 在标准的RNN中,该重复模块将具有非常简单的结构,例如单个tanh层。标准的RNN网络如下图所示
LSTMs也具有这种链式结构,但是它的重复单元不同于标准RNN网络里的单元只有一个网络层,它的内部有四个网络层。LSTMs的结构如下图所示。
在解释LSTMs的详细结构时先定义一下图中各个符号的含义,符号包括下面几种
图中**类似于CNN里的激活函数操作,粉色圆圈表示点操作,单箭头表示数据流向,箭头合并表示向量的合并(concat)操作,箭头分叉表示向量的拷贝操作
LSTMs的核心是细胞状态,用贯穿细胞的水平线表示。
细胞状态像传送带一样。它贯穿整个细胞却只有很少的分支,这样能保证信息不变的流过整个RNNs。细胞状态如下图所示
LSTM网络能通过一种被称为门的结构对细胞状态进行删除或者添加信息。
门能够有选择性的决定让哪些信息通过。其实门的结构很简单,就是一个sigmoid层和一个点乘操作的组合。如下图所示
因为sigmoid层的输出是0-1的值,这代表有多少信息能够流过sigmoid层。0表示都不能通过,1表示都能通过。
一个LSTM里面包含三个门来控制细胞状态。
前面提到LSTM由三个门来控制细胞状态,这三个门分别称为忘记门、输入门和输出门。下面一个一个的来讲述。
LSTM的第一步就是决定细胞状态需要丢弃哪些信息。这部分操作是通过一个称为忘记门的sigmoid单元来处理的。它通过查看 和 信息来输出一个0-1之间的向量,该向量里面的0-1值表示细胞状态 中的哪些信息保留或丢弃多少。0表示不保留,1表示都保留。忘记门如下图所示。
下一步是决定给细胞状态添加哪些新的信息。这一步又分为两个步骤,首先,利用 和 通过一个称为输入门的操作来决定更新哪些信息。然后利用 和 通过一个tanh层得到新的候选细胞信息 ,这些信息可能会被更新到细胞信息中。这两步描述如下图所示。
下面将更新旧的细胞信息 ,变为新的细胞信息 。更新的规则就是通过忘记门选择忘记旧细胞信息的一部分,通过输入门选择添加候选细胞信息 的一部分得到新的细胞信息 。更新操作如下图所示
更新完细胞状态后需要根据输入的 和 来判断输出细胞的哪些状态特征,这里需要将输入经过一个称为输出门的sigmoid层得到判断条件,然后将细胞状态经过tanh层得到一个-1~1之间值的向量,该向量与输出门得到的判断条件相乘就得到了最终该RNN单元的输出。该步骤如下图所示
还是拿语言模型来举例说明,在预测动词形式的时候,我们需要通过输入的主语是单数还是复数来推断输出门输出的预测动词是单数形式还是复数形式。
之前描述的LSTM结构是最为普通的。在实际的文章中LSTM的结构存在各种变式,虽然变化都不会太大,但是也值得一提。
其中一个很受欢迎的变式由 Gers & Schmidhuber (2000) 提出,它在LSTM的结构中加入了“peephole connections”结构,peephole connections结构的作用是允许各个门结构能够看到细胞信息,具体如下图所示。
上图描绘的是所有门都能看到细胞信息,还有一些变式是在其中的某些门引入细胞信息。
还有一种变式是在忘记门与输入门之间引入一个耦合。不同于之前的LSTM结构,忘记门和输入门是独立的,这个变式是在忘记门删除历史信息的位置加入新的信息,在加入新信息的位置删除旧信息。该结构如下图所示。
一种比其他形式变化更为显著的LSTM变式是由 Cho, et al (2014) 提出的门循环单元(GRU)。它将忘记门和输入门合并成一个新的门,称为更新门。GRU还有一个门称为重置门。如下图所示
其中重置门为上图中前面那个门,决定了如何将新的输入信息与前面的记忆相结合。更新门为上图中后面那个门,定义了前面记忆保存到当前时间步的量。 由于该变式的简单有效,后来被广泛应用。
这里介绍的只是一些较为有名的LSTM变式,关于LSTM的变式其实还有很多种,像 Yao, et al (2015) 提出的Depth Gated RNNs。还有其他用于解决长依赖问题的方法,如由 Koutnik, et al (2014) 提出的 Clockwork RNNs。
至于哪种变式效果最好?各种差异对LSTM的影响有多少?这些问题 Greff, et al (2015) 做了一些对比,结论是他们基本是一样的。 Jozefowicz, et al (2015) 测试了一万多种RNN结构,发现在某些指定任务上有些变式还是由于标准LSTMs的。
之前也提到过RNNs取得了不错的成绩,这些成绩很多是基于LSTMs来做的,说明LSTMs适用于大部分的序列场景应用。
一般文章写法会堆一堆公式吓唬人,希望本文一步一步的拆分能有助于大家的理解。
LSTMs对于RNNs的使用是一大进步。那么现在还有个问题,是否还有更大的进步?对于很多研究者来说,但是是肯定的,那就是attention的问世。attention的思想是让RNN在每一步挑选信息的时候都能从更大的信息集里面挑选出有用信息。例如,利用RNN模型为一帧生成字母,它将会选择有用的部分来得到有用的输入,从而生成有效的输出。事实上, Xu, et al (2015) 已经这么做了,如果你想更深入的了解attention,这会是一个不错的开始。attention方向还有一些振奋人心的研究,但还有很多东西等待探索
在RNN领域attention并不是唯一一个可以研究的点。比如 Kalchbrenner, et al (2015) 提出的Grid LSTMs, Gregor, et al (2015) , Chung, et al (2015) , 和 Bayer & Osendorfer (2015) 将RNNs用于生成模型的研究都非常有意思。
在过去几年RNNs方面的研究非常的多,相信以后的研究成果也会更为丰富。
同原文
欢迎加入OCR交流群:785515057(此群已满)
欢迎加入OCR交流群2:826714963
原文链接
源文地址: https://zhuanlanzhihucom/p/50095779
对话系列的系列文章,我都是学习上面链接大佬的文章,准备将整个对话系统脉络先走通,一边学习一边加以记录,使得自己学习效果更加深刻一点。想看的人还是建议去看大佬源文。
自然语言理解(NLU)就是要获得一个计算机能 直接使用的语义表示 。比如分布式语义表示(Distributional semantics)、框架语义表示(Frame semantics)、模型语义表示(Model-theoretic semantics)等,本文采用的是frame semantics。NLU在很多NLP领域或任务都有涉及,比如问答、信息检索、阅读理解、对话系统以及很多需要NLG的任务等。不同任务下的NLU也不一样,今天我们简单来聊聊对话系统中的NLU。对话系统的自然语言理解(NLU) 部分我们称之为SLU。
因为SLU内容较多,所以打算分3次写。第1次写领域分类和意图识别,第2次写槽填充,第三次写Structural LU、Contextual LU、各种NLU方法的对比以及评测标准。
对话系统按照功能划分为:闲聊型、任务型、知识问答型和推荐型。在不同类型的聊天系统中,NLU也不尽相同。
闲聊型对话中的NLU就是根据上下文进行意图识别、情感分析等, 并作为对话管理(DM)的输入;
任务型对话中的NLU就是领域分类和意图识别、槽填充。他的输入是用户的输入Utterance,输出是Un =(In, Zn), In是intention,Zn是槽植对。
知识问答型对话中的NLU主要是根据用户的问题,进行问句类型识别与问题分类,以便于更精准的进行信息检索或文本匹配来生成用户需要的知识(知识、实体、片段等)。
推荐型对话系统中的NLU就是根据用户各种行为数据和爱好进行兴趣匹配,以便于找到更精准的推荐候选集。
先来看看我汇总的任务型对话系统中的NLU之Domain/Intent Classification
下面分别介绍下对话系统中不同Domain/Intent Classification技术。
这个就是用传统的SVM或MaxEnt,模型方面就是传统的MaxEnt或SVM(几个不同变种、几种不同核函数等),特征主要就是用户的输入Utterance的句法、词法、词性等特征,分类的label集合是事先确定的,这方面paper也不少,不过比较久远了。相信大家都懂,不再赘述。
这种方法基于Deep belief network,它是一种生成模型,由多个限制玻尔兹曼机(Restricted Boltzmann Machines)层组成,被“限制”为可视层和隐层,层间有连接,但层内的单元间不存在连接。隐层单元被训练去捕捉在可视层表现出来的高阶数据的相关性。
具体到这篇论文,主要思路:无监督训练权重,然后用BP做Fine-tuning。另外,还对比了与SVM、最大熵、boosting的效果。
这是一种基于Deep convex network(一种可扩展的模式分类体系结构)做NLU,具体可以参考Li Deng大牛在2011的Interspeech的paper。
这个工作的主要思路:用n-grams对用户的Utterance做特征选择,然后把简单的分类器做 Stacking ,Stacking跟Bagging与Boosting一样,也是一种ensemble的方法。 Stacking 指训练一个模型用于组合其他各个模型, 在这里相当于二次分类 。首先训练多个不同的模型,然后把训练的各个模型的输出作为输入来训练一个模型以得到最终输出。
另外,基于DCN的方法还被扩展到kernel-DCN( Deng et al, 2012 )
这种方法使用了RNN和LSTM,模型方面不用赘述了吧,都烂大街了。最终结论是,输入完所有词再进行意图分类效果更好。
这个方法是用RNN+CNN做对话的act分类,提出了基于RNN和CNN并融合preceding short texts的模型。短文本如果出现在一个序列中,使用preceding short texts可能提高分类效果,这就是本文的最大的动机和创新点,事实证明也确实达到了SOTA的效果。
本文的两部分:使用RNN/CNN把短文本变成向量表示,基于文本的向量表示和preceding short texts做act分类。
另外,还有rule-based的方法做Domain/Intent Classification,比如CFG、JSGF,感兴趣的可以看看。基于RNN的细分的话,还有RCNN(Lai et al, 2015)和C-LSTM(Zhou et al, 2015)两种方法。
以上是我关于对话NLU中Domain/Intent Classification的一些总结。下面贴出了一些代表性的paper,大家可以深入学习。另外,如果看完论文还是不太懂的欢迎微信找我讨论。
Deep belief nets for natural language call-routing, Sarikaya et al, 2011
Towards deeper understanding: Deep convex networks for semantic utterance classification, Tur et al, 2012
Use of kernel deep convex networks and end-to-end learning for spoken language understanding, Deng et al, 2012
Recurrent Neural Network and LSTM Models for Lexical Utterance Classification, Ravuri et al, 2015
Sequential Short-Text Classification with Recurrent and Convolutional Neural Networks, Lee et al, NAACL 2016
姓名:宋子璇
学号:16020199060
嵌牛导读:分析RNN做目标识别
嵌牛鼻子:RNN
嵌牛提问:计算机视觉中RNN怎么应用于目标检测?
嵌牛正文
深度学习在计算机视觉领域取得的巨大的发展,最近几年CNN一直是目前主流模型所采取的架构。最近半年RNN/LSTM应用在识别领域逐渐成为一种潮流,RNN在获取目标的上下文中较CNN有独特的优势。以下我们分析最近有关RNN做目标识别的相关文章。
1、Inside-Outside Net: Detecting Objects in Context with Skip Pooling and Recurrent Neural Networks CVPR2016(论文笔记)
本文的主要贡献是用skip pooling和 RNNlayer。在多尺度的feature map 上做roi pooling,最后一个feature map是通过rnn得到的。
识别精度在VOC2012上达到764%,原因主要是利用多尺度的feature map和rnn layer。文章中用到了很多trick:
1) rnn 用的是修改后的IRNN,速度快,精度与LSTM相似。
2)由于是在多尺度feature map上做roi pooling,每个尺度上feature map的响应幅度不一样,所以需要先做L2-norm,然后再将这些尺度得到roi 特征concate到一起。然后统一在scale到一个尺度上(scale由网络学习得到)。
3)加入的lstm单元现用segmentation的数据集做预训练,让权重预学习。(很重要,有两个百分点提升)
4)如果把最后一层IRNN换成级联的33的卷积层,精度下降08%,所以IRNN对于提升不是那么明显。
思考:
1)此方法对于小尺度的物体,如bottle、plant等识别效果不好,是否可以利用最早的feature map做识别,最早的feature 尺度信息保存的较好。
2)rnn只是用来提特征用,并没有考虑到物体的上下文信息。
3)是否可以在第一轮识别到物体后,利用attention的机制,现将这些物体在feature map上去除,重点识别小的物体。
2、End-to-end people detection in crowded scenes
在Lentet得到特征的基础用,用LSTM做控制器,按序列输出得到的框。细节方面需要注意的是没有用NMS,用的hungarian loss(匈牙利算法)。本文最大的贡献出了源码,方便做detection的理解LSTM在目标识别中的应用。
Github仓库地址:https://githubcom/Russell91/ReInspect/
3、CNN-RNN: A Unified Framework for Multi-label Image Classification
本文的主要目的是做图像的多label识别。
文中有一句话很重要:"when using the same image features to predict multiple labels, objects that are small in the images are easily get ignored or hard torecognize independently" 用同一个feature map预测多label时,往往会忽略小物体。
所以作者利用两个并行的网络,第二个网络输入时当前输出的label,先得到label embeding,然后通过rnn得到一向量,融合图像的feature map得到image embeding,最终输出当前图像下一个label。
思考:
1)利用Deconvolution 将feature 扩到原图一样大小,做小物体的目标识别。
2)用不同尺寸的卷积核。
小思考-----为什么原来多级的级联的卷积,最后的卷积的感受野很大了,为什么还能识别一些较小的物体,比如行人,想象一下最后一层的类别热度图,原因是: a 此类有较强的文理信息b 尺度还是比较大 faster RCNN最后一层卷积层只有1414,最后也有很好的识别效果,究竟是为什么
4、Attentive contexts for object detection
文章利用local(多尺度的cnn特征)和global(LSTM生成)来做目标识别。用global的原因是:图像中的其他信息有利于当前box的识别,比如图像中出现其他的汽车对当前框识别为汽车的提升很大,但在文章中global的提升不是很明显,只有06%的提升。作者所用的global信息感觉很一般,并没有真正用到lstm的作用。
思考一下,lstm到底怎么用才能提取global信息:之前不容易识别到的椅子或者瓶子,不能用cnn最后得到的特征,应为太稀疏了,一是瓶子之类的没有纹理信息,而是像椅子之类的纹理太乱,与其他的物体太冲突。可以利用本文lstm的思路,将隐层的输出当做test时候的隐层输入,怎么将这20类的所有隐层信息集合起来是个难点。
5 Recurrent Convolutional Neural Network for Object Recognition CVPR2015 清华大学 链接二
每一层卷积后用RNN(类似一种cnn,只不过权重共享),在参数较少的情况下,让网络的层数更深,每层获取的context信息更丰富,用cuda-convenet实现,文章借鉴意义不大,从引用量上就可以看出。
6 Image caption相关论文
show and tell: a neural image caption generator CVPR2015
image captioning with deep bidirectional LSTMs
此类文章的主要思想是将图像的cnn特征当做传统LSTM的输入,最终生成一句句子描述,对目标识别的借鉴意义不大
7combining the best of convolutional layers and recurrent layers: a hybrid network for semantic segmentation
本文的主要思想也是用了3层的lstm去提特征,最后用11的卷积层降维到K(类别数)层的feature map,本身没有什么创意,只是效果很好 而且文中作者又设计了一个FCN+LSTM的级联网络,效果做到了state-of-the-art 借鉴的地方不多。
8 semantic object parsing with graph LSTM
本文主要思想是抛弃原来逐点做序列的思想,转而利用超像素做为序列,而且超像素的输入顺序是根据前一步FCN得到的confidence map决定。
Graph LSTM是用来做语义分割,是否可以借鉴用来做目标识别
9 pixel recurrent nerual networks
本文利用pixel rnn来做图像的补全,将各种门的计算用cnn来实现,加快计算速度(仅限于门的计算,cell state的更新还是传统方式),最大的贡献是用了多中网络,pixel CNN pixel RNN multiscale RNN---先生成低分辨率的图像,然后用这些低分变率的pixel作为先验知识最终生成一幅完整的图。
dnn和cnn的区别
在图像识别领域,应用的最多的就是深度学习,而深度学习又分为不同的模型,如前馈神经网络(feedforwardneuralnetwork,DNN)、卷积神经网络(ConvolutionalNeuralNetworks,CNN)、循环神经网络(RecurrentNeuralNetwork,RNN)等。
DNN:存在着一个问题——无法对时间序列上的变化进行建模。然而,样本出现的时间顺序对于自然语言处理、语音识别、手写体识别等应用非常重要。对了适应这种需求,就出现了另一种神经网络结构——循环神经网络RNN。
从广义上来说,NN(或是更美的DNN)确实可以认为包含了CNN、RNN这些具体的变种形式。在实际应用中,所谓的深度神经网络DNN,往往融合了多种已知的结构,包括卷积层或是LSTM单元。
在大量的数据面前dnn(relu)的效果已经不差于预训练的深度学习结构了。最终DBN也是看成是“生成模型”。CNN也没有pre-train过程,训练算法也是用BP。因为加入卷积可以更好的处理2D数据,例如图像和语音。
从DNN按不同层的位置划分,DNN内部的神经网络层可以分为三类,输入层,隐藏层和输出层,如下图示例,一般来说第一层是输出层,最后一层是输出层,而中间的层数都是隐藏层。
锐化卷积核中心的系数大于1,周围八个系数和的绝对值比中间系数小1,这将扩大一个像素与之周围像素颜色之间的差异,最后得到的图像比原来的图像更清晰。
卷积神经网络(CNN)和循环神经网络(RNN)有什么区别DNN:存在着一个问题——无法对时间序列上的变化进行建模。然而,样本出现的时间顺序对于自然语言处理、语音识别、手写体识别等应用非常重要。对了适应这种需求,就出现了另一种神经网络结构——循环神经网络RNN。
CNN在大型图像处理方面有出色的表现,目前已经被大范围使用到图像分类、定位等领域中。相比于其他神经网络结构,卷积神经网络需要的参数相对较少,使的其能够广泛应用。
从广义上来说,NN(或是更美的DNN)确实可以认为包含了CNN、RNN这些具体的变种形式。在实际应用中,所谓的深度神经网络DNN,往往融合了多种已知的结构,包括卷积层或是LSTM单元。
CNN、RNN、DNN的内部网络结构有什么区别1、从广义上来说,NN(或是更美的DNN)确实可以认为包含了CNN、RNN这些具体的变种形式。在实际应用中,所谓的深度神经网络DNN,往往融合了多种已知的结构,包括卷积层或是LSTM单元。
2、RNN(循环神经网络),一类用于处理序列数据的神经网络,RNN最大的不同之处就是在层之间的神经元之间也建立的权连接。从广义上来说,DNN被认为包含了CNN、RNN这些具体的变种形式。
3、区别就在循环层上。卷积神经网络没有时序性的概念,输入直接和输出挂钩;循环神经网络具有时序性,当前决策跟前一次决策有关。
CNN和RNN在文本分类过程中的区别整理1、区别就在循环层上。卷积神经网络没有时序性的概念,输入直接和输出挂钩;循环神经网络具有时序性,当前决策跟前一次决策有关。
2、CNN:每层神经元的信号只能向上一层传播,样本的处理在各个时刻独立,因此又被称为前向神经网络。
3、从广义上来说,NN(或是更美的DNN)确实可以认为包含了CNN、RNN这些具体的变种形式。在实际应用中,所谓的深度神经网络DNN,往往融合了多种已知的结构,包括卷积层或是LSTM单元。
4、CNN的语音识别的特征(feature)通常是是频谱图(spectrogram),类似识别的处理方式。同样也可以利用filter size,基于过去和未来的信息判断当前内容。但由于size固定,long dependence方面不如LSTM。
neg=pdread_excel('negxls',header=None,index=None)
pos=pdread_excel('posxls',header=None,index=None) #读取训练语料完毕
pos['mark']=1
neg['mark']=0 #给训练语料贴上标签
pn=pdconcat([pos,neg],ignore_index=True) #合并语料
neglen=len(neg)
poslen=len(pos) #计算语料数目
cw = lambda x: list(jiebacut(x)) #定义分词函数
pn['words'] = pn[0]apply(cw)
comment = pdread_excel('sumxls') #读入评论内容
#comment = pdread_csv('acsv', encoding='utf-8')
comment = comment[comment['rateContent']notnull()] #仅读取非空评论
comment['words'] = comment['rateContent']apply(cw) #评论分词
d2v_train = pdconcat([pn['words'], comment['words']], ignore_index = True)
w = [] #将所有词语整合在一起
for i in d2v_train:
wextend(i)
dict = pdDataFrame(pdSeries(w)value_counts()) #统计词的出现次数
del w,d2v_train
dict['id']=list(range(1,len(dict)+1))
get_sent = lambda x: list(dict['id'][x])
pn['sent'] = pn['words']apply(get_sent)
maxlen = 50
print "Pad sequences (samples x time)"
pn['sent'] = list(sequencepad_sequences(pn['sent'], maxlen=maxlen))
x = nparray(list(pn['sent']))[::2] #训练集
y = nparray(list(pn['mark']))[::2]
xt = nparray(list(pn['sent']))[1::2] #测试集
yt = nparray(list(pn['mark']))[1::2]
xa = nparray(list(pn['sent'])) #全集
ya = nparray(list(pn['mark']))
print 'Build model'
model = Sequential()
modeladd(Embedding(len(dict)+1, 256))
modeladd(LSTM(256, 128)) # try using a GRU instead, for fun
modeladd(Dropout(05))
modeladd(Dense(128, 1))
modeladd(Activation('sigmoid'))
modelcompile(loss='binary_crossentropy', optimizer='adam', class_mode="binary")
print 'Fit model'
modelfit(xa, ya, batch_size=32, nb_epoch=4) #训练时间为若干个小时
classes = modelpredict_classes(xa)
acc = np_utilsaccuracy(classes, ya)
print 'Test accuracy:', acc
可以试一试
w = [] #将所有词语整合在一起
for i in d2v_train:
wextend(i)
newList = list(set(w))
print "newlist len is"
print len(newList)
dict = pdDataFrame(pdSeries(w)value_counts()) #统计词的出现次数
print type(dict)
print len(dict)
如下:
1、DNN:存在着一个问题——无法对时间序列上的变化进行建模。然而,样本出现的时间顺序对于自然语言处理、语音识别、手写体识别等应用非常重要。对了适应这种需求,就出现了另一种神经网络结构——循环神经网络RNN。
2、CNN:每层神经元的信号只能向上一层传播,样本的处理在各个时刻独立,因此又被称为前向神经网络。
3、RNN:神经元的输出可以在下一个时间戳直接作用到自身,即第i层神经元在m时刻的输入,除了(i-1)层神经元在该时刻的输出外,还包括其自身在(m-1)时刻的输出!
介绍
神经网络技术起源于上世纪五、六十年代,当时叫感知机(perceptron),拥有输入层、输出层和一个隐含层。输入的特征向量通过隐含层变换达到输出层,在输出层得到分类结果。早期感知机的推动者是Rosenblatt。
在实际应用中,所谓的深度神经网络DNN,往往融合了多种已知的结构,包括卷积层或是LSTM单元。
bilstm对于多分类精度高。
BiLSTM:Bi-directionalLongShort-TermMemory的缩写,是由前向LSTM与后向LSTM组合而成。
可以看出其很适合做上下有关系的序列标注任务,因此在NLP中常被用来建模上下文信息。
我们可以简单理解为双向LSTM是LSTM的改进版,LSTM是CNN的改进版。
这里简单说一下CNN,熟悉的可以直接跳过。CNN的意思是,为了预测最后的结果,我先用第一个词预测,当然,只用第一个预测的预测结果肯定不精确,我把这个结果作为特征,跟第二词一起,来预测结果;接着,我用这个新的预测结果结合第三词,来作新的预测;然后重复这个过程;直到最后一个词。这样,如果输入有n个词,那么我们事实上对结果作了n次预测,给出了n个预测序列。整个过程中,模型共享一组参数。因此,CNN降低了模型的参数数目,防止了过拟合,同时,它生来就是为处理序列问题而设计的,因此,特别适合处理序列问题。LSTM对CNN做了改进,使得其能够捕捉更长距离的信息。但是不管是LSTM还是CNN,都有一个问题,它是从左往右推进的,因此后面的词会比前面的词更重要。因此出现了双向LSTM,它从左到右做一次LSTM,然后从右到左做一次LSTM,然后把两次结果组合起来。
欢迎分享,转载请注明来源:浪漫分享网
评论列表(0条)