textCNN &textRNN主要是做文本分类(Text Classification)

文本分类是自然语言处理的一项基本任务,试图推断给定文本(句子、文档等)的标签或标签集。

文本分类的应用非常广泛,比如:

  • 垃圾邮件分类:2分类问题判断邮件是否为垃圾邮件
  • 情感分析:2分类问题:判断文本情感是正面还是负面;多分类问题:确定文本情感属于哪种类型{非常消极、消极、中性、积极、非常积极}。
  • 新闻主题分类:确定一条新闻属于哪个类别,如财经、体育、娱乐等。根据类别标签的数量,可以是两个类别,也可以是多个类别。
  • 自动问答系统中的问题分类
  • 社区问答系统中的问题分类:多标签多分类(一段文字多分类,文字可能有多个标签),如知乎看山杯
  • 让AI做法官:基于案例事实描述文本的精细分类(多分类)和法律分类(多标签、多分类)
  • 判断新闻是否是机器人写的:2类

1.textCNN

论文:1408.5882.pdf (arxiv.org)

在 TextCNN 中,过滤器扫描句子并确定它们的上下文含义。
TextCNN的进程如下:

1. 接收词嵌入向量作为输入
2. 通过过滤器和词嵌入向量的卷积操作创建特征图
3. 通过激活函数将特征图映射到激活图
4. 通过最大池化每个激活图进行连接
5. concat 将向量作为全连接层的输入,分类

1.1TextCNN的优势

在掌握句子上下文意义的过程中收集信息→提高运算速度

在分类问题上 优于 RNN(在 TextCNN 中,嵌入维度和过滤器的水平大小必须相同。)

1.2.TextCNN的实现

  • 下面是filter size为2时,通过input和filter的卷积运算形成feature map的过程。

下面是filter size为3时通过input和filter的卷积操作形成feature map的过程。

通过上述过程,形成了特征图和激活图。

在本文中,使用三种过滤器尺寸进行了实验:2、3 和 4。

  • 接下来,我们看一下激活图中max pooling的过程。

如上图所示,在最大池化过程中,为每个激活图选择并提取最大值。

在图中,表示了一个过滤器,但使用多个过滤器会创建多个激活图。

例如,如果使用 10 个大小为 2 的过滤器(10 个通道)、10 个大小为 3 的过滤器(10 个通道)和 10 个大小为 4 的过滤器(10 个通道)进行卷积操作,则每个过滤器 10 个,即总共创建了 30 个特征图和激活图。

假设已经创建了 30 个激活图,可以进行最大池化以获得 30 个最大值。

输入这里得到的30个最大值作为全连接层的输入后,继续分类。流程如下

1. 词嵌入输入

2.过滤和卷积操作

3.特征图

4.激活(特征图)→激活图

5. 最大池化

6. 全连接层

7.分类

1.3.实现代码

delldu/TextCNN: Convolutional Neural Networks for Sentence Classification(https://arxiv.org/abs/1408.5882) . (github.com)

2.textRNN

2.1.textRNN原理

在一些自然语言处理任务中,在处理序列的时候,我们一般会用到循环神经网络RNN,尤其是它的一些变种,比如LSTM(比较常用)、GRU。当然,我们也可以将 RNN 应用于文本分类任务。

这里的文本可以是一个句子,一个文档(短文本,几个句子)或者一个章节(长文本),所以每个文本的长度是不同的。在对文本进行分类时,我们一般会指定一个固定的输入序列/文本长度:长度可以是最长的文本/序列的长度,其他所有的文本/序列都必须填满才能达到这个长度;这个长度也可以是训练集中所有文本/序列长度的平均值。在这种情况下,太长的文本/序列需要被截断,而那些太短的则被填充。总之,为了使训练集中的所有文本/序列具有相同的长度,除了上面提到的设置,长度还可以是任何其他合理的值。在测试的时候,你还需要对测试集中的文本/序列做同样的事情。

假设训练集中所有文本/序列的长度统一为n,我们需要对文本进行分割,并使用词嵌入来获得每个词的固定维向量表示。对于每个输入的文本/序列,我们可以在RNN的每个时间步输入文本中一个词的向量表示,计算当前时间步的隐藏状态,然后将其用于当前时间步的输出和将其传递给下一个时间步和下一个词的词向量作为RNN单元的输入,然后计算RNN在下一个时间步的隐藏状态,如此重复……直到处理输入文本中的每个单词,由于输入文本的长度为n,所以要经过n个时间步。

基于RNN的文本分类模型非常灵活,具有多种结构。接下来,我们主要介绍两种典型的结构。

2.1.textRNN网络结构

在Tensorflow中,堆叠两个或多个 LSTM 层

Keras 循环层有两种可用模式,由return_sequences构造函数参数控制:

  • 如果False它只返回每个输入序列的最后一个输出(形状为 (batch_size, output_features) 的 2D 张量)。这是默认值,在以前的模型中使用。

  • 如果True返回每个时间步的完整连续输出序列(形状为 3D 张量(batch_size, timesteps, output_features))。

以下是信息流的样子return_sequences=True

RNN使用with的有趣return_sequences=True之处在于,输出仍然有 3 轴,就像输入一样,因此可以将其传递给另一个 RNN 层。

结构:降维->双向lstm -> concat输出->平均 -> softmax

代码可参考【4】

参考文献

【1】[NLP] - TextCNN

【2】The network structure and code implementation of textRNN & textCNN! - Karatos

【3】https://www.tensorflow.org/text/tutorials/text_classification_rnn?hl=zh-cn

【4】GitHub - luopeixiang/textclf: TextClf :基于Pytorch/Sklearn的文本分类框架,包括逻辑回归、SVM、TextCNN、TextRNN、TextRCNN、DRNN、DPCNN、Bert等多种模型,通过简单配置即可完成数据处理、模型训练、测试等过程。

NLP | textCNN textRNN 图文详解及代码相关推荐

  1. android代码查找快捷键是什么,Android Studio搜索功能(查找功能)及快捷键图文详解(示例代码)...

    1.在当前窗口查找文本[Ctrl+F] F3 向下查找关键字出现位置 Shift+F3 向上一个关键字出现位置 2.在当前工程内查找文本[Ctrl+Shift+F] 先会弹出一个对话框,直接点击[fi ...

  2. NLP | 注意力机制Attention Mechannism图文详解及代码

    包含了RNN,LSTM的示例. 1.注意力机制 注意力机制是深度学习的最新进展之一,特别是对于机器翻译.图像字幕.对话生成等自然语言处理任务.它是一种旨在提高编码器解码器(seq2seq)RNN 模型 ...

  3. Spring MVC+Spring+Mybatis实现支付宝支付功能(图文详解+完整代码)

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:欧阳思海 github.com/OUYANGSIHAI/si ...

  4. SSM 实现支付宝支付功能(图文详解+完整代码)

    阅读本文大概需要 4 分钟. 前言 本教程详细介绍了如何使用ssm框架实现支付宝支付功能.本文章分为两大部分,分别是「支付宝测试环境代码测试」和「将支付宝支付整合到ssm框架」,详细的代码和图文解释, ...

  5. Spring MVC+Spring+Mybatis实现支付宝支付和微信支付功能(图文详解+完整代码)

    前言 本教程详细介绍了如何使用ssm框架实现支付宝支付功能.本文章分为两大部分,分别是「支付宝测试环境代码测试」和「将支付宝支付整合到ssm框架」,详细的代码和图文解释,自己实践的时候一定仔细阅读相关 ...

  6. 数据结构之归并排序图文详解及代码(C++实现)

    代码: #include<iostream> using namespace std; #define MAXSIZE 20//顺序表的最大长度 typedef int KeyType;/ ...

  7. 数据结构之堆栈排序图文详解及代码(C++实现)

    代码: #include<iostream> using namespace std; #define MAXSIZE 20//顺序表的最大长度 typedef int KeyType;/ ...

  8. 数据结构之快速排序图文详解及代码(C++实现)

    代码: #include<iostream> using namespace std; #define MAXSIZE 20//顺序表的最大长度 typedef int KeyType;/ ...

  9. 数据结构之希尔排序图文详解及代码(C++实现)

    问题: 对待排序的数组r[1..n]中的元素进行直接插入排序,得到一个有序的(从小到大)的数组r[1..n]. 算法思想: 1.第一趟取增量d1(d1<n)把全部记录分为d1个组,所有间隔为d1 ...

最新文章

  1. 配置静态路由使用出站接口和下一跳IP的差别
  2. java零基础学习java规划
  3. Python介绍与特点(自学python知识整理)
  4. 沈南鹏:从五大物理定律看新商业法则
  5. Java关于Properties用法的总结(一)
  6. 江民杀毒软件KV网络版反病毒整体解决方案──金融行业
  7. 阵列卡直通模式和raid模式_DNF:希洛克Raid攻坚流程攻略
  8. 一大波PyTorch图像分割模型来袭,俄罗斯程序员出品新model zoo
  9. 【Luogu1484】种树(贪心,堆)
  10. shell初学之PHP
  11. WinAVI FLV Converter v1.0 注册码
  12. 52840LED/KEY
  13. php公文流转管理系统,OA办公系统公文流转
  14. 拼多多搬家上货助手怎么用?方法步骤有?
  15. python计算图形面积的方法,python实现计算图形面积
  16. leo-校园文化户口管理系统
  17. Oracle Linux 8.5上架微软商店;英特尔发力 RISC-V;200 亿参数 GPT-NeoX 即将开源 | 开源日报
  18. [转载]神奇的数据挖掘
  19. 2022百度收录方法-顺鑫说seo
  20. Maven+Spring Web 项目结构在Eclipse下面的实现

热门文章

  1. 【Python】有红、黄、绿三种颜色的球,编程计算摸出球的各种颜色搭配
  2. 使用adb连接夜神模拟器,查看多开模拟器端口号
  3. 【unbuntu gpt 硬盘的挂载方法】
  4. 啥叫K8s?啥是k8s?
  5. 用SQL语句进行数据分页查询
  6. windows下的grep
  7. 销量“掉队”,零跑汽车火力全开
  8. mysql pga_PGA概述
  9. 【JavaScript】offset、client、scroll
  10. 【重温C++ Primer】第一章、初识C++