资源下载地址:https://download.csdn.net/download/sheziqiong/85979978
资源下载地址:https://download.csdn.net/download/sheziqiong/85979978

数据文件下载好放入 2_word2vec 中
模型文件下载好放入 2_word2vec 中

  • 1_dataclean 为数据预处理(由于数据文件本文已处理,勿运行)
  • 2_word2vec 为词嵌入模型
  • 3_sklearn 为项目的 baseline,特征工程 + 朴素贝叶斯
  • 4_cnn 为卷积神经网络的文本分类(调参很久,未得到好结果)
  • 5_rnn 为卷积神经网络的文本分类(结果优于 baseline)

选题意义

  • 期刊论文本数量增长迅速,人工分类耗费精力

  • 某个实验表明,相同的人在不同时间段对同一批文献分类;不同的人对同一批文献分类,得到的结果发现相差较大,是因为人的主观性和知识结构的变迁会影响分类结果。机器分类不会存在此问题。

项目目标

  • 建立合理的 CNKI 数据集
    样本地址
  • 对中图法分类的 22 个大类,178 个二级类分类,实现正确区分

reference

对于中文期刊分类这一特定应用场景,往往采用以下方案。

  • 采用向量空间模型(VSM),用一个向量表示一个文本。《机器学习在中文期刊分类应用》,文章 D=(k1,k2,k3,k4,k5……kn),这是一个多维的向量,如果维数很多,将来计算起来很麻烦,则需要降维。VSM 是一种古老的方法,得到文本向量后送到 LR/SVM/NN 中即可。文章的数据集选的不是很科学,只选了 8×4000(8 个大类,每大类 4000 篇作为数据集)。
  • 采用 n-gram 向量代表文本向量,得到文本向量后用 kmeans 聚类。如《一种基于 N-Gram 技术的中文文献自动分类方法》,数据库采用台湾中文儿童读物。

模型

  • 在算法层面没有创新,因为简单的说,这是一个组合模型:把 word embedding 训练出的词向量按一定方式合成文本向量后扔给 SVM 等分类器就行了。当然写毕业论文时,在后期完全可以在应用逻辑层面加以改进。就这么简单。
  • 但是,Convolutional Neural Networks for Sentence Classification 这篇论文提出了一种新策略:卷积网络训练深层分类器。我想尝试一下,是将 word embedding 的 vectors 像图片一样堆砌成矩阵,用 patches 对这样的“像素”多层卷积。而且有作者 demo 在 theano 平台下运行。这是在 tensorflow 平台下训练的 Convolutional Neural Network for Text Classification in Tensorflow,这是 tensorflow cnn word 代码的作者笔记,正在试,不过训练比较慢
  • 目前的目标是实现几种分类器在同一数据集下的测评(期刊一级/二级分类正确率)。

整体方案及进展

CNKI 数据集

按照中国图书馆分类法文献可分为 5 个基本部类,22 个大类,176 个二级类,若干个三级类。本项目采集数据方法,拟使用对检索的“按图书分类”检索爬取二级类的数据(标题,关键词,摘要),如输入“A1”检索的到马克思主义相关文献。每个类的检索控制为 1000 篇。

这里存在几个问题,有待探讨。

  • 有的小类爬光了所有论文,总共不到 60 篇,如 A1,这种情况适当考虑合并 A 类所有论文,为一类,即把 A0/A1/A2/A3/A4/A5/A6/A7/A8 合并为单独一类 A 类进行分类。出于这样考虑的物理行为是,文献常年投稿少,没有必要让机器做深入分类。
  • 光是按照上述检索方法并不能得到很好的数据,因为中图法的分类系统里存在 TN/TP/TJ 等这样的类别。当输入 J7 检索时,爬虫难以识别所检索到的文章到底是 TJ7 还是 J7,于是出现了下图的情况。
  • 在这里,J7 是舞蹈类文献,可是 CNKI 检索系统却出现了导弹类文献(TJ7),这个问题导致之前爬出的数据几乎全部作废。解决办法是,原爬虫的 url 为 http://epub.cnki.net/kns/brief/default_result.aspx (正常检索)换为 http://epub.cnki.net/kns/brief/result.aspx (高级检索),由于 HTML 结构也变了,爬虫的相关参数也需要调整。使用高级检索可以避免上述灾难性问题。
  • 爬虫稳定性不够好,偶尔会丢失摘要,导致文本数据库不全,当然作为程序训练暂时无妨。正在修改代码,增强其稳定性。(今天发现,很多论文发表时并没有写摘要,甚至有的没有关键词。160309)
  • 搜索时只筛选期刊作为数据。因为会议论文一般过于专业,有专业人士分类,常常无需机器分类;而硕士博士论文的摘要动辄八百一千字,果断抛弃。
  • 最终我们得到的是:22 个大类的文件夹,每个大类里存放相应小类的 CSV 文件,每个 CSV 文件里保存 1000 行文本数据。

raw data -> practicable data

  • 对与每一篇文献的标题/关键词/摘要,需要剔除无用的信息,如标点符号,数字,英文,非 utf-8 字符等,需要使用正则表达式进行基本数据清洗。
  • 虽然只提取了标题/关键词/摘要,文本量仍然很大,且不适合向量表示。需要进行关键词提取,这里采用最常用的 tf-idf 算法。tf-idf 算法是一种统计方法,一个词在文本的重要程度由两个参数决定,tf(term frequency)和 idf(inverse document frequency),前者代表一个词在文本中出现的次数多少,后者表示这个词普适度如何(如“我”,“你”,“可以”,这样的词出现再多也没用,赋给它很高的 idf 值)。最后用 tf/idf 表示最终的重要程度。对于每一篇论文来说,取排前 10 的关键词即可理解全文大意,总而言之,用 10 个词的词向量代表一篇论文。
  • 经过上述两个步骤,即可为每篇文章得到 10 个关键词,就用他们来训练最终的分类器。

训练词向量

  • 现在面临的一个关键问题是如何用向量合理表示一个词(word embedding),@南大周志华翻译为“词嵌入”。学术界常用的模型为 bengio 的 NNLM 模型,构造的三层神经网络的目的是训练一个预言模型,计算句子完整表达的概率,副作用是获得了单个词的词向量。

  • 最下方的 wtn+1,…,wt2,wt1 代表前 n1 个词。现在的目的是根据这已知的 n1 个词预测下一个词 wt。C(w) 表示词 w 所对应的词向量,我们使用一套唯一的词向量,放置于矩阵 C(一个 |V|×m 的矩阵)中。其中 |V| 表示词表中词的总数,m 表示词向量的维度。w 到 C(w) 的转化就是从矩阵中取出一行。网络第一层(输入层)是将 C(wtn+1),…,C(wt2),C(wt1) 这 n1 个向量首尾相接拼起来,形成一个 (n1)m 维的向量。网络第二层(隐藏层)就如同普通的神经网络,直接使用偏置加权重表达神经元输出。在此之后,使用 tanh 作为激活函数。网络第三层(输出层)一共有 |V| 个节点,每个节点 表示 下一个词为 i 的未归一化 log 概率。最后使用 softmax 激活函数将输出值 y 归一化成概率。训练采用普通的前反馈 + 梯度下降的方法就能成功。
    Bengio 在 APNews 数据集上做的对比实验也表明他的模型效果比精心设计平滑算法的普通 n-gram 算法要好 10% 到 20%。
    这样的训练方式是用完整句子来训练,所以可以说它是无监督的

    • 当然我们项目里要用的,是这个语言模型的的副作用——词向量。Google 的 word2vec 使用的 CBOW 模型对 NNLM 进行了很多优化(如用树的编码表示单词),作为工具完全可以 work 了。
    • 对中文文献分类来说,需要一个类别广,知识面宽的语料库来训练词向量,这很难找。比如用搜狗新闻就难以将一些化学名词囊括,而论文里常常会出现这种稀有专业名词,人名日报则更不合理。如果用下载好的中文期刊作为语料库也不合适,主要原因是丰富度不够。我这里暂且使用中文维基百科(1.1G)作为词向量训练语料库。
    • 使用开源项目 gensim 的 word2vec 模块可以很方便的训练出词向量模型和词向量表示(150MB),这里不做展示。

训练分类器

训练方法有很多种,大抵是 LR/SVM/NN 等,这个作为 word2vec 的输出层,例如在最后一层加上 softmax 试试(这几天试试)。由于在爬取数据过程中产生了上述的问题(不稳定,检索模糊),很多数据正在重新收集,所以暂时无法实际操作。

160323 数据集基本收集完成,爬虫还是不够 robust,要命的是找不到原因,csdn 并没有反爬虫,不过宿舍的网已经打不开 http://www.cnki.net 了,隔壁的还能打开,图书馆的也能打开,不知怎么回事。

好在经过近两星期的断断续续爬虫,终于把 19 个类收集齐了(一共是 22 个类,其中 Z 类非投稿内容不采集,VU 两类还未采集好)。

资源下载地址:https://download.csdn.net/download/sheziqiong/85979978
资源下载地址:https://download.csdn.net/download/sheziqiong/85979978

基于Python的深度神经网络的中文期刊分类系统相关推荐

  1. python深度神经网络量化_基于Python建立深度神经网络!你学会了嘛?

    原标题:基于Python建立深度神经网络!你学会了嘛? 图1 神经网络构造的例子(符号说明:上标[l]表示与第l层:上标(i)表示第i个例子:下标i表示矢量第i项) 单层神经网络 图2 单层神经网络示 ...

  2. 基于Python的卷积神经网络的猫狗图像识别系统

    目录 基与卷积神经网络模型的猫狗图像识别 1 一. 摘要 2 二. 动机 2 三. 理论和算法理解 2 I.卷积神经网络 2 定义 3 结构 3 应用 5 II.算法实现 5 Part 1 - Dat ...

  3. Keras快速上手:基于Python的深度学习

    Keras快速上手:基于Python的深度学习 谢梁,鲁颖,劳虹岚 著 ISBN:9787121318726 包装:平装 开本:16开 正文语种:中文 出版社: 电子工业出版社 出版时间:2017-0 ...

  4. 从Theano到Lasagne:基于Python的深度学习的框架和库

    从Theano到Lasagne:基于Python的深度学习的框架和库 [日期:2015-08-03] 来源:http://creative-punch.net/  作者:Creative Punch ...

  5. 基于Python的卷积神经网络和特征提取

     基于Python的卷积神经网络和特征提取 发表于2015-08-27 21:39| 4577次阅读| 来源blog.christianperone.com/| 13 条评论| 作者Christi ...

  6. python人脸深度识别_基于Python的深度学习人脸识别方法

    基于 Python 的深度学习人脸识别方法 薛同来 ; 赵冬晖 ; 张华方 ; 郭玉 ; 刘旭春 [期刊名称] <工业控制计算机> [年 ( 卷 ), 期] 2019(032)002 [摘 ...

  7. 基于深度神经网络的图像分类与训练系统(MATLAB GUI版,代码+图文详解)

    摘要:本博客详细介绍了基于深度神经网络的图像分类与训练系统的MATLAB实现代码,包括GUI界面和数据集,可选择模型进行图片分类,支持一键训练神经网络.首先介绍了基于GoogleNet.ResNet进 ...

  8. 人脸识别学习一(Keras: 基于 Python 的深度学习库)

    只是把一些文字部分复制出来方便看,完整还是参考源地址,参考文章https://keras.io/zh/ 写在前面: 第一次接触Keras,用自己的话简单概括一下什么事Keras,(不准确之处欢迎批评指 ...

  9. 【深度学习】基于Pytorch进行深度神经网络计算(一)

    [深度学习]基于Pytorch进行深度神经网络计算(一) 文章目录 1 层和块 2 自定义块 3 顺序块 4 在正向传播函数中执行代码 5 嵌套块 6 参数管理(不重要) 7 参数初始化(重要) 8 ...

  10. 【深度学习】基于Pytorch进行深度神经网络计算(二)

    [深度学习]基于Pytorch进行深度神经网络计算(二) 文章目录 1 延后初始化 2 Pytorch自定义层2.1 不带参数的层2.2 带参数的层 3 基于Pytorch存取文件 4 torch.n ...

最新文章

  1. 系统异常捕捉处理设计文档
  2. LightBus新浪微博客户端开源下载
  3. List集合中的对象根据属性排序
  4. for循环里radio多选_Max里的for循环
  5. javaSE各阶段练习题--流程控制2
  6. 注册表中shell文件不见了_win7系统注册表中的shell文件不小心被删除的解决方法...
  7. 如何判断一个new出来的空对象
  8. vue - 自定义指令
  9. PHP对象注入 PHP Object Injection
  10. C#最简单的NetMeeting
  11. ubuntu20.04【一键脚本安装wps并配置字体】
  12. My Thirty-eighth - 验证二叉树搜索树 - By Nicolas
  13. java 字符串转日历,在Java中将日历字符串转换为日历对象
  14. Linux基础命令实例
  15. python--预测未来子女的身高、计算能量的消耗、为自己的手机充值、将指定的十进制数转换成二进制、八进制、十六进制
  16. VMware虚拟机过检测详细教程,巨全面,小白专享教程
  17. 轻松学Android开发
  18. Overleaf (LaTex) 使用笔记(自用)
  19. Markdown教程【从0到1这一篇就够了】
  20. E6-2019级航类第6次正式上机

热门文章

  1. 【SpringBoot】1、创建第一个SpringBoot项目
  2. 计算机 管理 mmc 注册表,win10注册表编辑器没有mmc怎么办_win10恢复注册表mmc文件夹的方法-win7之家...
  3. Sothink Logo Maker 4.2.4254 中文绿色便携版(LOGO设计工具)
  4. 【贤者之路】Python/c Api 扩展解析
  5. 错过校招_我们在用户测试中容易错过的事情
  6. 贪心算法之田忌赛马(超详细)
  7. my.cnf文件详解
  8. 代理IP的直接转发与隧道转发
  9. 无线网络部署与规划要点及案例分享
  10. CleanMyMac4.12最新版mac系统内存空间清理教程