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
使用前向/反向LSTM,取最后一个时间步长进行拼接或者取同一时间步长上的两个隐藏状态并取avg, 可以添加Normalization防止过拟合
Bi-LSTM + Uni-LSTM
embedding-->BiLSTM---->(dropout)-->concat ouput--->UniLSTM--->(droput)-->softmax layer
这一种和第一种的不同之处在于,在双向LSTM基础上添加了一层单向LSTM, 将同一步长的两个隐藏状态拼接并输入到单向LSTM中
TextRNN 也可以把LSTM换成GRU单元,添加DropOut 或者 BatchNormalization 等
TextRNN 比上 TextCNN 训练速度慢上一些
TextCNN 定义
1-D single-channel 卷积计算
1-D multi-channel 卷积计算
0 × 1 + 1 × 2 + 1 × 3 + 2 × 4 + 2 × (-1) + 3 × (-3) = 2
2-D 卷积计算
2 × (-1) + 3 × (-3) + 1 × 3 + 2 × 4 + 0 × 1 + 1 × 2 = 2
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维输出,即正⾯情感和负⾯情感的预测。