首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

人工智能不一样的文档分类

关键词:人工智能 自然语言处理

解决的问题

将新闻归类,可以给用户提供用户关注的分类的相关新闻,从而提高用户的体验,此次项目要解决的问题是通过机器学习的方式将新闻进行分类

涉及的领域:自然语言处理

自然语言处理是一门融语言学,计算机科学,数学于一体的科学,通过计算机和自然语言进行通信,特别是机器学习算法,在大量样本训练基础上可以实现文档自动分类,看图说话,人机对话,语言翻译等

出发点:

使用机器学习的方式将新闻分类,替代人工的方式,从而减少网站运营人员的工作量,提高工作效率

数据集

数据集来自20 Newsgroups官网,是由Ken Lang收集,为了他的论文Newsweeder: Learning to filter netnews[1]使用到的数据集,该数据集由20个新闻组数据,20000个新闻文档,且每个组有1000个左右的新闻,这个数据集已经成为机器学习文本应用试验的流行的数据集,特别是文本分类,因此使用这个数据集是很合理的,数据集下载链接地址:20news-19997.tar.gz

需要解决的问题

将20000条新闻,通过机器学习的方式将其分类,采用监督学习来解决分类问题

策略:

对数据进行清洗,使用nltk将新闻切换成句子,去掉句子中的特殊字符,去掉停用词(如me,i,he,she等),然后将句子进行切分成一个个单词

对得到的新闻的单词列表进行统计,统计文档单词的词频,统计文档的词云,统计文档的单词数量

根据单词数量过滤,去掉单词数量极少和极多的文档,过滤规则:Q1=上四分之一位Q3=上四分之三位 [Q1-0.7(Q3-Q1),Q3+0.7(Q3-Q1)],不在这个区间的文档全部过滤掉

将剩下的文档打乱顺序,将文档按0.7:03的比例分成训练集和测试集,将训练集按0.8:0.2分成训练集合验证集,将训练集的数据通过word2vec训练得到词向量(只使用训练数据,不是将训练测试数据统一拿过来进行训练,因为测试数据对于训练模型来讲是未知的,可能存在很多未知单词,如果模型泛化能力不强就会出现明显过拟合现象),将文档的所有单词的词向量进行叠加取平均得到新闻对应的文档向量(如果从这个单词的词向量不存在,则忽略这个单词)

将文档向量使用全连接层神经网络进行训练,采用的是300个输入层->100个神经元的隐藏层->200个神经元的隐藏层->300个神经元的隐藏层->20个神经元的输出层,输入层和隐藏层之间使用的是relu作为激活函数,隐藏层和输出层之间使用的是softmax作为激活函数

数据的探索

使用了20000条新闻数据,均衡地分成了20类,每条新闻含有成千上万的词句,首先对新闻进行了分句分词,发现数据有大小写问题,接着对所有单词统一转换成小写,新闻中还还有一些特殊符号如标点符号,以及数字,将这些词全部去掉,然后通过Counter对新闻的单词进行统计,发现很多词频较大的词,都是没有含义的指示代词如(me,he,she),通过使用ntlk stopwords将这些词过滤掉,最后得到以下的统计数据:

探索性可视化

新闻词频统计:对新闻data/alt.atheism/ 49960进行词频统计,单词the,atheism等出现的次数较多

新闻单词数量分布情况:对所有文档的单词数进行统计,单词数量的分布属于偏正太分布,单词数量在134-153之前新闻数量最多

文档单词数量分布统计

新闻词云:(单词词频越大,单词字体越大),对新闻data/alt.atheism/ 49960

生成词云,发现单词alt,athesim和新闻分类相关的单词出现的次数较多,能够体现文档的分类特点

文档单词词云统计

算法和技术

使用的算法:随机梯度下降,BP神经网络,循环神经网络,卷积神经网络,word2Vec算法

随机梯度下降算法:SGD是用于最小化损失函数的一种常用算法,具体推导过程参考:[3]

word2vec算法

word2vec 是 Google于2013 年开源推出的一个用于获取 word vector 的工具包,十分简单,高效,使得自然语言的处理变得更加简单

包含两套框架:分别是hierarchica softmax和negative sampling

包含两种模型:CBOW和Skip-gram

两种模型:

CBOW:Continuous Bag-of-Words Model

模型包含三个层:输入层,投影层,输出层,模型是已知上下文 Wt-2,Wt-1,Wt+1,Wt+2的前提下预测当前词Wt

Skip-gram:(Continuous Skip-gram Model)

模型包含三个层:输入层,投影层,输出层,模型和CBOW刚好相反,是已知当前词Wt,预测其上下文Wt-2,Wt-1,Wt+1,Wt+2

两种框架:

hierarchica softmax:是基于哈夫曼树实现的,语料中的每个词就是该树中的一个叶子节点,并按词在语料中词频作为树的权重

negative sampling:是基于随机负采样实现的

模型中已知W上下文,对于给定的上下文,词W就是一个正样本,其他词就是负样本

使用word2vec算法首先可以得到每一个词的词向量,取文档频率最高的词的词向量叠加求平均得到文档的文档向量,得到了文档向量,接着使用不同的神经网络模型对文档进行分类

BP神经网络

网络结构包括输入层,多个隐层,输出层,输入的特征向 量通过隐含层 变换达到输出层,在输出层得到分类结果,随着神经网络层数 的增加,容 易陷入局部最优解和梯度消失的问题,具体推导过程参考

卷积神经网络:

全连接DNN的结构里下层神经元和所有上层神经元都能够形成连接,带来的 潜在问题是参数数量的膨胀,卷积神经网络,通过“卷积核”作为中介。同一 个卷积核权重是共享的,图像通过卷积操作后仍然保留原先的位置关系,这 样可以很好的解决参数数量膨胀的问题,网络结构:卷积层,max_pooling 层,dropout层,全连接层

循环神经网络:

全连接神经网络,无法对时间序列的变化进行建模,对于存在时间序列的问 题可以使用循环神经网络,循环神经网络可以将上一个状态作为下一个神经 元的输入的一部分,网络结构:多层循环网络

LSTM(Long Short Term):

通过输入门,输出门,遗忘门来控制Cell的状态,通过门的开关实现时间上 记忆功能

数据预处理

使用nltk进行分句分词

去掉特殊字符和数字

去掉停用词(如he,she等)

将所有单词转换成小写

对于单词数量极少或者极多的文档作为异常文档,作丢弃处理

执行过程

全连接神经网络结构:

词向量训练的方式不同,测试集准确率也不同,表格1-4行控制其他变量不变,改变min_count,当min_count=2时准确率最高,表格5-8行,改变窗口大小,发现提升不大,表格第九行,使用skip-gram模型,测试准确率没有多大变化,第10行改变框架,使用基于哈夫曼树的框架,CBOW模型,测试集准确率提升较大。第11行,使用基于哈夫曼树的框架,skip-gram模型,准确率达到了90.2%。

卷积神经网络结构

使用上述结构的卷积神经网络,得到的测试准确率86.75%

循环神经网络结构

使用上述结构的循环神经网络,得到的测试准确率:85.48%

完善

针对执行过程中得到准确率90.2%的模型(word2vec采用hierarchica softmax,skip-gram,min_count=2,window=5)进行微调

第一步:使用counter对词频进行排序,取词频最高的count个单词作为文档的向量,其余的单词进行忽略,count分别取[120,130,140,150,160,170,180,190,200,210],取词频最高的190个单词作为文档向量,得到的效果最佳,测试准确率最高

第二步:上一轮只是过滤掉了词频较低的词,并没有对单个词的词向量进行加权,对每个单词词向量进行累加之前乘以一个词频,得到的测试准确率89.87%,乘以词频影响比较大(有的词频较大),尝试使用乘以词频的对数,得到的准确率78%,因为词频为1的对数得到的是0,相当于忽略了词频为1的单词,做了一个判断如果对数

模型的评价

对参数dropout进行调优,分别取0.1-0.9,统计结果如下图所示:随着参数的增大,模型越容易过拟合

最终模型的选择,选择测试集准确率最高的模型最好的,模型准确率达到,已经是较好的模型,最终的模型是通过很多次试验,筛选出最好的参数,模型对于新闻分类稳健可靠,训练数据输入一些微小变化不会太大影响结果,这个模型测试数据6000份新闻,有90%分类正确,所以这个模型是可信的

合理分析

最终模型比基准模型表现的更好,准确率达到比基准模型准确率85%高一些,损失率比基准模型更高一些,,通过这个模型,可以通过机器学习的方式解决新闻分类问题,真正解决了实际的问题

结果可视化

通过word2Vec对每一个词得到一个300维的向量,通过PCA降维,变成一个二维的向量,使用mataplib展示,第一幅图是文档所有的词,第二幅图是放大的图,可以发现hero,kingdom意义相近的词距离较近

使用120个最高词频的单词向量叠加求平均作为文档向量,下图是准确率和损失函数的变化情况:测试准确率91.05%

下图是分别取不同最高词频的单词数量,得到测试文档准确率和损失函数的变化:

下图是使用lstm训练模型,准确率和损失函数的变化,测试准确率:85.49%

LSTM模型随着训练轮数增加的变化

下图是使用CNN训练模型,准确率和损失函数的变化,测试准确率:86.75%

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181206A08TFP00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券