前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >基于CNN的中文文本分类算法(可应用于垃圾文本过滤、情感分析等场景)

基于CNN的中文文本分类算法(可应用于垃圾文本过滤、情感分析等场景)

作者头像
机器学习AI算法工程
发布于 2019-10-28 08:11:10
发布于 2019-10-28 08:11:10
1.5K0
举报
文本分类任务是一个经久不衰的课题,其应用包括垃圾邮件检测、情感分析等。 传统机器学习的做法是先进行特征工程,构建出特征向量后,再将特征向量输入各种分类模型(贝叶斯、SVM、神经网络等)进行分类。 随着深度学习的发展以及RNN、CNN的陆续出现,特征向量的构建将会由网络自动完成,因此我们只要将文本的向量表示输入到网络中就能够完成自动完成特征的构建与分类过程。 就分类任务而言,CNN比RNN更为合适。CNN目前在图像处理方向应用最为广泛,在文本处理上也有一些的应用。本文将参考Denny Britz的WILDML教程

IMPLEMENTING A CNN FOR TEXT CLASSIFICATION IN TENSORFLOW

http://www.wildml.com/2015/12/implementing-a-cnn-for-text-classification-in-tensorflow/

来设计一个简单的CNN,并将其应用于中文垃圾邮件检测任务。

1.1神经网络基础知识 如果你对深度学习或RNN、CNN等神经网络并不太熟悉,请先移步至这里

http://www.wildml.com/

寻找相关文章进行精读,这个博主写的每一篇文章都很好,由浅至深,非常适合入门。

1.2如何将CNN运用到文本处理 参考understanding-convolutional-neural-networks-for-nlp

http://www.wildml.com/2015/11/understanding-convolutional-neural-networks-for-nlp/

1.3CNN网络结构和实现方法(必读) 此博文中的CNN网络结构和实现方法绝大部分是参考了 IMPLEMENTING A CNN FOR TEXT CLASSIFICATION IN TENSORFLOW 这篇文章的,CNN的结构和实现细节在这篇文章均有详述。

2 训练数据 2.1 中文垃圾邮件数据集 说明:对TREC06C进行了简单的清洗得到,以utf-8格式存储

完整代码 数据集下载地址:

1、转发本文至朋友圈

2、关注微信公众号 datayx 然后回复 文本分类 即可获取。

2.2垃圾邮件 spam_5000.utf8

3 预处理 3.1输入 上述两个文件 ( spam_5000.utf8 ham_5000.utf8) embedding_dim (word embedding的维度, 即用多少维度的向量来表示一个单词) 3.2 输出: max_document_length (最长的邮件所包含的单词个数) x (所有邮件的向量表示, 维度为[所有邮件个数,max_doument_length, embedding_dim]) y (所有邮件对应的标签,[0, 1]表示正常邮件,[1, 0]表示垃圾邮件,y的维度为[所有邮件个数, 2]) 3.3 主要流程: 3.3.1 过滤字符 为了分词的方便,示例程序中去除了所有的非中文字符,你也可以选择保留标点符号,英文字符,数字等其他字符,但要在分词时进行一定的特殊处理 3.3.2 分词 为了训练Word2Vec 模型,需要先对训练文本进行分词。这里为了方便起见,直接对每个中文字符进行分隔,即最后训练处的word2vec 的向量是对字的embedding, 效果也比较不错 3.3.3 对齐 为了加快网络的训练过程,需要进行批量计算,因此输入的训练样本需要进行对齐(padding)操作,使得其维度一致。这里的对齐就是把所有的邮件长度增加到max_document_length (最长的邮件所包含的单词个数),空白的位置用一个指定单词进行填充(示例程序中用的填充单词为”PADDING”) 3.3.4 训练word2vec 在对文本进行分词和对齐后,就可以训练处word2vec模型了,具体的训练过程不在此阐述,程序可以参考项目文件中的word2vec_helpers.py。 4 定义CNN网络与训练步骤 4.1 网络结构 此博文中的CNN网络结构和实现方法绝大部分是参考了 IMPLEMENTING A CNN FOR TEXT CLASSIFICATION IN TENSORFLOW 这篇文章的,CNN的结构和实现细节在这篇文章均有详述。重复的地方不再说明,主要说说不同的地方。 那篇文章中实现的CNN是用于英文文本二分类的,并且在卷积之前,有一层embedding层,用于得到文本的向量表示。 而本博文中实现的CNN在上面的基础上略有修改,用于支持中文文本的分类。CNN的结构的唯一变化是去掉了其中的embedding层,改为直接将word2vec预训练出的embedding向量输入到网络中进行分类。 网络结构图如下图所示:

4.2 训练步骤 在预处理阶段得到了x和y, 接下来将x 和 y 按照一定比例分成训练集train_x, train_y和测试集dev_x, dev_y。 接着按照batch_size分批将train_x输入至网络TextCNN中进行训练,经过三个卷积层的卷积和max-pool之后,合并得到一个向量,这个向量代表了各个卷积层学到的关于训练数据的某些特征,最后将这个向量输入到一个单层的神经网络并用softmax分类,得到最终的分类结果,计算损失(交叉熵)并开始后向传播,执行批量梯度下降来更新网络参数。

5 结果 准确率:

误差:

因为数据集并没有标准的训练集和测试集,本文只是按照0.1的比例进行了简单的分割,且并没有对一些重复的文档进行筛选,所以准确率能够达到99%左右。如果用比较标准的数据集,并加入交叉验证等方法,相信准确率会降低一些,但相信准确率仍能够超过绝大部分用传统机器学习的方法写出的分类器。


本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-11-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器学习AI算法工程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
事件驱动架构(EDA)入门
事件驱动架构(Event-Driven Architecture,简称EDA)是一种响应和处理事件的架构模式。它基于事件的触发和传递,使系统的各个组件能够松散耦合地协同工作。在近年来,EDA被广泛应用于构建高可伸缩性、弹性和可扩展的系统。
大盘鸡拌面
2023/11/03
1.2K0
EDA - 初探事件驱动
事件驱动架构(Event-Driven Architecture,简称EDA)是一种软件架构模式,它将系统中的各种组件之间的通信和协作建立在事件的概念之上。
小小工匠
2023/09/07
6630
EDA - 初探事件驱动
事件驱动架构设计
这篇文章是 软件架构演进 一个有关 软件架构 系列文章中的一篇。这些文章,主要是我学习软件架构、对软件架构的思考及使用方法的记录。相比于这个系列的前几篇文章,本篇文章可能看来更有意义。
柳公子
2018/09/17
3.1K0
事件驱动架构设计
用事件驱动编程解救臃肿的代码
在这篇文章中我们将了解到什么是“事件驱动编程”以及在Laravel中如何开始构建一个事件驱动应用,同时我们还将看到如何通过事件驱动编程来对应用程序的逻辑进行解耦。
KevinYan
2019/10/13
2.1K0
软件架构模式之事件驱动架构
我是架构精进之路,点击上方“关注”,坚持每天为你分享技术干货,私信我回复“01”,送你一份程序员成长进阶大礼包。
架构精进之路
2021/02/05
6580
软件架构模式之事件驱动架构
事件驱动架构:初级篇
原文:https://medium.com/high-alpha/event-driven-architecture-a-primer-f636395d0295
黑光技术
2020/05/14
6250
事件驱动架构:初级篇
用校车系统理解事件驱动架构
很小的时候,我就被系统迷住了。尤其是一个系统的优雅性最令我着迷。完美的执行、可预见性,一如校车系统的天才创意。
yuanyi928
2018/12/17
7500
基于领域事件实现微服务解耦
除了命令和操作等业务行为,还有一种非常重要的事件,这种事件通常会导致进一步的业务操作,在DDD(Domain Driven Design,领域驱动设计)中,这种事件叫做 领域事件。
王小明_HIT
2023/03/01
4360
基于领域事件实现微服务解耦
介绍基于事件的架构
译自:Introduction to Event-Driven Architecture
charlieroro
2021/03/04
7500
[MCP学习笔记]MCP事件驱动模型:分布式消息总线设计
在现代分布式系统架构中,事件驱动模型正逐渐成为构建解耦、可扩展和响应迅速系统的基石。MCP(Model Context Protocol)事件驱动模型通过分布式消息总线的设计,实现了系统各组件之间的高效协作和通信。
数字扫地僧
2025/05/04
1920
[MCP学习笔记]MCP事件驱动模型:分布式消息总线设计
事件驱动的基于微服务的系统的架构注意事项
今天的 IT 系统正在生成、收集和处理比以往更多的数据。而且,他们正在处理高度复杂的流程(正在自动化)以及跨越典型组织边界的系统和设备之间的集成。同时,预计 IT 系统的开发速度更快、成本更低,同时还具有高可用性、可扩展性和弹性。 为了实现这些目标,开发人员正在采用架构风格和编程范式,例如微服务、事件驱动架构、DevOps 等。正在构建新的工具和框架来帮助开发人员实现这些期望。 开发人员正在结合事件驱动架构 (EDA) 和微服务架构风格来构建具有极强可扩展性、可用、容错、并发且易于开发和维护的系统。 在本文
IT大咖说
2022/03/04
1.6K0
设计模式:企业级和大型系统中常用的系统架构设计模式
在现代软件开发中,设计模式是一种至关重要的工具,尤其是在企业级和大型系统的构建过程中。设计模式不仅有助于解决常见的软件设计问题,还能提高代码的可维护性、可扩展性和复用性。在本文中,我们将探讨一些在企业级和大型系统中广泛使用的高级设计模式。
运维开发王义杰
2023/12/12
4660
设计模式:企业级和大型系统中常用的系统架构设计模式
事件驱动和消息驱动
消息驱动和事件驱动很类似,都是先有一个事件,然后产生一个相应的消息,再把消息放入消息队列,由需要的项目获取。他们的区别是消息是谁产生的
Fisherman渔夫
2020/04/22
5.3K0
后端开发实践系列——事件驱动架构(EDA)编码实践
在本系列的前两篇文章中,我分别讲到了后端项目的代码模板和DDD编码实践,在本文中,我将继续以编码实践的方式分享如何落地事件驱动架构。
ThoughtWorks
2019/08/23
1.2K0
后端开发实践系列——事件驱动架构(EDA)编码实践
软件架构编年史:事件驱动架构
覃宇,Android开发者/ThoughtWorks技术教练//译者,热衷于探究软件开发的方方面面,从端到云,从工具到实践。喜欢通过翻译来学习和分享知识,译作有《Kotlin实战》、《领域驱动设计精粹》、《Serverless架构:无服务器应用与AWS Lambda》和《云原生安全与DevOps保障》。
张逸
2023/03/23
8030
软件架构编年史:事件驱动架构
Event-Driven Architecture思考
既然事件代表着在过去某一时刻发生的某个事情,那么那必然具备一些基本的要素,就像现实生活中发生某件事情也具备时间、地点等几个要素。事件的基本要素包含time、source、key、header、metadata和payload。
林一
2020/07/07
1.3K0
事件驱动架构在 vivo 内容平台的实践
当下,随着微服务的兴起,容器化技术的发展,以及云原生、serverless 概念的普及,事件驱动再次引起业界的广泛关注。
2020labs小助手
2022/01/24
8700
系统架构设计的原则和模式
1 分层架构 分层架构是最常见的架构,也被称为n层架构。多年以来,许多企业和公司都在他们的项目中使用这种架构,它已经几乎成为事实标准,因此被大多数架构师、开发者和软件设计者所熟知。 分层架构中的层次和组件是水平方向的分层,每层扮演应用程序中特定的角色。根据需求和软件复杂度,我们可以设计N层,但大多数应用程序使用3-4层。有太多层的设计会很糟糕,将导致复杂度的上升,因为我们必须维护每一层。在传统的分层架构中,分层包括 表现层、业务或者服务层,以及数据访问层 。 表现层负责应用程序的用户交互和用户体验(外观和视
架构师小秘圈
2018/04/02
1.3K0
系统架构设计的原则和模式
Java学习笔记——EDA事件驱动架构,你掌握了吗
EDA是一种以事件为媒介,实现组件或服务之间最大松耦合的方式。传统面向接口编程是以接口为媒介,实现调用接口者和接口实现者之间的解耦,但是这种解耦程度不是很高,如果接口发生变化,双方代码都需要变动,而事件驱动则是调用者和被调用者互相不知道对方,两者只和中间消息队列耦合。
慕容千语
2019/06/11
2.1K0
事件驱动架构在云时代为什么会再次流行呢?
作为一个经典架构模式,在全行业数字化转型的时代,事件驱动架构(EDA)应用范围扩大,成为 Gartner 年度十大技术趋势。在新型的数字化商业解决方案里,会有 60% 采纳 EDA 架构。那么为什么事件驱动架构在云时代为什么会再次流行呢?
六月的雨在Tencent
2024/09/14
2430
推荐阅读
相关推荐
事件驱动架构(EDA)入门
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档