Datawhale-零基础入门NLP-新闻文本分类Task05

该任务是用Word2Vec进行预处理,然后用TextCNN和TextRNN进行分类。TextCNN是利用卷积神经网络进行文本文类,TextCNN是用循环神经网络进行文本分类。

1.Word2Vec

文本是一类非结构化数据,文本表示模型有词袋模型(Bag of Words)、主题模型(Topic Model)、词嵌入模型(Word Embedding)。

(1)文本表示

一个文本表现为一个由文字和标点符号组成的字符串,由字或字符组成词,由词组成词语,进而形成句、段、节、章、篇的结构。因此,需要找到一种理想的形式化表示方法,既能反映文档的内容,又要有对不同文档的区分能力。

常用的模型是向量空间模型(vector space model,VSM),基本概念:

  • 文档(document):文章中具有一定规模的片段。
  • 项/特征项(term/feature term):特征项是VSM中最小的不可分的语言单元,一个文档内容被看成是它含有的特征项所组成的集合。表示为Document=D(t_{1},...,t_{k},...,t_{n})
  • 项的权重(term weight):每个特征项都有一个权重,即Document=D(w_{1},...,w_{k},...,w_{n})

定义:给定一个文档Document=D(w_{1},t_{1};...,w_{k},t_{k};...,w_{n},t_{n}),D符合以下条件:

 

(1)one-hot编码(杜热编码)

 

 

 

词嵌入是一类将词向量化的模型的统称,核心思想是将每个词都映射成低维空间上的一个稠密向量,Word2Vec是常见的词嵌入模型之一。Word2Vec有两个网络结构CBOW和Skip-gram。

CBOW的目标是根据上下文出现的词语来预测当前词的生成概率,Skip-gram是根据当前词来预测上下文中各词的生成概率。

a.CBOW

CBOW(Continuous Bag of Words),称为连续词袋模型,假如有这样一个句子“The man fell in love with the woman”,我们如果只看到“The man fell in love with the __”,CBOW则是要联系上下文预测这个‘woman’单词。

2.TextCNN

对于文本来说,局部特征就是由若干单词组成的滑动窗口,类似于N-gram。卷积神经网络的优势在于能够自动对N-gram特征进行组合和筛选,获得不同抽象层次的语义信息。由于在每次卷积中采用了共享权重的机制,因此它的训练速度较快。

TextCNN是由输入层,卷积层,池化层,输出层组成,结构如下:

(1)输入层

输入层是一个N*K的矩阵,其中N为文章所对应的单词总数,K是每个词对应的表示向量的维度。每个词的K维向量可以是预先在其他语料库训练好的,也可以作为未知的参数由网络训练得到。因此,该输入层采用了两个通道的形式,即有两个N*K的输入矩阵,其中一个用预先训练好的词嵌入表达,并且在训练过程中不再变化;另一个 会随网络的训练过程而变化。

(2)卷积层

在输入的两个N*K的矩阵上,我们定义不同的滑动窗口进行卷积操作。每一次卷积操作相当于一个特诊向量的提取,通过定义不同的滑动窗口,就可以提取出不同的特征向量。

(3)池化层

池化层可以采用1-Max池化,即为从每个滑动窗口产生的特征向量中筛选出一个最大的特征,然后将这些特征拼接起来构成向量表示。也可以选用K-Max池化(选出每个向量中最大的K个特征),或者平均池化等,达到的效果是将不同长度的句子通过池化得到一个定长的向量表示。

(4)输出层

得到文本的向量表示之后,后面的网络结构就和具体任务相关了。文本分类是接入全连接层,并使用SoftMax激活函数输出每个类别的概率。

3.TextRNN

传统文本处理任务中丢失了输入的文本序列中每个单词的顺序,两个单词之间的长距离依赖关系还是很难学习到。循环神经网络却能很好地处理文本数据变长并且有序的输入序列。常用的循环神经网络有RNN,双向RNN,LSTM,GRU等。

循环神经网络(Recurrent Neural Network,RNN)是将网络隐藏层的输出重新连接到隐藏层形成闭环。它模拟了人阅读一篇文章的顺序,将前面有用的信息编码到状态变量中,从而有一定的记忆能力。典型结构为:

循环神经网络是采用BPTT(Back Propagation Through Time,基于时间的反向传播)求解的,然后使用BPTT学习的循环神经网络不能成功捕捉到长距离的依赖关系,由于sigmoid函数具有饱和性,在进行大量训练之后,就会出现梯度消失问题。如果计算矩阵的最大特征值大于1,随着训练,每层的梯度大小会呈指数增长,导致梯度爆炸;反之,如特征值小于1,则出现梯度消失。因此,LSTM,GRU是通过加入门控机制来弥补梯度上的损失。

长短期记忆网络(Long Short Term Memory,LSTM)是循环神经网络的扩展,由于循环神经网络有梯度消失和梯度爆炸的问题,学习能力有限,LSTM可以对有价值的信息进行长期记忆,从而减少循环神经网络的学习难度。LSTM是一组记忆块(memory blocks)的循环子网构成,每一个记忆块包含了一个或多个自连接的记忆细胞及三个乘法控制单元-输入门、输出门、遗忘门,提供着读、写、重置的功能

输入门控制当前计算的新状态以多大程度更新到记忆单元;当信息经过输入单元激活后会和输入门进行相乘,以确定是否写入当前信息;

输出门控制着当前的输出有多大程度上取决于当前的记忆单元;其与当前细胞记忆信息进行相乘,以确定是否输出信息;

遗忘门控制着前一步记忆单元中的信息有多大程度被遗忘掉;其与细胞之前的记忆信息进行乘法运算,以确定是否保留之前的信息;

记忆块的结构:

其中,σ是sigmoid函数,tanh是tanh函数,是相乘,是相加。

第1个部分,通过一个sigmoid函数,决定丢弃的信息,第2部分,在生成候选记忆时,使用了双曲线正切函数Tanh作为激活函数,确定更新信息,第3部分,更新了细胞状态,第4 部分是将结果进行输出并传递给下一个记忆块。

参考:

《百面机器学习》——诸葛越

《深度学习实战》——杨云

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

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

相关文章

想要学好C++有哪些技巧?

学C能干什么? 往细了说,后端、客户端、游戏引擎开发以及人工智能领域都需要它。往大了说,构成一个工程师核心能力的东西,都在C里。跟面向对象型的语言相比,C是一门非常考验技术想象力的编程语言,因此学习起…

window.open打开新窗口被浏览器拦截的处理方法

一般我们在打开页面的时候&#xff0c; 最常用的就是用<a>标签&#xff0c;如果是新窗口打开就价格target"_blank"属性就可以了&#xff0c; 如果只是刷新当前页面就用window.location.reload()&#xff0c; 在某些特殊情况下也要用到另外一种新窗口打开的方法…

Datawhale-零基础入门NLP-新闻文本分类Task06

之前已经用RNN和CNN进行文本分类&#xff0c;随着NLP的热门&#xff0c;又出现了大热的Attention&#xff0c;Bert&#xff0c;GPT等模型&#xff0c;接下来&#xff0c;就从理论进行相关学习吧。接下来&#xff0c;我们会经常听到“下游任务”等名词&#xff0c;下游任务就是N…

Linux-C编程 / 多线程 / 如何终止某个线程?

示例 demo最简单的 demo&#xff1a;static void* thread1_func(void *arg) {int i 0;// able to be cancelpthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, NULL);for(i0; ; i) {printf("thread1 %d\n", i);…

PaddlePaddle入门——基本概念

最近报了百度的深度学习认证&#xff0c;需要使用Paddle进行编程实现&#xff0c;找了一些基础教程&#xff0c;特意记录下来&#xff0c;加深印象。思维导图如下&#xff1a; 一、Paddle的内部执行流程 二、内部详解 1.Variable&#xff08;变量&#xff09; &#xff08;1…

回答一个微信好友的创业问题

ps:很喜欢这种有烟火气息的照片— — 提问&#xff1a;我最近要创业&#xff0c;打算跟一个朋友合伙&#xff0c;但是我朋友不会技术&#xff0c;所以他只投入钱&#xff0c;也不会参与公司的管理。我们启动资金是10万&#xff0c;他打算投入7万&#xff0c;想占股65%。因为没有…

百度深度学习初级认证——已过

开头先放图&#xff0c;百度深度学习初级工程师认证已通过&#xff0c;记录一下备战和考试细节&#xff01;&#xff01;&#xff01; 1.报考 当时是通过百度的AI Studio看到深度学习的认证了&#xff0c;价格是800&#xff0c;然后阴差阳错从百度技术学院的链接看到深度学习…

哦,这是桶排序

漫画&#xff1a;什么是桶排序&#xff1f;要了解桶排序之前&#xff0c;可以先看看上面小灰的那篇文章&#xff0c;我觉得是比较不错的。桶排序也可以理解为分类排序&#xff0c;把不同的数据归类&#xff0c;归类之后再重新排序&#xff0c;每个桶里面的内容就是一类数据&…

如何防御光缆窃听

很多年前&#xff0c;人们就认识到采用铜缆传输信息很容易通过私搭电缆的方式被窃取。对于一个网络和安全管理人员来说&#xff0c;要么对铜缆采用更严格的安全防护措施&#xff0c;要么就使用光缆。因为很多人都认为光纤可以很好地防止***通过窃听手段截获网络数据。但是实际上…

Linux字符设备驱动实例

globalmem看 linux 设备驱动开发详解时&#xff0c;字符设备驱动一章&#xff0c;写的测试代码和应用程序&#xff0c;加上自己的操作&#xff0c;对初学者我觉得非常有帮助。写这篇文章的原因是因为我看了我之前发表的文章&#xff0c;还没有写过字符设备相关的&#xff0c;至…

8-[函数]-嵌套函数,匿名函数,高阶函数

1.嵌套函数 &#xff08;1&#xff09;多层函数套用 name "Alex"def change_name():name "Alex2"def change_name2():name "Alex3"print("第3层打印", name)change_name2() # 调用内层函数print("第2层打印", name)chan…

c语言画谢宾斯基三角形

谢宾斯基三角形是一个有意思的图形&#xff0c;&#xff08;英语&#xff1a;Sierpinski triangle&#xff09;是一种分形&#xff0c;由波兰数学家谢尔宾斯基在1915年提出,它是一种典型的自相似集。先画一个三角形&#xff0c;然后呢&#xff0c;取三角形的中点&#xff0c;组…

进程间的通信——无名管道

进程间的通信——无名管道 宗旨&#xff1a;技术的学习是有限的&#xff0c;分享的精神是无限的。 一、进程间的通信 &#xff08;1&#xff09;同主机进程间数据交互机制&#xff1a;无名管道&#xff08;PIPE&#xff09;&#xff0c;有名管道&#xff08;FIFO&#xff09;…

sklearn官网-多分类问题

sklearn实战-乳腺癌细胞数据挖掘&#xff08;博主亲自录制视频&#xff09; https://study.163.com/course/introduction.htm?courseId1005269003&utm_campaigncommission&utm_sourcecp-400000000398149&utm_mediumshare 1.12.6. Multioutput classification Mult…

剖析C语言是如何画出这样的三角形的

哈哈&#xff0c;就是喜欢这些有意思的C语言上篇文章是这样写的c语言画谢宾斯基三角形那篇文章写的有点不直接&#xff0c;然后再查了下资料&#xff0c;看到了下面这些&#xff0c;我觉得解释更加好&#xff0c;这里主要是运用了光栅法&#xff0c;至于光栅法&#xff0c;可以…

NILMTK在Windows下的安装教程

近期&#xff0c;要进行负荷辨识&#xff0c;找到NILMTK安装包&#xff0c;特意将过程记录下来。 &#xff08;1&#xff09;Windows安装 本机已安装了Anaconda&#xff0c;环境是Python3&#xff0c;NILMTK包的项目地址为&#xff1a;https://github.com/nilmtk/nilm_metada…

修改cmdline 把内存改成512MB

#添加cmdline的方式— — 在BoardConfig.mk中修改device/mediateksample/aiv8167sm3_bsp/BoardConfig.mk BOARD_KERNEL_CMDLINE bootopt64S3,32N2,32N2 mem512MB— — 在dts 里面修改kernel-4.4\arch\arm\boot\dts\*.dts / {model "Atmel AT91SAM9M10G45-EK";compa…

NILMTK——经典数据集REDD介绍和使用

配置了NILMTK包的环境之后&#xff0c;想找数据测试一下&#xff0c;在NILMTK官网的API Docs里边发现dataset_converters模块中有内置的数据集处理函数&#xff0c;如图&#xff1a; 将数据转换成HDF文件&#xff0c;这些数据都是比较优秀的&#xff0c;其中&#xff0c;常用的…

上拉电阻的作用

1、介绍使用微控制器&#xff08;MCUs&#xff09; 或任何数字逻辑设备时&#xff0c;上拉电阻器非常常见。本教程将解释何时何地使用上拉电阻器&#xff0c;然后我们将做一个简单的计算&#xff0c;以显示为什么上拉很重要。2、上拉电阻是什么&#xff1f;假设您有一个将一个引…

NILMTK——深扒组合优化(CO)和FHMM细节

前面的博客讲了具体实现&#xff0c;现在深究算法代码实现细节&#xff01;&#xff01;&#xff01; 1.CO (1)关于train 从以下代码可知&#xff0c;CO首先是对各个电器的功率数据做了train&#xff0c;为了了解其原生实现对代码进行了深究&#xff1a; classifiers {CO:…