(3)TextCNN和TextRNN

终于到了现代一点的模型了,为了整明白这些折腾了很久。很多大佬都是基于图像领域讲解的,但是对于我这种没整过图像的就很难受了。接下来就谈一谈自己对两个模型的理解

TextCNN

这是很著名的cs231n给出的模型图,可以看到CNN有四个层组成

conv:卷积层

就是用一个称之为卷积核的矩阵(滤波器(filter))做内积,就是逐个元素相乘再求和。每一步求出来的是一个值!具体如图

具体看算式。这样就把输入抽象化了

这个矩阵有几个参数,常用的就是深度,步长和填充值。

深度:上图中的conv层是深度=1的特殊情况,深度=2就两个二维矩阵,就两个滤波器,就两个filter。 

 步长:一次卷积滑动几步

填充值:为了总长能被步长整除,所以可能要加几圈0.

这里depth(深度)=2,stride(步长)=2,padding(填充值)=1

这里有几个特殊的创新点

局部感知:每次滤波器只对一个局部进行卷积,就像人一次只能看到固定长度的文字

权重共享:滤波器的权重不变

### TextCNNTextRNN TextRCNN 模型对比 #### 原理 TextCNN(Convolutional Neural Network for Text Classification)是一种基于卷积神经网络的文本分类模型。其核心思想是通过卷积操作提取局部特征,并利用最大池化操作捕获最重要的特征[^1]。TextCNN 的优势在于能够高效地捕捉短语级别的特征,适用于短文本分类任务。 TextRNN(Recurrent Neural Network for Text Classification)则是一种基于循环神经网络的模型。它通过递归的方式处理序列数据,能够捕捉长距离依赖关系。然而,标准的 RNN 存在梯度消失或爆炸的问题,因此通常使用 LSTM 或 GRU 等变体来改进性能[^2]。 TextRCNN 是一种结合了卷积神经网络循环神经网络的混合模型。它首先通过双向 RNN 提取上下文信息,然后将这些信息输入到卷积层中进行特征提取。这种方法能够在保留上下文信息的同时,进一步增强局部特征的表达能力[^3]。 #### 实现 以下是三种模型的实现示例: ```python # TextCNN 实现 import tensorflow as tf def text_cnn(input_dim, embedding_dim, num_classes): model = tf.keras.Sequential([ tf.keras.layers.Embedding(input_dim=input_dim, output_dim=embedding_dim), tf.keras.layers.Conv1D(filters=128, kernel_size=5, activation='relu'), tf.keras.layers.GlobalMaxPooling1D(), tf.keras.layers.Dense(num_classes, activation='softmax') ]) return model ``` ```python # TextRNN 实现 def text_rnn(input_dim, embedding_dim, num_classes): model = tf.keras.Sequential([ tf.keras.layers.Embedding(input_dim=input_dim, output_dim=embedding_dim), tf.keras.layers.LSTM(128), tf.keras.layers.Dense(num_classes, activation='softmax') ]) return model ``` ```python # TextRCNN 实现 def text_rcnn(input_dim, embedding_dim, num_classes): inputs = tf.keras.layers.Input(shape=(None,)) x = tf.keras.layers.Embedding(input_dim=input_dim, output_dim=embedding_dim)(inputs) rnn_output = tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(128, return_sequences=True))(x) cnn_output = tf.keras.layers.Conv1D(filters=128, kernel_size=5, activation='relu')(rnn_output) pooled_output = tf.keras.layers.GlobalMaxPooling1D()(cnn_output) outputs = tf.keras.layers.Dense(num_classes, activation='softmax')(pooled_output) model = tf.keras.Model(inputs, outputs) return model ``` #### 应用场景 TextCNN 由于其高效性对短文本的良好支持,常用于情感分析、主题分类等任务[^4]。TextRNN 则更适合需要捕捉长距离依赖关系的场景,如机器翻译、问答系统等[^5]。TextRCNN 结合了两者的优势,适用于既需要上下文信息又需要局部特征的任务,例如复杂的情感分析或文档分类[^6]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值