用机器学习鉴定《鬼吹灯 1-4》是不是天下霸唱所写

    xiaoxiao2021-04-18  232

    [1] 引子

    鬼吹灯是一本我很喜欢的网络小说,它帮助我度过无数个空虚寂寞孤独冷的夜晚。不但文字看了一遍,后来被青雪故事出了有声书以后我还听了一遍。

    按照作者描述,鬼吹灯一共出了 8 本,写作时间是 06 年 2 月到 08 年 2 月。虽然我们都知道一个系列开头精彩、后面烂尾的可能性是极大的,可鬼吹灯前四部跟后四部的差距也太大了吧。

    鬼吹灯 1(前四部)的发生在知青大时代中。那是一个蔑视一切牛鬼蛇神的时代,而各种诡异的神秘事件又发生在军队中,最不信邪的一帮人遇到了邪乎事,到底怎么办?

    连我老妈读了以后,也问我「粽子」到底有没有(作者说这个完全是他创造的名词啦)。而鬼吹灯后四本的时候,整个风格就变掉了。于是就有一堆网友质疑一个没经历过知青的年轻人怎么写得如此生动,后面又出来说前四部其实是一个知青老教师写的。

    对于写作「抄袭」这事,似乎有一种叫做「文体学」的研究来解决。它的思路是一个人的写作内容会经常 改变,但不经意间养成的小习惯是不太会变的。

    这个不经意的小习惯,就是对于副词、助词、介词的使用。

    我们只要分析天下霸唱在副词、助词、介词使用的特点,就可以找到鬼吹灯前后四部是不是一个人写的了。这件事恰好是机器学习擅长的。

    [2] 工作流

    对于这种比较复杂的工作,实现设定一个工作流有助于自己在陷进去解决细节的时候,不至于迷失了最终解决问题的方向。

    我的工作流是这样的:

    收集鬼吹灯的 txt 版本,作为机器学习的基础素材;

    选取汉语词典收录的常见助词、副词、介词,作为特征词;

    由于这次找到的特征词都是单字,我就不用分词,直接算天下霸唱文章出现这些单字的频次;

    计算每 N 万字的鬼吹灯片段出现特征字的次数,作为样本 x[i](经过几次试验,N 选为 1 万字);

    将样本 x[i] 用 PCA 方法降到二维画图,直观感受自己的假设到底合不合理,调整 N 万字的大小和特征词的选择(降维仅用于画图,不参与模型预测);

    将 x[i] 标准化,减少异常值;

    随机选 70% 的数据进行机器学习建模(用 LogisticRegression 方法);

    用剩下的 30% 数据进行预测,看准确性。

    好了,下面正式开始。

    [3] 选取特征词

    一开始我认为老知青用字的广度可能没有现代人这么多。于是我用过最常见的 500 个汉字、2500 个汉字、次常用的 1000 个汉字来做特征,降维后画出来的图效果并不好。说明大家的用词广度上没有太大区别。

    后来分别用了常用助词、介词、副词降维来作图,区分读已经比较高了。考虑到这点数据量处理的性能不是问题,我就将助词 + 介词 + 副词总共 655 个特征一起使用了。

    乃乌乍了一万无不专业东且世两习也乱举公共其具勿匆决况净历分初刚划列则别刬剩兀允光先兜亏互亘亟匪匿阳阴阿除陡险都隐兹兼几凡即却再罔力加务动劣勤从会...(总共 655 个字)... 比照较方爿暨拿替望朝爰直由率被用繇齐至管自起趁践跟

    [4] 计算词频

    接下来是比较磨人的分块、统计词频、标准化工作。这块是体力活,写代码熟练的人就很快。像我这种很久没写,然后边查用法边试验的人,就得花上一段时间处理数据了。

    据一些前辈反馈,数据的清洗、处理、标准化在现实工作中其实占用了大量的时间精力,最后 bingo 的那一下拟合其实并没花多久。

    前戏长,高潮短。世间很多事情道理都是相通的。

    [5] PCA 降维画图

    将数据降到 2 维以后,用散点图画出来鬼吹灯 1-4(性感蓝)和鬼吹灯 5-8(鸡屎黄),在副词、介词、助词的使用习惯中是怎样的。

    虽然降维损失了大量的信息,但是可以看到前 4 部跟后 4 部是有比较明显区分的。

    特别提醒的是:菱形◆图示的点是第五部作品「黄皮子坟」。这部作品用词特征似乎是由一个习惯转到另一个习惯的过渡期。

    这个猜测在后面的模型调整中会用到,现在先不展开。

    [6] 机器学习 & 结果分析

    随机挑选 70% 的数据进行机器学习,然后用 30% 的数据来检查我们的结果。

    然后我们把预测的结果打印出来,看看到底是怎样的结果:

    我把数据按照统计人习惯的方式整理一下,方便阅读:

    用通俗一点的语言来解读,就是你随便给我一段鬼吹灯的片段,这个被训练过后的机器有 80% 的把握能判断出来这个片段是属于前 4 部还是后 4 部的。厉害了吧。

    这个结果其实已经能说明鬼吹灯前 4 部和后 4 部的写作特征上发生了明显变化,按照文体学的理论,不大可能是一个人了。

    但是我们还可以再进一步。还记得我们在看散点图的时候看到鬼吹灯第五部「黄皮子坟」的写作特征其实更像前四部么?

    如果我们把「黄皮子坟」归类到前 4 部进行机器学习的训练,会发生怎样的事情呢?

    [7] 将黄皮子坟调整后的建模结果

    「黄皮子坟」划归前 4 部的散点图,可以看到黄蓝的界限更明显。

    「黄皮子坟」归到前四部以后,有一个非常显著的结果出现:如果你把前 5 部的一个片段随机给到机器,然后让机器去猜它到底是前 5 部还是后 3 部,机器 100% 地猜对了!

    用统计学的指标来看,机器已经非常确信地判断鬼吹灯的写作风格发生了显著变化。

    天下霸唱的鬼吹灯 1-4 甚至 5 的很大一部分,应该是另外一个人所做了。

    可是有人会说,你不给人家因为文章内容需要所以变了习惯啊?

    助词、介词、副词的使用习惯是比较难改变的,况且天下霸唱自己说这 8 本书是在 2 年写完的。习惯在短时间内就更难改了;

    我们拿天下霸唱写的另外一部长篇小说《谜踪之国》来看看它的写作特征图,你就明白习惯其实并没有多少变化。

    谜踪之国为红色,按照相同方式处理以后,绿黄之间有一定的交叉,但是跟蓝样本的界线非常明显。(如果你是红绿色盲的话,也许会不太容易分辨)

    [8] 总结

    至此,机器学习的结果已经给了我们很强的「旁证」,告诉我们鬼吹灯前 4 部跟后 4 部的作者不太可能是一个人。

    要不就是前 4 部是天下霸唱写,后面的作品是出了名以后找人代笔。要不就是前面是那个新闻老知青写的、天下霸唱润色,后面的作品才是霸唱本人的真迹。

    不管怎样,总算完成了这次工作。吁,长吸一口气,结束。

    本文作者:AI研习社 本文转自雷锋网禁止二次转载, 原文链接

    最新回复(0)