李鬼见李逵——我用翟天临的论文做了分析

简介:

昨天是元宵节,在南京,元宵节一到也意味着这个年过完了,我们也该回到自己的工作岗位上了。都说今年的瓜特别多(葫芦娃的那种),但是过年期间最甜的我想非翟xx的“知网是什么?”莫属了吧。

前段时间,微博上开始不断爆出翟天临学术不端,论文抄袭的消息,以至于牵扯到其导师、院长甚至整个北京电影学院。

我平常不怎么关注娱乐圈,所以刚开始并没有把这件事放在心上,直到网上爆出翟的论文大篇幅抄袭陈坤论文的消息,我才对这位娱乐圈博士的文章起了兴趣。接下来就让我们以一个 coder 的角度来硬核分析下翟的论文吧。

实验环境

工欲善其事,必先利其器,在开始分析之前,我先说明此次分析所处的实验环境,以免出现异常:

  • MacOS 10.14.3
  • Python 3.6.8(Anaconda)
  • Visual Studio Code
  • 使用的包有:

    • pkuseg(分词)
    • matplotlib(绘图)
    • wordcloud(词云)
    • numpy(数学计算)
    • sklearn(机器学习)

数据获取

说实话,起初我以为就算翟不知“知网”为何物,“知网”也该收录翟的文章吧,可我在知网搜了好久也没能找到翟的论文,好在我在今日头条上找到了他的文章,保存在data/zhai.txt中。说到这,还真要感谢翟天临啊,都是因为他,大家才变得这么有学术精神,开始研究起本科硕士博士论文了。

数据清理

上一节我们已经将他的论文保存到一个 txt 中了,所以我们需要先将文章加载到内存中:

# 数据获取(从文件中读取)
def readFile(file_path):
    content = []
    with open(file_path, encoding="utf-8") as f:
        content = f.read()
    return content

我统计了下,除去开头的标题和末尾的致谢,总共 25005 个字。

接下来我们来进行数据清理,在这里我用了pkuseg对内容进行分词处理,同时去掉停用词后输出分词的结果。

所谓停用词就是在语境中没有具体含义的文字,例如这个、那个,你我他,的得地,以及标点符合等等。因为没人在搜索的时候去用这些没意义的停用词搜索,为了使得分词效果更好,我就要把这些停用词过滤掉。
# 数据清理(分词和去掉停用词)
def cleanWord(content):
    # 分词
    seg = pkuseg.pkuseg()
    text = seg.cut(content)

    # 读取停用词
    stopwords = []
    with open("stopwords/哈工大停用词表.txt", encoding="utf-8") as f:
        stopwords = f.read()

    new_text = []
    # 去掉停用词
    for w in text:
        if w not in stopwords:
            new_text.append(w)

    return new_text

执行结果:

这里我提两点:

  1. 为什么分词工具用的是pkuseg而不是jieba

pkuseg是北大推出的一个分词工具,官方地址是:https://github.com/lancopku/pkuseg-python,他的README中说他是目前中文分词工具中效果最好的。

  1. 为什么用哈工大的停用词表?

停用词表的下载地址在:https://github.com/YueYongDev/stopwords。以下是几个常用停用词表的对比:

停用词表 效果较好的文本种类
哈工大停用词表 文献期刊类文本
百度停用词表 新闻报道类文本
四川大学停用词表 邮件文献类文本
参考文献:官琴, 邓三鸿, 王昊. 中文文本聚类常用停用词表对比研究[J]. 数据分析与知识发现, 2006, 1(3).

有兴趣阅读此篇论文的可在公众号:「01 二进制」后台回复:「停用词表对比研究」获取

数据统计

说是数据统计,其实也没什么好统计的,这里简单化一下,就是统计下各个词出现的频率,然后输出词频最高的 15 个词

# 数据整理(统计词频)
def statisticalData(text):
    # 统计每个词的词频
    counter = Counter(text)
    # 输出词频最高的15个单词
    pprint.pprint(counter.most_common(15))

打印的结果:

真的是个不可多得的“好演员”啊,能将角色带入生活,即使肚中无货却仍用自己的表演能力为自己设立一个“学霸”人设,人物形象如此饱满,兴许这就是创作的艺术吧!

文章中说的最多的就是生活、角色、人物、性格这些词,这些正是一个好演员的精神所在,如果我们将这些词做成词云的话,可能效果会更好。

生成词云

词云生成这个部分我采用的是wordcloud库,使用起来非常简单,网上教程也有很多,这里需要提一点的就是:为了防止中文乱码情况的发生,需要配置font_path这个参数。中文字体可以选用系统的,也可以网上找,这里我推荐一个免费的中文字体下载的网址:http://www.lvdoutang.com/zh/0/0/1/1.html

下面是生成词云的代码:

# 数据可视化(生成词云)
def drawWordCloud(text, file_name):
    wl_space_split = " ".join(text)

    # 设置词云背景图
    b_mask = plt.imread('assets/img/bg.jpg')
    # 设置词云字体(若不设置则无法显示中文)
    font_path = 'assets/font/FZZhuoYTJ.ttf'
    # 进行词云的基本设置(背景色,字体路径,背景图片,词间距)
    wc = WordCloud(background_color="white",font_path=font_path, mask=b_mask, margin=5)
    # 生成词云
    wc.generate(wl_space_split)
    # 显示词云
    plt.imshow(wc)
    plt.axis("off")
    plt.show()
    # 将词云图保存到本地
    path = os.getcwd()+'/output/'
    wc.to_file(path+file_name)

真假李逵(文章对比)

分析完了“李鬼”,我们有必要请出他的真身“李逵”兄弟了,同样还是和之前一样的套路,先找到数据,然后分词统计词频,这里就不重复操作了,直接放出词云图。

看到这图是不是觉得和翟的词云图异常相似,那么,这“真假李逵”之间到底有多像呢?接下来我们来计算下两篇文章的相似度吧。

文章相似度比较

TF-IDF

文章相似度的比较有很多种方法,使用的模型也有很多类别,包括TF-IDF,LDA,LSI等,这里方便起见,就只使用 TF-IDF 来进行比较了。

TF-IDF 实际上就是在词频 TF 的基础上再加入 IDF 的信息,IDF 称为逆文档频率,不了解的可以看下阮一峰老师的讲解:https://www.ruanyifeng.com/blog/2013/03/tf-idf.html,里面对 TFIDF 的讲解也是十分透彻的。

Sklearn

scikit-learn 也简称 sklearn, 是机器学习领域当中最知名的 Python 模块之一,官方地址为:https://github.com/scikit-learn/scikit-learn,其包含了很多种机器学习的方式,下面我们借助于 Sklearn 中的模块TfidfVectorizer来计算两篇文章之间的相似度,代码如下:

# 计算文本相似度
def calculateSimilarity(s1, s2):
    def add_space(s):
            return ' '.join(cleanWord(s))

    # 将字中间加入空格
    s1, s2 = add_space(s1), add_space(s2)
    # 转化为TF矩阵
    cv = TfidfVectorizer(tokenizer=lambda s: s.split())
    corpus = [s1, s2]
    vectors = cv.fit_transform(corpus).toarray()
    # 计算TF系数
    return np.dot(vectors[0], vectors[1]) / (norm(vectors[0]) * norm(vectors[1]))
除了 Sklearn,我们还可以使用 gensim调用一些模型进行计算,考虑到文章篇幅,就由读者自己去搜集资料实现吧。

我们将翟的论文和陈的论文分别传入该函数后,输出结果为:

两篇文章的相似度为:
0.7074857881770839

其实这个结果我还是挺意外的,只知道这“李鬼”长得像,却没想到相似度竟然高达 70.7%。当然,作为弟弟,翟的这个事那都不是个事。🙈

相关文章
|
1月前
|
机器学习/深度学习 数据可视化 算法
【2023美赛】C题Wordle预测27页中文论文及Python代码详解
本文提供了2023年美赛C题Wordle预测的27页中文论文及Python代码的详细解读,涵盖了时间序列预测、特征工程、模型选择与评估、聚类分析等多个方面,并提供了相关数据和代码的下载方式。
36 3
|
1月前
|
机器学习/深度学习 传感器 计算机视觉
MotionBert论文解读及详细复现教程
MotionBert提出了一个统一视角来学习人体运动表示,并使用双流时空Transformer(DSTformer)网络作为运动编码器,能够全面、自适应地捕获骨骼关节之间的远程时空关系,实现在多个下游任务上的性能提升。
24 1
MotionBert论文解读及详细复现教程
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
【2024泰迪杯】C 题:竞赛论文的辅助自动评阅 问题分析及Python 代码实现
本文介绍了2024泰迪杯C题“竞赛论文的辅助自动评阅”的问题分析和Python代码实现,涵盖了论文质量特征构造、自动评分模型建立以及如何利用自然语言处理技术和大语言模型进行论文自动评阅的方法。
57 2
【2024泰迪杯】C 题:竞赛论文的辅助自动评阅 问题分析及Python 代码实现
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
【2024泰迪杯】C 题:竞赛论文的辅助自动评阅 26页及31页2篇完整论文及Python 代码实现
【8月更文挑战第9天】本文介绍了2024年泰迪杯C题的解决方案,该题目旨在构建一个基于AI的学术论文自动评审模型,通过使用开源大语言模型和自然语言处理技术,自动化地评阅竞赛论文,并根据论文的完整性、实质性工作、摘要质量和写作水平进行打分,最终输出符合特定分布的综合评分结果。
27 6
|
2月前
ChatGPT提问提示指南PDF下载经典分享推荐书籍,让你做好prompt工程
**掌握ChatGPT提问艺术:本书提供有效互动策略,教你构造精准提示获取专业答案。适用于各层次用户,通过实例解析提示工程,驱动模型生成定制化文本。[PDF下载](https://zhangfeidezhu.com/?p=335)**
86 0
ChatGPT提问提示指南PDF下载经典分享推荐书籍,让你做好prompt工程
|
4月前
|
自然语言处理 数据可视化 算法
【传知代码】私人订制词云图-论文复现
本文介绍了词云图的原理和生成步骤,包括分词、统计词频、去除停用词等,并提供了Python实现示例,利用`wordcloud`和`jieba`库。此外,还分享了技巧,如处理中文乱码、选择背景图、词库转换及自定义文字颜色。词云图能直观展示文本关键信息,适用于数据分析和文本挖掘,但也有其局限性,如无法显示词汇的语法关系。源码和更多资源可在文章附件获取。
【传知代码】私人订制词云图-论文复现
|
4月前
|
机器学习/深度学习 PyTorch 算法框架/工具
还不会使用MIGraphX推理?试试这篇让你快速入门
使用MIGraphX进行推理一般包括下面几个步骤: 1. 创建模型 2. 低精度优化 3. 编译 4. 执行推理,并返回结果
161 2
|
机器学习/深度学习 人工智能 自然语言处理
图与代码不一致,Transformer论文被发现错误,网友:早该被指出1000次
图与代码不一致,Transformer论文被发现错误,网友:早该被指出1000次
119 0
|
人工智能 自然语言处理 前端开发
Prompt工程师指南资料整合篇:Prompt最新前沿论文整理合集、工具和库推荐、数据集整合、推荐阅读内容等,超全面资料
Prompt工程师指南资料整合篇:Prompt最新前沿论文整理合集、工具和库推荐、数据集整合、推荐阅读内容等,超全面资料
|
存储 网络架构
写作工具可以替代笔记应用吗?我用 Ulysses 做了试验 | Matrix 精选
写作工具可以替代笔记应用吗?我用 Ulysses 做了试验 | Matrix 精选
204 0