美文网首页数据挖掘&机器学习机器学习与模式识别数据可视化
用机器学习判定红楼梦后40回是否曹雪芹所写

用机器学习判定红楼梦后40回是否曹雪芹所写

作者: 840fca401f0f | 来源:发表于2016-06-25 11:53 被阅读1398次

前几天灯神给我发了一篇文章,讲的是用机器学习的方式来判定红楼梦后40回到底是不是曹雪芹写的。

我这段时间也在自学Andrew Ng的机器学习课程,还差4周就能完成课程了。

计算机是一个很强调learning by doing的学科,于是我也来「学以致用」,用刚学到的SVM算法来分析下雪芹老师到底有没有写后面的40回。

作为一个从没看过红楼梦的人,我的大致思路是这样的:

1.受到全职猎人里蚁王破解会长无敌招数的启发,每个人的写作都有些小习惯,虽然文章前后说的内容会有差别,但是这些用词的小习惯不容易改变;

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

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

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

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

好了,下面我尽量少涉及数学跟编程的知识,来一步步解读机器学习是怎么完成这个问题的。

生成全书的词频表


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

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

将120回的词频进行统计

接下来我把每一回出现这278个词的频次统计出来,得到我们给机器学习的样本。这个样本的样子大概是这样的:

比如以B行2列举例,说明在第一回里面「道」这个动词,出现了36次。

通常我们在进行复杂的事情前,喜欢先简化问题,或者给自己一些直观的图表,以便了解问题。机器学习也是一样的。

我尝试着在图上把前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部的用词习惯。

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

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

(红色+为红楼梦前80回/三国前60回,蓝色o红楼梦后40回/三国后60回)

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

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

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

更多的机器学习有趣的玩法,我会在学习的过程中慢慢尝试的。以上。

臭不要脸的自我介绍

我叫黎晨,英文名LC,是我中文拼音的简称,跟LV并无关系;

性别男,遵纪守法,无不良前科。我的很多朋友都说我是「死变态」。所以我经常宅在家里不出去祸害社会。

为此,我向政府申请维护社会公序良俗的奖励,但还没有获得任何回复;

00年开始接触互联网,可是很年轻。在互联网牛市造福浪潮中连小小的牛尾巴都没沾到,不过,我会继续努力的;

我公众号的所有文章均为无版权声明。无须征求本人意见,可以随意修改转载。

如果觉得文章还行,欢迎扫描二维码关注「黎小晨想太多」


相关文章

  • 用机器学习判定红楼梦后40回是否曹雪芹所写

    前几天灯神给我发了一篇文章,讲的是用机器学习的方式来判定红楼梦后40回到底是不是曹雪芹写的。 我这段时间也在自学A...

  • 关于《红楼梦》后二十八回

    红楼梦究竟多少回###### 现存的《红楼梦》是一百二十回,目前所谓的主流红学界认为,约前八十回为曹雪芹所写,后四...

  • 《红楼梦》中关于样本的小故事

    众所周知,《红楼梦》一书共120回,自从胡适作《红楼梦考证》以来,一般都认为前80回为曹雪芹所写,后40回为高鹗所...

  • 为什么袭人希望贾宝玉娶薛宝钗,而不是林黛玉|红楼梦03

    有人觉得高鹗续写的《红楼梦》曲解了曹雪芹的本意,但是对于他所写的“金玉结合”没有太多异议;因为曹雪芹在开篇就表达了...

  • 我读《红楼梦》

    作为四大名著之一的《红楼梦》在我国文学史上有着里程碑的意义。《红楼梦》是清代小说家曹雪芹所写,后八十回由高鹗续写。...

  • 2015年7月书单目录

    01 红楼梦(上) 曹雪芹 02 红楼梦 (下)曹雪芹

  • 红楼美食|荷花莲叶羹

    文/南城以南hong 莲叶羹是一道菜品,主要材料有新鲜的莲蓬。口感鲜美,出自于曹雪芹所写的《红楼梦》中。 《红楼梦...

  • 人物|曹雪芹•十年一梦传千古

    文|零露 一. 我想世人知道曹雪芹都是因为他写了一部流传千古的著作《红楼梦》前80回,后40回是否为曹雪芹所作,至...

  • 机器学习简单的打开方式

    机器学习真的有大家认为的那么难吗? 机器学习是否只能是科学家才可以用吗? 机器学习是否可以用更简单的方式呈现给大众...

  • 《红楼梦》读后感

    《红楼梦》是清代著名小说家曹雪芹所写。 《红楼梦》讲的是一个家族的兴衰,一个家族的大小故事。主人公为贾宝玉,他们的...

网友评论

  • James_God_Son:既然你前面已经统计了278维的词频,我觉得可以参考《数学之美》中提到的基于余弦夹角的新闻分类方法,可能结果会更有说服力。
  • Rich_Zhao:只统计频率么?这样即使不用svm,最最普通的画个百分数表就能看出来了。因为没有非数量特征。
    你这个方法的思路本身太局限,只有词,点状的数据特征没那么明显的。
  • 29b3e3175c1f:无论如何,结论我是赞同的,后四十回非曹雪芹本人所写

本文标题:用机器学习判定红楼梦后40回是否曹雪芹所写

本文链接:https://www.haomeiwen.com/subject/xlkadttx.html