自然语言处理之基于biLSTM的pytorch立场检测实现

前面我已经讲过了LSTM的原理,想要了解的看上一篇就行。

LSTM理解了,biLSTM其实也就很容易理解了。这个实验,我是根据黑龙家大学nlp实验室的冯志,王潜升师兄的指导以及一篇基于biLSTM的paper实现的,如果想要这个paper的pdf,可以私聊我,一起进步。

biLSTM是双向循环神经网络,简单的理解就是LSTM正向走一遍,又反向走了一遍而已。而对于立场检测这个实验,在这里我借用此论文的图片:

Stance Detection with Bidirectional Conditional Encoding

先说数据文本格式:

数据截图

前面是topic(图里的target),中间是针对这个topic的谈论文本,最后是这个文本在这个topic下的立场,格式简化为:

sentence = topic + text + label

而这里的topic有5种,分别为:

'Atheism', 'Feminist Movement', 'Hillary Clinton', 'Legalization of Abortion', 'Climate Change is a Real Concern'

而上面biLSTM网络流程图就是选取的topic为Legalization of Abortion的例子。

现在我来结合代码详细解释下这个基于biLSTM网络的立场检测实验:

首先,把网络搭建好:

其中,LSTM的参数隐藏层大小hiddenSize和隐藏层数量hiddenNum,我用上面的图详细解释下:

hiddenSize是说LSTM一个cell的参数大小,hiddenNum是说这样大网络循环的个数。

网络搭建好了,数据开始在网络中流动:

假设EmbedSize = 100,hiddenSize = 50

topic,text分别过Embedding Layer,维度分别为:(1,1,100),(1,17,100)

然后分别经过biLSTM Layer,维度为:(1,1,200),(1,17,200)

因为一会要经过一个maxPooling,所以现在先转置下,维度为(1,200,1),(1,200,17):

然后经过一个激活函数tanh,维度不变为(1,200,1),(1,200,17):

在第三维上,分别经过maxPooling,之后的维度为(1, 200, 1),(1, 200, 1):

然后cat在一起,维度为(1, 400, 1):

一会要经过线性层,可以先将没用的第三维扔掉,维度为(1, 400):

然后经过第一个线性层(400->100),维度为(1,100):

然后再经过一个tanh,维度不变(1,100):

最后,经过最后一个线性层(100->3),维度为(1,3):

你或许有疑问,为什么不直接经过一个线性层呢?因为我们要直接从400->3的话,信息会损失很多,如果分别经过两个400->100, 100->3,这样就不会损失那么多信息了,如果你想用三个线性层也可以,自己感觉调到最佳就好。

这个整体的数据流图为:

整个也就算讲完了,其实也想把实验结果摆上来的,可是我的电脑是4G的。。太慢了。。但是如果想要源代码的话,可以留言给我,共同进步。


原文发布于微信公众号 - 深度学习自然语言处理(zenRRan)

原文发表时间:2018-01-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏AI科技大本营的专栏

一文教会你三维网格物体识别

本文由「图普科技」(微信公众号 tuputech)编译,原作者 Vladimir Tsyshnatiy,链接:https://medium.com/@vtsys...

1253
来自专栏Python疯子

python人工智能:完整的图片识别(非图片验证码),以及模型的使用

这个可以说是一个绝对的福利中的福利。一整套的AI图片识别以及模型的使用。 一直都在说人工智能,图像识别,又有几个人会呢,网上文章成山,前一段时间因工作需要,我一...

1802
来自专栏机器之心

学界 | ImageNet 2017目标定位冠军论文:双路径网络

选自arXiv 作者:Yunpeng Chen等 机器之心编译 参与:蒋思源、Smith 最后一届 ImageNet 挑战赛刚刚落下帷幕,而新加坡国立大学参与的...

2797
来自专栏AI传送门

keras教程:卷积神经网络(CNNs)终极入门指南

3805
来自专栏深度学习自然语言处理

【干货】基于pytorch的CNN、LSTM神经网络模型调参小结

Demo 这是最近两个月来的一个小总结,实现的demo已经上传github,里面包含了CNN、LSTM、BiLSTM、GRU以及CNN与LSTM、BiLSTM...

8937
来自专栏机器学习之旅

python开发:基于SSD下的图像内容识别(一)1.首先,先看一下我们能达到什么样的效果:2.我们需要做哪些基本的步骤:

鸽了将近有一个月的时间没有更新东西,真的不是因为我懒,主要在忙一些工作上的事情,然后就是被安装caffe环境折磨的死去活来。我本来用的上mba来搭caffe环境...

1213
来自专栏WeaponZhi

编写你人生中第一个机器学习代码吧!

用 Python 实现第一段机器学习代码,跟我一起来吧! 我们先要学习的机器学习算法是监督学习,那么,何为监督学习呢?要了解监督学习,我们得先回顾下我们平时的编...

3729
来自专栏编程

pytorch自然语言处理之Pooling层的句子分类

Pooling作为最简单的层其实也可以作为句子分类任务。Pooling有很多种,max_Pooling,avg_Pooling,min_Pooling等。常用的...

2758
来自专栏企鹅号快讯

从零开始,教初学者如何征战全球最大机器学习竞赛社区Kaggle竞赛

在学习过深度学习的基础知识之后,参与实践是继续提高自己的最好途径。本文将带你进入全球最大机器学习竞赛社区 Kaggle,教你如何选择自己适合的项目,构建自己的模...

19010
来自专栏专知

Tensorflow实战系列:手把手教你使用LSTM进行文本分类(附完整代码)

【导读】专知小组计划近期推出Tensorflow实战系列,计划教大家手把手实战各项子任务。本教程旨在手把手教大家使用Tensorflow构建LSTM进行文本分类...

1.5K9

扫码关注云+社区