[机器学习] --- 红楼梦后四十回到底是谁写的?机器学习分析法

流传到今天的《红楼梦》共有120回,很多人认为是曹雪芹写了前八十回,后四十回是高鹗续写。后来随着新材料的发现,红学界经过慎重考察,认为后四十回并不是高鹗所写,高鹗和程伟元只是整理出版了《红楼梦》。这究竟是怎么回事?曹雪芹到底有没有写完《红楼梦》?今天小七试试从机器学习的角度破解这个悬案。

原理
  1. 每个人的写作都有些小习惯,虽然文章前后说的内容会有差别,但是这些用词的小习惯不容易改变;

  2. 将红楼梦120回通过统计方法转换为向量,并打上是否为前八十回的标签,之后从中抽取一小部分作为训练集,剩下大部分为测试集;

  3. 训练集送入分类算法进行学习,然后用此算法放在测试集上检验;

  4. 如果精度较高则表明前八十回和后四十回的写作风格的确有所不同,那么就说明很可能是两个人写的。

本文选择了“之”、“其”、“亦”等五十多个文言虚词,加上红楼梦中在所有120回中均有出现的部分词语共同组成特征值,这样算下来一共有一百余个词,采用这些词的出现频率来作为特征,最大程度地排除了情节的影响,某种程度上体现了写作者的写作风格。
选择了常用的SVM算法,用的语言是Python 3.5。

具体操作分成四步进行:

一、引入模块

开头部分没什么过多可以说的,就是引入需要的模块,以scikit-learn的内容为主。HC这个模块里面是自己写的一些常用函数。
这里写图片描述

二、向量化

首先是读取红楼梦的文本,这个文本是在网上抓取的一个无脂批的红楼梦120回版本,经过了一定预处理然后保存下来的文件。

之后调用了张华平博士开发的NLPIR汉语分词系统,将所有文本进行分词,然后收集成一个词典。

下一步,将每一回均出现的词加上五十余个文言虚词合并起来,作为特征值。程序运行结果显示最后作为特征值的词有138个。

将文本向量化的时候使用了最简单粗暴的词频统计方法,一开始也试过tf-idf等方法将文本向量化,但是运行之后发现在本次应用里其结果还没有简单的词频方法好。
这里写图片描述

三、分类算法

将120回随机分成了两部分,比例是0.8,也就是训练集占20%,24回,剩下的96回作为测试集。由于是文本分类任务,就直接把SVM的核定为线性核,然后用gridsearch搜索一下参数C,得到一个最优化的参数。最后在测试集上验证算法。

这里写图片描述

四、可视化

为了有个直观一些的印象,将138维的文本向量压缩成2维并画出来,降维过程采用的是PCA的方法。

这里写图片描述
运行程序后,在测试集上得到了如下的验证结果:

PrecisionRecalF1-scoreSupport
00.970.880.9234
10.940.980.9662
Avg0.950.950.9596

在验证集上得到了0.95的平均f1值,效果还是不错的。这也可以表明,前八十回和后四十回至少在写作用词习惯上是有所区别的,使用算法可以很清楚地区分开。光看f1值有些抽象,可以考虑将高维的文本向量降维,然后画出来,虽然会损失很多信息,但是也可能有一些直观的东西呈现出来。

将138维向量压缩到2维之后得到的图像如下:

这里写图片描述

其中蓝色星形为前八十回,红色十字为后四十回。可以看到,虽然经过了从138维到2维的剧烈压缩,损失了大量信息,但是仍然可以发现前八十回和后四十回没完全重合,分布有所区别。

依照如上方式,如果将红楼梦分为三部分画出来,可以得到:

这里写图片描述

其中绿色圆形为前四十回,蓝色星形为四十一至八十回,红色十字为后四十回。同理,可以发现前四十回与四十一至八十回分布基本上重合,也就是前八十回内部是比较均匀和相似的,而后四十回则是另一种分布。

小结

本文用机器学习的方法选取了一个很小的方面来对红楼梦前八十回和后四十回的区别做了些探究,算法并不复杂,结果还是比较明显。由于用词风格上存在明显差异,我们有理由相信,《红楼梦》后四十回,极有可能是他人假托曹雪芹之名的伪作!

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
本文通过对文本人物关系、文本结构分层、作者行文风格的分析来分析中文文本。 针对问题一,我们运用聚类分析和层次分析建立模型从物理结构与逻辑结构两方面来分析文本,我们提取文本中和文本标题中的人名作为特征项,用matlab编程分别统计每个人名在各个段落中的频数。通过运用主成分分析法对文本进行的分析我们得出自变量与常数项几乎不相关,因此不需要采取主成分回归分析。通过系统聚类分析,我们得到了聚类图,从中得出了主演人物之间的关系。通过层次划分,我们将样本一划分为两层,样本二划分为两层,样本三划分为两层。最后通过matlab编程统计样本中虚词的频数,并且分别对样本中虚词总体和各个虚词进行统计,运用计算风格学理论,我们得出前八十回与后四十回作者的行文风格存在差异。 针对问题二,我们对聚类分析、层次划分、行文风格进行了检验。对于聚类分析的结果,我们与从对文本概述的文学概括分析得到的人物关系进行比较检验,验证了聚类分析结果是可靠性。对于层次分析,我们通过用Excel对数据做出折线图,对图形进行分析,得出与用层次分析算法得出的相同的人物关系结论。 针对问题三,我们计算了各个样本中主要人物的比重,做出了折线图,从图中我们得出了文本结构一致性的结论,体现了三个样本的相同性。通过计算同一个人物在不同样本中的频数(以黛玉为例),我们得出各个样本由于主题思想的不同主要人物也有差异。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值