流传到今天的《红楼梦》共有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的方法。


运行程序后,在测试集上得到了如下的验证结果:

Precision Recal F1-score Support
0 0.97 0.88 0.92 34
1 0.94 0.98 0.96 62
Avg 0.95 0.95 0.95 96

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

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

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

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

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

小结

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

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

  1. 《红楼梦》后四十回真假辨析——数据挖掘之关联规则挖掘

    前言 很多人都听说过<红楼梦>的后四十回并非曹雪芹所著.本文就是用关联规则挖掘的方法,验证红楼梦后四十回与前八十回之间的用词差异. 基本概念定义 关联:自然界中某种事物发生时,其他事物也会 ...

  2. python红楼梦作者_用 Python 分析《红楼梦》,后四十回是曹雪芹所写吗?(开源)...

    原标题:用 Python 分析<红楼梦>,后四十回是曹雪芹所写吗?(开源)

  3. python词频统计之红楼梦_用 Python 分析《红楼梦》,后四十回是曹雪芹所写

    用 Python 分析<红楼梦>,后四十回是曹雪芹所写 2020年11月04日 16:03:11    作者:九九文章网 处理后的效果是这个样子: #甄士隐梦幻识通灵#贾雨村风尘怀闺秀#此 ...

  4. 用人工智能判断红楼梦后40回是否是曹雪芹写的

    本博文主要是用机器学习的方法判断红楼梦后四十回是不是曹雪芹写的 开发语言: Python3.6 开发工具: numpy,matplatlib,sklearn 相关算法: SVM 先放上预测结果,再慢慢 ...

  5. python分析红楼梦中人物形象_红楼梦中四个人物形象分析

    1 贾宝玉人物分析 通过认真品读石头记, 我认为把贾宝玉作以上评价是不客观. 不合实际的, 是有悖于曹雪芹 本意的. 在我看来, 贾宝玉是一个充满爱心的, 敢于向森严的封建等级制度挑战的革命英雄, 这 ...

  6. 谈谈红楼梦(第44回)

    今天来谈谈红楼梦的第44回.第44回是第43回的延续,还是借给王熙凤过生日来延续着整个故事情节.然而第44回却刻画了几个经典的画面,大家从本回题目就可以看出:<变生不测凤姐泼醋 喜出望外平儿理妆 ...

  7. [机器学习]---如何用机器学习来判定红楼梦后40回是否曹雪芹所写

    前言 看到用机器学习方法分析红楼梦的文章不少,也有好几种方法,大观是因为纯文字的分析成本低吧,比较适合初学者练手,先转载一两篇文章过来学习.所谓机器学习也是一些数学统计的方法,通过习惯用词来做判断, ...

  8. 写给四十岁女人的箴言,写给四十岁男人的忠告

    1.四十岁的女人,子女尚未长大,老公已经开花.这是一个让女人最焦灼.困惑的年龄,也是女人一生中最敏感.关键的过渡.要开始修心养性,要做到语调平缓.目光柔和.神态优雅.举止从容. 2.四十岁的女人,在事 ...

  9. [机器学习]如何用机器学习来判定红楼梦后40回是否曹雪芹所写

    前言 今天在涉机器学习相关知识时,看到黎晨这篇文章,觉得蛮有意思的,拿来这里介绍大家.这里判定的维度越多越精准,下面判定仅供参考,仅供娱乐学习! #判定整体思路 主要从以下几个方面可以进行粗略进行判定 ...

最新文章

  1. CloudCC: 智能CRM究竟能否成为下一个行业风口?
  2. Eight Machine Learning JavaScript Frameworks to Explore
  3. uni-app 微信小程序使用 web-view 预览PDF
  4. WPAD原理介绍暨故障排查:ISA2006系列之三
  5. sap打勾选项记录_记录意外的开关选项
  6. LeetCode 1730. 获取食物的最短路径(BFS)
  7. iOS-国家代码选择功能github开源分享
  8. 获取数据库值,再在其值上做修改
  9. 【数据结构的魅力】008.图
  10. 数据分析数据挖掘(三)
  11. 日常的SQL 语句使用
  12. 优化配置ISA2006淹没缓解
  13. 【机器学习】特征工程的最佳实践
  14. python——设计一个简单的购房商贷月供计算器
  15. github创建仓库以及上传项目到github
  16. STEP2——《数据分析:企业的贤内助》重点摘要笔记(二)——数据获取资源...
  17. 王者荣耀 兵线刷新时间计数器 || 程咬金 水晶断兵线时间
  18. 最新微信红包封面+抽奖小程序/小程序开源源码
  19. 学习笔记(2):A110测试-测试课程申请1888
  20. vue2-element,vue3-element-plus 的列表翻页的序号

热门文章

  1. JavaScript的DOM知识点总结
  2. C语言continue用法
  3. Java进阶——注解
  4. 域名访问Winmail邮件服务器
  5. 浅谈ALM与PLM区别
  6. Vue 2 项目和插件使用
  7. 谈谈科研论文的追踪、管理和阅读
  8. java 打印 日历 详细 注解_java 打印日历
  9. 浅析25/50/100GE高速网络损伤仪的技术诉求
  10. 【基础知识】~ FIFO