新技术论坛
搜索
查看: 1422|回复: 1
打印 上一主题 下一主题

[算法分析] 用机器学习判定红楼梦后40回是否曹雪芹所写

[复制链接]
  • TA的每日心情
    开心
    2016-12-9 18:18
  • 签到天数: 85 天

    连续签到: 1 天

    [LV.6]常住居民II

    扫一扫,手机访问本帖
    楼主
    跳转到指定楼层
    发表于 2016-6-27 14:09:21 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
    前几天灯神给我发了一篇文章,讲的是用机器学习的方式来判定红楼梦后40回到底是不是曹雪芹写的。
    我这段时间也在自学Andrew Ng的机器学习课程,还差4周就能完成课程了。
    计算机是一个很强调learning by doing的学科,于是我也来「学以致用」,用刚学到的SVM算法来分析下雪芹老师到底有没有写后面的40回。

    作为一个从没看过红楼梦的人,我的大致思路是这样的:
    • 受到全职猎人里蚁王破解会长无敌招数的启发,每个人的写作都有些小习惯,虽然文章前后说的内容会有差别,但是这些用词的小习惯不容易改变;
    • 用开源的分词工具把全书分词(python的jieba分词),然后统计词频。把出现频次超过100次的词语找出来,人工去掉一些可能因为文章内容造成前后出现不一致的人名、地名;
    • 然后每一章按照2中的词频表,看这一章中出现这些词语的频次;
    • 前80回、后40回各选15回作为机器学习的数据,让机器学习这些章节的用词特点,然后推算其他章节的用词特点是属于前80回呢、还是后40回;
    • 如果机器根据这些用词特征推算的是否属于后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回了!
    更多的机器学习有趣的玩法,我会在学习的过程中慢慢尝试的。

    高级模式
    B Color Image Link Quote Code Smilies

    本版积分规则

    手机版|Archiver|开发者俱乐部 ( ICP/ISP证:辽B-2-4-20110106号 IDC证:辽B-1-2-20070003号 )

    GMT+8, 2024-12-23 04:51 , Processed in 0.134292 second(s), 20 queries .

    X+ Open Developer Network (xodn.com)

    © 2009-2017 沈阳讯网网络科技有限公司

    快速回复 返回顶部 返回列表