textcnn文本词向量_文本分类模型之TextCNN

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

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

e7d6f34565a454472e5c9cfd3af7d100.png

bf38719a9b27669c7755e0a7b64e13f3.png

模型的第一层就是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
75d437d15eae7774b0f14f171921468e.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/564344.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机管理也无法运行,【两种解决方法】任务管理器打不开怎么办?

任务管理器调不出来怎么办?任务管理器打不开是怎么回事呢?以下两种方法可解决任务管理器打不开问题?1、打开电脑,点击左下角”开始“,选择运行,打开运行对话框后输入"regedit“如下图:2、在…

计算机虚拟现实技术论文好写吗,虚拟现实技术的论文

虚拟现实技术的论文虚拟现实技术,又称灵境技术,是90年代为科学界和工程界所关注的技术。下面时刻小编给大家搜集的关于虚拟现实技术的科技论文,希望大家喜欢!摘要:虚拟现实技术是一种可以创建和体验虚拟世界的计算机技…

文件后缀_电脑文件名的后缀即扩展名的显示和隐藏方法

前两天碰到一个同事问我,他的文件名后面的格式不显示了,就是扩展名,比如Word文档名称后缀的doc或者docx和Excel表格名称后缀的xls或者xlsx没有了,还有一些其他文件的后缀也不显示了。我三两下就给他改好了。那么今天就来给大家讲一…

u盘无法格式化不在计算机中,在电脑中,为什么U盘不能格式化?

我们有时候会碰到在电脑中U盘不能格式化的问题,这该怎么办呢?接下来小编就从解决方法来为大家介绍下为什么U盘不能格式化?1. 首先在桌面左下角点击“开始菜单”-->点击“运行..”,然后在运行框中输入:“regedit.exe…

四种依恋类型_依恋关系的研究

说到依恋关系,大家都会想到安全型、焦虑型、回避型,以及这些类型会影响到成年后的人际关系。本文具体罗列一下心理学家研究依恋关系的都做出了怎样的努力。第一:哈罗做的恒河猴验。实验情境:把小猴放在一个笼子里,这个…

内网通看不到其他人_小学生在新版本里用“吃鸡内挂”,巡查员:封不了,手机自带的...

欢迎诸位小伙伴们来到本期天哥开讲的《和平精英》“精英那点事儿”~接下来呢,咱们聊聊玩家用“吃鸡内挂”打沙漠地图、出生岛的ID为何会消失不见以及未更新的新枪提前出现等有趣的玩家游戏经历与发现~得,废话不多说了,还是各位小伙伴们熟悉的…

7个和尚_经典故事:8个和尚与1串佛珠的故事

比说清楚更重要的是:能承担,能行动,能化解,能扭转,能改变。能想自己,更能想别人。这不仅是一种境界,更是一种智慧。 8个和尚与1串佛珠的故事 不是所有的事情,你都需要说清楚。 有个寺…

计算机一级字幕设置,如何开启电脑哔哩哔哩中的CC字幕功能

如何开启电脑哔哩哔哩中的CC字幕功能腾讯视频/爱奇艺/优酷/外卖 充值4折起当我们在使用电脑的时候,可以通过哔哩哔哩来观看视频,那么如何将视频的字幕设置为CC字幕呢?接下来就由小编来告诉大家。具体如下:1. 第一步,打…

问的书写规则是什么意思_书写规则是什么意思

满意答案sky7012018.03.15采纳率:58% 等级:6已帮助:8人汉字书写笔顺规则一、一般规则:1、先撇后捺 : 人 八 入2、先横后竖 : 十 王 干3、从上到下: 三 竟 音4、从左到右: 理 利 礼…

计算机大赛横幅标语有趣的,有趣的横幅标语

作为一个先如今社会的特色产品,横幅从来就是不一般的!从最初的宣传计划生育,到现在各种广告、表示、警示等,横幅的作用也越来越广!从最开始的强上到之后的市内、户外,横幅的摆放方式也是层出不穷!悬挂的,粘贴的,只要能看到的地方,必然会有横幅…

计算机环境安全服务未启动,windows10系统卡在“准备安全选项”如何解决

最近有windows10系统用户到本站反映说遇到这样一个问题,就是计算机突然卡在“准备安全选项”屏幕上了,导致无法进行任何操作,该怎么办呢,下面小编就给大家讲解一下windows10系统卡在“准备安全选项”的具体解决方法。现在&#xf…

matlab实现双边滤波_【他山之石】pytorch 实现双边滤波

“他山之石,可以攻玉”,站在巨人的肩膀才能看得更高,走得更远。在科研的道路上,更需借助东风才能更快前行。为此,我们特别搜集整理了一些实用的代码链接,数据集,软件,编程技巧等&…

新网 云服务器,云服务器的使用教程

现在购买云服务器的人越来越多,大家只需要在众多的云服务器品牌中找到适合自己的云服务器。并不是价格越贵就越适合自己,而且初学者购买贵的云服务器并不划算,接下来就由小编为大家介绍关于云服务器的使用教程,希望能给大家带来帮…

开红数显示服务器为空,网维大师常见问题:图标空白或红号问号

【问题现象】客户机打开游戏菜单后出现图标异常,只能看到游戏文字看不到图标或图标?号,分别如下图两种情况或【原因说明】出现这种问题一般是由于网维大师服务端的游戏图标缓存文件损坏导致。而导致图标缓存损坏的原因一般是由于:…

超微服务器开机启动项目怎么设置,超微服务器启动项设置

超微服务器启动项设置 内容精选换一换微服务部署完后,您可以根据微服务的运行情况进行微服务的治理。您可以先在“服务目录 > 微服务列表”中创建微服务,启动微服务后,根据yaml文件的配置,会在对应的服务下注册服务实例。如果没…

MySQL 正则表达式查询

MySQL中正式表达式通常被用来检索或替换符合某个模式的文本内容,根据指定的匹配模式匹配文中符合要求的特殊字符串。 例如,从一个文件中提取电话号码,查找一篇文章中重复的单词或替换用户输入的敏感语汇等,这些地方都可以使用正则…

onmp mysql端口_ONMP 安装教程

之前用过极路由 1s,刷了恩山 H大的固件,发现内置了 web 环境,没想到一个路由器都能跑的动 LNMP。我之前最极限的尝试就是在一个 4刀3年 的 sentris ovz 小鸡上跑过 WordPress ,那台小鸡 配置很低,只有 64M 的内存&…

mysql添加索引后查询先用索引吗_mysql 添加索引后 在查询的时候是mysql就自动从索引里面查询了。还是查询的时候有单 独的参数查询索引?...

满意答案llt17112014.06.20采纳率:49% 等级:9已帮助:614人MYSQL创建索引对索引使用方式分两种:1 由数据库查询优化器自动判断否使用索引;2 用户写SQL语句时强制使用索引下面两种索引使用方式进行说明第种自动使用索…

win7 vs2017 程序报错_windows + VS2017 配置libpytorch

因为项目对实时性的要求,尝试一波c直接调用libpytorch。实现的同时,整理了网上的相关资料,希望对效率追求的同学提供一份帮助。0.下载准备下载安装VS2017 和 cmake (3.0版本以上)记得把bin目录添加到环境变量path中。这…

jdbc mysql api_JDBC Api详解

一.什么是JDBCJDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口&#xff0…