六年的大学生涯结束了,目前在搜索推荐岗位上继续进阶,近期正好在做类目预测多标签分类的项目,因此把相关的模型记录总结一下,便于后续查阅总结。

一、理论篇:
在我们的场景中,文本数据量比较大,因此直接采用深度学习模型来预测文本类目的多标签,而TextCNN向来以速度快,准确率高著称。TextCNN的核心思想是抓取文本的局部特征:通过不同的卷积核尺寸(确切的说是卷积核高度)来提取文本的N-gram信息,然后通过最大池化操作来突出各个卷积操作提取的最关键信息(颇有一番Attention的味道),拼接后通过全连接层对特征进行组合,最后通过交叉熵损失函数来训练模型。

模型的第一层就是Embedding层,预训练的词嵌入可以利用其它语料库得到更多的先验知识,经过模型训练后能够抓住与当前任务最相关的文本特征。在我们的应用场景中,使用预训练的Embedding比随机初始化带来的效果不是特别显著。第二层为卷积层,CV中常见的卷积尺寸通常是正方形,而本文的卷积尺寸与之不同,本文的卷积宽度等于文本Embedding后的维度,保持不变,因为每个词或字相当于一个最小的单元,不可进一步分割。而卷积核的高度可以自定义,在向下滑动的过程中,通过定义不同的窗口来提取不同的特征向量,有点类似于N-gram过程。这样不同的kernel可以获取不同范围内词的关系,获得的是纵向的差异信息,也就是在一个句子中不同范围的词出现会带来什么信息。比如可以使用3,4,5个词数分别作为卷积核的大小),每个卷积尺寸下又有多个相同的卷积核(原因是卷积神经网络学习的是卷积核中的参数,每个filter都有自己的关注点,它们可以从同一个窗口学习相互之间互补的特征,这样多个卷积核就能学习到不同的信息,比如可以设置size为3的filter有4个卷积核)。

第三层是最大池化层,即为从每个滑动窗口产生的特征向量中筛选出一个最大的特征,然后将这些特征拼接起来构成向量表示。也可以选用K-Max池化(选出每个特征向量中最大的K个特征),或者平均池化(将特征向量中的每一维取平均)等,达到的效果都是将不同长度的句子通过池化得到一个定长的向量表示。在短文本分类场景中,每条文本中都会有一些对分类无用的信息,而最大池化可以突出最重要的关键词以帮助模型更容易找到对应的类目。

接下来的几层就跟具体的任务相关了,一般都会拼接特征,在通过全连接层自由组合提取出来的特征实现分类。在损失函数上,二分类和多标签分类可以采用基于Sigmoid函数的交叉熵损失函数binary_crossentropy多分类任务可以采用基于Softmax的多类别交叉熵损失函数(categorical_crossentropy)。

二、代码部分:

def textcnn(hyper_parameters):input = Input(shape=(hyper_parameters.max_len,))if hyper_parameters.embedding_matrix is None:embedding = Embedding(input_dim=hyper_parameters.vocab + 1,output_dim=hyper_parameters.emd_dim,input_length=hyper_parameters.MAX_LEN,trainable=True)(input)else:  # 使用预训练矩阵初始化Embeddingembedding = Embedding(input_dim=hyper_parameters.vocab + 1,output_dim=hyper_parameters.emd_dim,weights=[hyper_parameters.embedding_matrix],input_length=hyper_parameters.MAX_LEN,trainable=False)(input)convs = []for kernel_size in hyper_parameters.kernel_size:conv = Conv1D(hyper_parameters.conv_code, kernel_size,activation=hyper_parameters.relu)(embedding)pool = MaxPooling1D()(conv)convs.append(pool)concat = Concatenate()(convs)flattern = Flatten()(concat)dropout = Dropout(hyper_parameters.dropout)(flattern)output = Dense(hyper_parameters.classes, activation=hyper_parameters.sigmoid)(dropout)model = Model(input, output)model.compile(loss='binary_crossentropy',optimizer='adam',metrics=['accuracy'])return model

在Embedding部分,如果有条件可以使用自己预训练的文本信息来初始化Embedding矩阵,效果可能会比随机初始化Embedding提升一点。

三、几点思考:

1.TextCNN能用于文本分类的主要原因是什么?

除了预训练文本外,TextCNN通过利用不同的卷积核尺寸并行提取文本的信息(类似N-gram),并通过最大池化来突出最重要的关键词来实现分类。

2.TextCNN的缺点:

2.1. TextCNN的卷积和池化操作会丢失文本序列中的词汇顺序和位置信息等内容,但也可利用这一点来增强文本,例如白色旅游鞋,可以添加旅游鞋白色数据等,分词后白色和旅游鞋位置就可以互换来丰富语料 。

2.2. 在长文本使用TextCNN效果可能没有在短文本中效果好(具体还需要实践确认),原因同上,因此可以尝试使用Top k池化替代最大池化提取更多的文本信息。

https://arxiv.org/pdf/1408.5882.pdf​arxiv.org小占同学:深入TextCNN(一)详述CNN及TextCNN原理​zhuanlan.zhihu.com

textcnn文本词向量_文本分类模型之TextCNN相关推荐

  1. textcnn文本词向量_基于Text-CNN模型的中文文本分类实战

    1 文本分类 文本分类是自然语言处理领域最活跃的研究方向之一,目前文本分类在工业界的应用场景非常普遍,从新闻的分类.商品评论信息的情感分类到微博信息打标签辅助推荐系统,了解文本分类技术是NLP初学者比 ...

  2. 飞桨2.0高层api教程——使用预训练词向量进行文本分类

    使用预训练的词向量完成文本分类任务 作者: fiyen 日期: 2021.03 摘要: 本示例教程将会演示如何使用飞桨内置的Imdb数据集,并使用预训练词向量进行文本分类. 摘要 在这个示例中,我们将 ...

  3. 基于预训练词向量的文本相似度计算-word2vec, paddle

    文章目录 0. 前言 1. 余弦相似度算子 2. 示例代码并验证 3. 基于词向量的文本相似度 3.1 读取word2vec文件 3.2 定义模型 3.3 运行模型 3.4 根据分数降序排列 3.5 ...

  4. 浅谈文本词向量转换的机制embedding

    首先感谢大家对上一篇文章的关注吧,建议看这篇文章前先看下上一篇我推送的<20行代码实现电影评论情感分析>,上篇文章其实留了个坑,不过不一定坑到大家,因为可能90%的同学可能不会去认真读一遍 ...

  5. (连载)词向量的理解——BERT模型的句子向量表示

    文章均从个人微信公众号" AI牛逼顿"转载,文末扫码,欢迎关注! word embedding的出现提升了自然语言处理的效果.典型的使用场景就是把高质量的词向量输入到的模型中,通过 ...

  6. 文本分类模型_文本分类模型之TextCNN

    六年的大学生涯结束了,目前在搜索推荐岗位上继续进阶,近期正好在做类目预测多标签分类的项目,因此把相关的模型记录总结一下,便于后续查阅总结. 一.理论篇: 在我们的场景中,文本数据量比较大,因此直接采用 ...

  7. 【NLP】fastText词向量与文本分类工具

    一.简介 fastText 是 Facebook 于2016年开源的一个词向量训练与文本分类工具,其典型应用场景是"无监督的词向量学习"和"有监督的文本分类". ...

  8. bert获得词向量_无监督语义相似度匹配之Bert抽取文本特征实战

    今天记一次采用bert抽取句子向量的实战过程,主要是想感受一下bert抽取出来的句子特征向量是否真的具有不错的语义表达. 在此之前,我们来回顾一下,如果我们想拿到一个句子的特征向量可以采用什么样的方式 ...

  9. 自然语言处理︱简述四大类文本分析中的“词向量”(文本词特征提取)

    笔者在看各种NLP的论文.文献.博客之中发现在应用过程中,有种类繁多的词向量的表达.笔者举例所看到的词向量有哪些. 词向量一般被看做是文档的特征,不同词向量有不同的用法,本文介绍了四类词向量: Has ...

最新文章

  1. 面对500篇GNN论文,心态差点儿崩了,幸好我有这本小书
  2. java 为什么有匿名类_全面了解Java中的内部类和匿名类
  3. Bootstrap3 表格-带边框的表格
  4. {面试题2: 实现 Singleton 模式}
  5. pytorch 笔记: 复现论文 Stochastic Weight Completion for Road Networks using Graph Convolutional Networks
  6. 梯度下降法,牛顿法,高斯-牛顿迭代法,附代码实现
  7. .NET Framework 4.5 五个很棒的特性
  8. Numpy的常用方法
  9. Java 证书pem转KeyStore、jks文件
  10. 程序员面试金典 - 面试题 17.13. 恢复空格(DP+Trie树)
  11. 前端技术基础(一):浏览器相关
  12. Photo Sphere Viewer 全景图
  13. 用Java求s=a+aa+aaa+.....+aaa...a的值
  14. android multimedia框架总结,Android Multimedia框架总结(三)MediaPlayer中创建到setDataSource过程...
  15. tomcat配置线程参数maxThreads、acceptCount
  16. 零基础使用vscode实现python爬取高德地铁数据
  17. ZipEntry实现文件解压缩与目录解压缩
  18. 修改svn服务器默认端口号,svn服务器地址 不要端口号
  19. 了解ClassLoader
  20. bert-pytorch版源码详细解读

热门文章

  1. linux批量部署war工具,Linux 批量一键部署工具 Expect
  2. 在java中的交换方法有哪些_java中交换两个变量的值有哪几种方法,交换两个变量a和b的值...
  3. Win10如何设置IE为默认浏览器
  4. 鸿蒙之火是什么意思,鸿蒙突然火了!鸿蒙是什么?
  5. vs 中使用32 位mysql_vs2010连接mysql数据库(含win32和x64两种平台)
  6. c语言程序中必不可少的,C语言程序设计(第3章程序控制语句)2
  7. Oracle查询表|注释|字段|字段注释
  8. centos7下docker启动失败解决
  9. 云南计算机专修学校附中,昆明高中哪家强? 师附中和昆一中高考尖子生最多...
  10. 画出微型计算机结构图,中级工792、画出计算机环形网络模式图.doc