【论文泛读】8. 文本分类:Convolutional Neural Networks for Sentence Classification

362 阅读4分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

更新进度:■■■■■■■□□□□□□□□□□□□□□□□|30%
理论上一周更一个经典论文
刚刚开始学习,写的不好,有错误麻烦大家留言给我啦

目录

题目期刊名/文献类型作者年份解决问题解决对策创新点论文不足下一步工作技术难点

理论知识

文本表示:

在这里插入图片描述
词袋子:one_hot 不考虑文本的序列信息,就像将信息放进了一个袋子里。有多少词就需要有多少维度,数据处理的压力会比较大
词嵌入:Word2Vec(2013年Efficient Estimation of Word Representations in Vector Space) 更多的考虑了语义关联,很大程度缩小了存储空间。

文本分类方法:

基于规则的文本分类

在这里插入图片描述
一句话出现很好很快,就认为这句话的表述是好的

基于特征的文本分类方法

在这里插入图片描述

基于卷积神经网络的文本分类

在这里插入图片描述

学习目标:

在这里插入图片描述

模型构成:

在这里插入图片描述
在这里插入图片描述
为什么将感受野设置成(3,4,5)?

感受野

写的很好的解释
输出的feature map中的一块是由原始图像(不是上一层图像)的a*a来的,他的感受野就是a

卷积器的数量为什么是100?

超参数设置:
在这里插入图片描述

使用一维卷积
在这里插入图片描述

代码复现

数据集

在这里插入图片描述
原论文中使用了七个数据集,本代码使用了两个数据集
MR和TREC
数据集github

词向量模型

很多公司都提供了预训练好的词向量模型
本程序使用的是谷歌公司的"googlenews-vectors-negative300.bin"

程序结构

在这里插入图片描述

torch.nn.Conv1d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)

  • in_channels(int) – 输入信号的通道。在文本分类中,即为词向量的维度
  • out_channels(int) – 卷积产生的通道。有多少个out_channels,就需要多少个1维卷积
  • kernel_size(int or tuple) - 卷积核的尺寸,卷积核的大小为(k,),第二个维度是由in_channels来决定的,所以实际上卷积大小为kernel_size*in_channels
  • stride(int or tuple, optional) - 卷积步长
  • padding (int or tuple, optional)- 输入的每一条边补充0的层数
  • dilation(int or tuple, `optional``) – 卷积核元素之间的间距
  • groups(int, optional) – 从输入通道到输出通道的阻塞连接数
  • bias(bool, optional) - 如果bias=True,添加偏置

代码可学习技巧

  1. 从字典中读取变量,变量定义更直观

params =
{
“MODEL”: options.model,
“DATASET”: options.dataset,
“SAVE_MODEL”: options.save_model
}

params[“MODEL”]

  1. Gensim的model.keyedvectors模块,KeyedVectors.load_word2vec_format() 加载原始二进制格式的模型

参考文章:
写的很好的博客
PyTorch中的nn.Conv1d、nn.Conv2d以及文本卷积
Keras之文本分类实现
一维卷积(1D-CNN)、二维卷积(2D-CNN)、三维卷积(3D-CNN)
Convolutional Neural Networks for Sentence Classification阅读笔记及复现
论文《Convolutional Neural Networks for Sentence Classification》总结
Convolutional Neural Networks for Sentence Classification论文解读