textCNN初探

文章目录

  • 目录
    • 1.什么是textCNN
      • 1.1 textCNN 提出的背景
      • 1.2 textCNN 合理性分析
    • 2.textCNN相比于传统图像领域的CNN有什么特点?
    • 3.textCNN例子讲解
      • 3.1 参数和超参数
      • 3.2 textCNN的数据
      • 3.3 textCNN的网络结构定义
      • 3.4 代码

目录

1.什么是textCNN

1.1 textCNN 提出的背景

我们知道,CNN在图像领域应用的比较好了,那么CNN能不能用于文本分析呢?答案是肯定的。在2014年,Yoon Kim在其论文“Convolutional Neural Networks for Sentence Classification”就提出了使用CNN对文本进行分类。这应该是最早将CNN用于文本分类中的文章了。所以,我们称将用于文本分析的CNN网络叫做textCNN。
网络结构

textCNN的变种
在这里插入图片描述

1.2 textCNN 合理性分析

  • 深度学习模型在计算机视觉与语音识别方面取得了卓越的成就. 在 NLP 也是可以的.
  • 卷积具有局部特征提取的功能, 所以可用 CNN 来提取句子中类似 n-gram 的关键信息.

2.textCNN相比于传统图像领域的CNN有什么特点?

1.相同点:

  • textCNN和传统的CNN的结构非常类似,都是包含输入层,卷积层,池化层和最后的输出层(softmax)等;可用于CNN防止过拟合的措施,如:dropout , BN , early_stop , L1/L2正则化等也都是通用的;
  • 全连接层:全连接层跟其他模型一样,假设有两层全连接层,第一层可以上’relu’作为激活函数,第二层则使用softmax激活函数得到属于每个类的概率。如果处理的数据集为二分类问题,如情感分析的正负面时,第二层也可以使用sigmoid作为激活函数,然后损失函数使用对数损失函数’binary_crossentropy’。

2.创新点:
卷积层:

  • 在处理图像数据时,CNN使用的卷积核的宽度和高度的一样的,但是在text-CNN中,卷积核的宽度是与词向量的维度一致!!!这是因为我们输入的每一行向量代表一个词,在抽取特征的过程中,词做为文本的最小粒度,如果我们使用卷积核的宽度小于词向量的维度就已经不是以词作为最小粒度了。
  • 而高度和CNN一样,可以自行设置(通常取值2,3,4,5),高度就类似于n-gram了。由于我们的输入是一个句子,句子中相邻的词之间关联性很高,因此,当我们用卷积核进行卷积时,不仅考虑了词义而且考虑了词序及其上下文。(类似于skip-gram和CBOW模型的思想)。

池化层:

  • 因为在卷积层过程中我们使用了不同高度的卷积核,使得我们通过卷积层后得到的向量维度会不一致,所以在池化层中,我们使用1-Max-pooling对每个特征向量池化成一个值,即抽取每个特征向量的最大值表示该特征,而且认为这个最大值表示的是最重要的特征。当我们对所有特征向量进行1-Max-Pooling之后,还需要将每个值给拼接起来。得到池化层最终的特征向量。在池化层到全连接层之前可以加上dropout防止过拟合。

3.textCNN例子讲解

3.1 参数和超参数

在这里插入图片描述

3.2 textCNN的数据

  • 打标签分类,对每句话进行分类
  • jieba分词,可以选取的操作,自己添加词库和停用词。
    使用jieba分词
  • 得到想要的分词后,进行word2id操作,获取文本特征
  • shuf 制作好训练、测试、验证数据集

3.3 textCNN的网络结构定义

在这里插入图片描述

3.4 代码

import tensorflow as tf
import numpy as npclass TextCNN(object):"""A CNN for text classification.Uses an embedding layer, followed by a convolutional, max-pooling and softmax layer.sequence_length ="""def __init__(self, sequence_length, num_classes, vocab_size,embedding_size, filter_sizes, num_filters, l2_reg_lambda=0.0):# 定义模型数据输出结构 定长的sequence_lengthself.input_x = tf.placeholder(tf.int32, [None, sequence_length], name="input_x")self.input_y = tf.placeholder(tf.float32, [None, num_classes], name="input_y")self.dropout_keep_prob = tf.placeholder(tf.float32, name="dropout_keep_prob")# Keeping track of l2 regularization loss (optional)l2_loss = tf.constant(0.0)# Embedding layerwith tf.device('/cpu:0'), tf.name_scope("embedding"):self.W = tf.Variable(# 每一个词都是embedding_size长度的特征向量 (18758,128)tf.random_uniform([vocab_size, embedding_size], -1.0, 1.0),name="W")#根据词的下标,获取它们的word2vec。#embedded_chars的shape[sequence_length, embedding_size]# (none,56,128) sequence_length = 56self.embedded_chars = tf.nn.embedding_lookup(self.W, self.input_x)#扩充维度 相当于一个1维的通道数# [None,56,128,1]self.embedded_chars_expanded = tf.expand_dims(self.embedded_chars, -1)# Create a convolution + maxpool layer for each filter sizepooled_outputs = []for i, filter_size in enumerate(filter_sizes):with tf.name_scope("conv-maxpool-%s" % filter_size):# Convolution Layer# filter_size 分别为3 4 5filter_shape = [filter_size, embedding_size, 1, num_filters]W = tf.Variable(tf.truncated_normal(filter_shape, stddev=0.1), name="W")b = tf.Variable(tf.constant(0.1, shape=[num_filters]), name="b")conv = tf.nn.conv2d( # [None,56-3+1,1,128] [None,56-4+1,1,128] [None,56-5+1,1,128]self.embedded_chars_expanded,W,strides=[1, 1, 1, 1],padding="VALID",name="conv")# Apply nonlinearityh = tf.nn.relu(tf.nn.bias_add(conv, b), name="relu")# Maxpooling over the outputspooled = tf.nn.max_pool( #[None,1,1,128]h,ksize=[1, sequence_length - filter_size + 1, 1, 1], #[1,54,1,1] [1,53,1,1] [1,52,1,1]strides=[1, 1, 1, 1],padding='VALID',name="pool")print(pooled)pooled_outputs.append(pooled)# Combine all the pooled featuresnum_filters_total = num_filters * len(filter_sizes)self.h_pool = tf.concat(pooled_outputs, 3)self.h_pool_flat = tf.reshape(self.h_pool, [-1, num_filters_total])# 全连接dropoutwith tf.name_scope("dropout"):self.h_drop = tf.nn.dropout(self.h_pool_flat, self.dropout_keep_prob)# Final (unnormalized) scores and predictionswith tf.name_scope("output"):W = tf.get_variable("W",shape=[num_filters_total, num_classes],initializer=tf.contrib.layers.xavier_initializer())b = tf.Variable(tf.constant(0.1, shape=[num_classes]), name="b")l2_loss += tf.nn.l2_loss(W)l2_loss += tf.nn.l2_loss(b)self.scores = tf.nn.xw_plus_b(self.h_drop, W, b, name="scores")self.predictions = tf.argmax(self.scores, 1, name="predictions")# Calculate mean cross-entropy losswith tf.name_scope("loss"):losses = tf.nn.softmax_cross_entropy_with_logits(logits=self.scores, labels=self.input_y)self.loss = tf.reduce_mean(losses) + l2_reg_lambda * l2_loss# Accuracywith tf.name_scope("accuracy"):correct_predictions = tf.equal(self.predictions, tf.argmax(self.input_y, 1))self.accuracy = tf.reduce_mean(tf.cast(correct_predictions, "float"), name="accuracy")

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

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

相关文章

词嵌入初探

文章目录目录1.词嵌入产生的背景1.1 NLP关键:语言的表示1.2 NLP词的表示方法类型1.2.1 独热表示one-hot1.2.2 词的分布式表示distributed representation1.3 NLP中的语言模型1.4 词的分布表示1.4.1 基于矩阵的分布表示1.4.2 基于聚类的分布表示1.4.3 基于神经网络的…

VIM使用系列之一——配置VIM下编程和代码阅读环境

作者:gnuhpc from http://blog.csdn.net/gnuhpc http://gnuhpc.wordpress.com/ 本文环境:ubuntu 10.10/vim7.2 前言:一年前写过一篇关于VIM的C/C编程环境的文字,一年中又接触了很多东西,深入使用中发现其实还是需要有…

fastText初探

目录:1、应用场景2、优缺点3、FastText的原理4、FastText词向量与word2vec对比 目录: 1、应用场景 fastText是一种Facebook AI Research在16年开源的一个文本分类器。 其特点就是fast。相对于其它文本分类模型,如SVM,Logistic …

python中使用“if __name__ == '__main__'”语句的作用

首先用最简洁的语言来说明一下 if __name__ __main__: 的作用:防止在被其他文件导入时显示多余的程序主体部分。 先举个例子,如果不用if __name__ __main__: 会发生什么事: 首先在yy.py中调用cs.py #yy.pyimport csprint(引用cs)cs.cs()p…

redis——sentinel

什么是哨兵机制 Redis的哨兵(sentinel) 系统用于管理/多个 Redis 服务器,该系统执行以下三个任务: 监控: 哨兵(sentinel) 会不断地检查你的Master和Slave是否运作正常。 提醒:当被监控的某个 Redis出现问题时, 哨兵(sentinel) 可以通过 API 向管理员或者其他…

FM,FFM及其实现

在推荐系统和计算广告业务中,点击率CTR(click-through rate)和转化率CVR(conversion rate)是衡量流量转化的两个关键指标。准确的估计CTR、CVR对于提高流量的价值,增加广告及电商收入有重要的指导作用。业界…

linux-在cenos上安装大全(nginx/JRE/maven/Tomcat/MYSQL/redis/kafka/es...)

云服务器 阿里云 腾讯云 七牛云 百度云 天翼云 华为云 西部数码 自己购买一个,学生和企业用户都有优惠的。 putty 自己下载一个putty,用来操作云服务器。 putty.org 一路下一步就ok。 点击putty.exe,输入你的ip或域名 最好改成20&#xff1…

KKT条件初步理解

最近学习的时候用到了最优化理论,但是我没有多少这方面的理论基础。于是翻了很多大神的博客把容易理解的内容记载到这篇博客中。因此这是篇汇总博客,不算是全部原创,但是基础理论,应该也都差不多吧。因才疏学浅,有纰漏…

redis——实战点赞

点赞功能随处可见,我们都知道点赞是一个非常高频的操作,redis就非常适合做这种工作。 实现效果: 分析:三种类型:给帖子点赞,给评论点赞,给回复点赞 我们只实现查看点赞数量的话,只…

大数据学习(10)--流计算

文章目录目录1.流计算的概述1.1 什么是流数据?1.2 批量计算和实时计算1.3 流计算的概念1.4 流计算和Hadoop1.5 流计算框架2.流计算的处理流程2.1 流计算处理基本概念2.2 数数据的实时获取2.3 数据的实时计算2.4 实时查询任务3.流计算的应用和开源框架Strom3.1 流计算…

redis——实战关注

效果: 思路:很好想,把自己的粉丝和自己关注的人都存起来(set即可),做增删改查。 package com.now.community.community.service;import com.now.community.community.entity.User; import com.now.commun…

神经网络中的优化算法总结

在调整模型更新权重和偏差参数的方式时,你是否考虑过哪种优化算法能使模型产生更好且更快的效果?应该用梯度下降,随机梯度下降,还是Adam方法? 这篇文章介绍了不同优化算法之间的主要区别,以及如何选择最佳的…

Java开发需要知道的HTML知识

概述 HTML(HyperText Markup Language) 不是一门编程语言,而是一种用来告知浏览器如何组织页面的标记语言。 HTML 可复杂、可简单,一切取决于开发者。它由一系列的元素组成,这些元素可以用来包围不同部分的内容,使其以某种方式呈…

处理机调度与死锁

处理机调度与死锁 处理机调度的层次 高级调度 高级调度又称为作业调度或长程调度,其主要功能是根据某种算法,把外存上处于后备队列中的那些作业调入内存,也就是说,它的调度对象是作业。 1.作业和作业步 作业:一个比程…

各种卷积

从最开始的卷积层,发展至今,卷积已不再是当初的卷积,而是一个研究方向。在反卷积这篇博客中,介绍了一些常见的卷积的关系,本篇博客就是要梳理这些有趣的卷积结构。 阅读本篇博客之前,建议将这篇博客结合在一…

springboot——kaptcha

导入包&#xff1a; <dependency><groupId>com.github.penggle</groupId><artifactId>kaptcha</artifactId><version>2.3.2</version></dependency> 配置类&#xff1a; package com.now.community.community.config;import…

NLP复习资料(7)-机器翻译、文本分类、情感分析

NLP复习资料国科大&#xff0c;宗老师《自然语言处理》课程复习笔记&#xff0c;个人整理&#xff0c;仅供参考。此部分为手稿&#xff0c;高清图下载见链接&#xff1a;https://download.csdn.net/download/sinat_40624829/11662412

redis——对项目的一些优化方案

这是我们之前项目的业务流程&#xff0c;做一下简单介绍。 登录&#xff1a; 用户输入账号、密码、验证码。我们先判断用户输入的验证码是不是我们session存的验证码&#xff0c;然后去查账号密码是否正确。 如果登录成功&#xff0c;发送给用户一张凭证&#xff08;ticket&a…

深度模型压缩论文(02)- BlockSwap: Fisher-guided Block Substitution for Network Compression

文章目录1.摘要和背景1.1 摘要1.2 背景2.方法和贡献2.1 方法2.2 贡献3.实验和结果3.1 实验3.2 结果4.总结和展望4.1 总结4.2 展望本系列是在阅读深度神经网络模型小型化方面论文时的笔记&#xff01;内容大部分从论文中摘取&#xff0c;也会有部分自己理解&#xff0c;有错误的…

深度模型压缩论文(01)- Meta Filter Pruning to Accelerate Deep Convolutional Neural Networks

文章目录1.摘要和介绍1.1摘要部分2.背景和方法2.1 背景2.2 贡献2.3 方法3.实验和结果3.1 实验3.2 结果4.总结和展望4.1 总结4.2 展望本系列是在阅读深度神经网络模型小型化方面论文时的笔记&#xff01;内容大部分从论文中摘取&#xff0c;也会有部分自己理解&#xff0c;有错误…