赞
踩
textCNN &textRNN主要是做文本分类(Text Classification)。
文本分类是自然语言处理的一项基本任务,试图推断给定文本(句子、文档等)的标签或标签集。
文本分类的应用非常广泛,比如:
在 TextCNN 中,过滤器扫描句子并确定它们的上下文含义。
TextCNN的进程如下:
1. 接收词嵌入向量作为输入
2. 通过过滤器和词嵌入向量的卷积操作创建特征图
3. 通过激活函数将特征图映射到激活图
4. 通过最大池化每个激活图进行连接
5. concat 将向量作为全连接层的输入,分类
在掌握句子上下文意义的过程中收集信息→提高运算速度
在分类问题上 优于 RNN(在 TextCNN 中,嵌入维度和过滤器的水平大小必须相同。)
下面是filter size为3时通过input和filter的卷积操作形成feature map的过程。
通过上述过程,形成了特征图和激活图。
在本文中,使用三种过滤器尺寸进行了实验:2、3 和 4。
如上图所示,在最大池化过程中,为每个激活图选择并提取最大值。
在图中,表示了一个过滤器,但使用多个过滤器会创建多个激活图。
例如,如果使用 10 个大小为 2 的过滤器(10 个通道)、10 个大小为 3 的过滤器(10 个通道)和 10 个大小为 4 的过滤器(10 个通道)进行卷积操作,则每个过滤器 10 个,即总共创建了 30 个特征图和激活图。
假设已经创建了 30 个激活图,可以进行最大池化以获得 30 个最大值。
输入这里得到的30个最大值作为全连接层的输入后,继续分类。流程如下
1. 词嵌入输入
2.过滤和卷积操作
3.特征图
4.激活(特征图)→激活图
5. 最大池化
6. 全连接层
7.分类
在一些自然语言处理任务中,在处理序列的时候,我们一般会用到循环神经网络RNN,尤其是它的一些变种,比如LSTM(比较常用)、GRU。当然,我们也可以将 RNN 应用于文本分类任务。
这里的文本可以是一个句子,一个文档(短文本,几个句子)或者一个章节(长文本),所以每个文本的长度是不同的。在对文本进行分类时,我们一般会指定一个固定的输入序列/文本长度:长度可以是最长的文本/序列的长度,其他所有的文本/序列都必须填满才能达到这个长度;这个长度也可以是训练集中所有文本/序列长度的平均值。在这种情况下,太长的文本/序列需要被截断,而那些太短的则被填充。总之,为了使训练集中的所有文本/序列具有相同的长度,除了上面提到的设置,长度还可以是任何其他合理的值。在测试的时候,你还需要对测试集中的文本/序列做同样的事情。
假设训练集中所有文本/序列的长度统一为n,我们需要对文本进行分割,并使用词嵌入来获得每个词的固定维向量表示。对于每个输入的文本/序列,我们可以在RNN的每个时间步输入文本中一个词的向量表示,计算当前时间步的隐藏状态,然后将其用于当前时间步的输出和将其传递给下一个时间步和下一个词的词向量作为RNN单元的输入,然后计算RNN在下一个时间步的隐藏状态,如此重复……直到处理输入文本中的每个单词,由于输入文本的长度为n,所以要经过n个时间步。
基于RNN的文本分类模型非常灵活,具有多种结构。接下来,我们主要介绍两种典型的结构。
在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】
【2】The network structure and code implementation of textRNN & textCNN! - Karatos
【3】https://www.tensorflow.org/text/tutorials/text_classification_rnn?hl=zh-cn
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。