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

前言

看到用机器学习方法分析红楼梦的文章不少,也有好几种方法,大观是因为纯文字的分析成本低吧,比较适合初学者练手,先转载一两篇文章过来学习。所谓机器学习也是一些数学统计的方法,通过习惯用词来做判断, 也并不是很难。这里判定的维度越多越精准,下面判定仅供参考,仅供娱乐学习!

判定整体思路

主要从以下几个方面可以进行粗略进行判定:

1.写作习惯

每个人写作都有一些与种不同的小习惯,这些小习惯并不会轻易就会发生改变;万分之一的例外情况不考虑!

2.词频统计

就像每次领导人开会一样,媒体或政客们都会去统计领导人讲话中出现的高频词汇,来判断领导人政策的下一步走向!

用开源的分词工具把全书分词,然后统计词频。把出现频次超过100次的词语找出来,人工去掉一些可能因为文章内容造成前后出现不一致的人名、地名;

3.分别统计章节中的词频

然后每一章按照下列表中的词频表,看这一章中出现这些词语的频次;

4.进行推断

前80回、后40回各选15回作为机器学习的数据,让机器学习这些章节的用词特点,然后推算其他章节的用词特点是属于前80回呢、还是后40回;

5.得出结论

如果机器根据这些用词特征推算的是否属于后40回的结果跟实际的结果吻合,那么就说明后40回的写作风格跟前80回有很大不同,很可能是两个人写的;

下面就对上面的判断依据进行一一实现,所谓编程其实就是一个自我假设,自我实现论证,改进的过程!

生成全书的词汇表

这里写图片描述

截词说明

这只是截取了其中一段的词频表。
像宝二爷、黛玉笑这种涉及人物的词语,可能前面戏份多、后面戏份少,所以就不选它们作为用词习惯的特征,而像忽然、故、只要、可不是这种承接性质的碎词,就不太容易会受情节的影响,所以适合选出来作为用词习惯的特征。

处理

最终,我按照出现从多到少排序,选择了278个词作为机器学习的用词习惯。

接下来对整本书120回的词频进行一个有效统计

全书词频统计

接下来我把每一回出现这278个词的频次统计出来,得到我们给机器学习的样本。这个样本的样子大概是这样的:
这里写图片描述
通常我们在进行复杂的事情前,喜欢先简化问题,或者给自己一些直观的图表,以便了解问题。机器学习也是一样的。

我尝试着在图上把前80回和后40回习惯用词出现的频次画出来。以第一回为例,x1坐标代表「道」出现多少次,x2坐标代表「说」出现多少次,x3坐标代表「也」出现多少次……x280坐标代表「则」出现多少次。
这里写图片描述
这个是120个章节的用词习惯从278纬降到3维以后的图,红色+的点是前80回,蓝色o的点是后40回。

结论

从这个图可以直观地看到,确实在用词习惯上有明显的区别。就算我们没有机器学习工具的帮忙,也可以大胆猜测后40回是出自于另外一个人了。

机器学习判定

下面我们用机器学习来看精确一点的判断。
通过课程我大致了解了SVM的原理和简化版问题的算法实现,这里用python的scikit库来帮助我来完成这个预测。

算法的步骤很简单,前80回、后40回各选15个来喂给机器学习它们的特点,然后把剩下的章节输入给机器,问它们属于前80还是后40。
这里写图片描述

结论

看out[44]的结果,代表了机器预测这120回的用词习惯到底属不属于后40回(0为不属于,1为属于)。

机器在学习以后告诉我,如果我把随便一章的用词习惯告诉它、但不告诉它到底是前80回还是后40回,那么机器有95%的把握能猜出它是不是后40回。

至此,我们可以很有信心地判断它们的写作风格不同。

情节不同会造成用词习惯多大的差别?

好吧,那我再来做一个旁证。我把另外一部四大名著「三国演义」拿来分析,看看上部跟下部的用词习惯会不会有比较明显的差别。
这里写图片描述

结论

这个是三国演义的用词习惯缩到三维以后的图,红色+代表前60部的用词习惯,蓝色o代表后60部的用词习惯。

你可能会说,虽然中间交叉的地方比较多,但是还是可以看出来是有区分的。

可如果你比对一下跟红楼梦的图,你就会发现红楼梦的差别会明显得多。
这里写图片描述

大结论

最后,用机器学习的方式来说,如果我把三国演义随便一章的用词习惯告诉它、但不告诉它到底是前60回还是后60回,那么机器有7成的把握猜对,这个准确度已经远远低于红楼梦的95%的预测水平。

所以,我们用「三国演义」这个旁证来分析,即便是因为情节需要导致的用词习惯差别也不应该这么大。

所以,我们就更有信心说曹老先生没有写后40回了。


转载参考

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值