NLP: Text Neural Network (Part1: textRNN, textCNN)
2023-02-18 16:33:39 时间
TextRNN 定义
RNN (Recurrent Neural Network) focused on Text 专门解决文本分类问题的RNN网络
TextRNN 应用场景
- 垃圾邮件分类
- 文本情感分析 (判断文本或者句子是积极,消极还是中立)
- 新闻主题分类 (判断新闻属于哪一个类别,属于财经,体育,娱乐,时事等类别)
- 自动问答系统问句分类
- 社区问答系统 (对文本进行多Label分类,可以参照知乎看山杯)
- AI法官 (依据文本分析通过罚金Label和法条Label进行分类)
- 判断文本是否是机器人所写
TextRNN 原理
- 将 文本切割成固定长度的句子,如果长度不够,则 padding补齐
- 然后输入句子,通过 word embedding 获得词向量
- 在RNN 的 每一个time节点(时间步长)输入一个新的词向量,RNN一直不停循环直到所有词向量input进去
- 由于 文本的长度为 n, 代表有n个词向量,因此TextRNN也要经历n个时间步长
TextRNN 算法结构
Bi-LSTM
embedding--->BiLSTM--->concat final output/average all output----->softmax layer
Bi-LSTM + Uni-LSTM
embedding-->BiLSTM---->(dropout)-->concat ouput--->UniLSTM--->(droput)-->softmax layer
TextRNN 也可以把LSTM换成GRU单元,添加DropOut 或者 BatchNormalization 等
TextRNN 比上 TextCNN 训练速度慢上一些
TextCNN 定义
1-D single-channel 卷积计算
1-D multi-channel 卷积计算
2-D 卷积计算
Max-Over-Time Pooling 时序池化最大层
其实就是max pooling, 只是在不同的channel中,输入时的时间步数(time)各不相同
TextCNN 原理
TextCNN = CNN + max-over-time pooling
- 定义 1D-CNN-kernel, 计算words之间的correlation
- 将所有channel经过 max-over-time-pooling 进行处理,并把output处理成vector
- 通过全连接将 vector分类
TextCNN 算法结构
下图⽤⼀个例⼦解释了textCNN的设计。这⾥的输⼊是⼀个有11个词的句⼦,每个词⽤6维词向量表⽰。因此输⼊序列的宽为11,输⼊通道数为6。给定2个⼀维卷积核,核宽分别为2和4,输出通道数分别设为4和5。因此,⼀维卷积计算后,4个输出通道的宽为 11 - 2 + 1 = 10,而其他5个通道的宽为 11 - 4 + 1 = 8。尽管每个通道的宽不同,我们依然可以对各个通道做时序最⼤池化,并将9个通道的池化输出连结成⼀个9维向量。最终,使⽤全连接将9维向量变换为2维输出,即正⾯情感和负⾯情感的预测。
相关文章
- [PHP] GET参数加密签名保证安全防止篡改
- [PHP] 算法-二位有序数组中查找的PHP实现
- [PHP] 算法-找出两个链表的第一个公共结点的PHP实现
- [HTTP] 重定向的302,301
- [PHP] 算法-删除链表中重复的结点的PHP实现
- [Oauth] Oauth2.0中的授权码模式
- [Redis] 哈希类型与ziplist
- [PHP] 算法-请找出带环链表的环的入口结点的PHP实现
- [Nginx] location与rewrite配合处理项目的重写和路径问题
- [PHP] 算法-复制复杂链表的PHP实现
- [Memcache] memcache中的过期时间策略
- [PHP] 算法-合并两个有序链表为一个有序链表的PHP实现
- [PHP]算法-最大子数组问题思路
- [PHP] 数据结构-反转链表PHP实现
- [PHP] 数据结构-单链表头插法PHP实现
- [PHP] 数据结构-从尾到头打印链表PHP实现
- [PHP] 数据结构-输出链表倒数第k个结点PHP实现
- [PHP]算法-归并排序的PHP实现
- [PHP] 数据结构-二叉树的创建PHP实现
- [PHP] 数据结构-循环链表的PHP实现