从153个视频到一套方法论:我用本地AI复盘论文打假
B站专门做学术论文打假的UP主“耿同学讲故事”,他的风格很上头:一本正经地扒论文里的数据造假证据,配上大量吐槽和段子,把枯燥的学术不端问题讲成了相声。 看多了会发现一个问题:他每期都在讲不同的院长、教授、Nature子刊,但反复用的检测手法其实高度相似。只是每次都换了案例、换了段子包装,不容易一眼看出规律。 于是我起了个念头: 能不能把他全部投稿一次性扒下来,用本地AI帮我把这套隐藏的方法论提炼出来? 整个过程走了三步:下载、转写、总结。除了从B站获取公开视频,后面的转写和模型分析都在本地电脑上跑完,没有调用云端AI接口。 准备数据 本地AI内容提炼流水线 这部分其实不是文章的重点,但它决定了后面分析能不能成立。视频要先完整拿到,语音要先转成可检索的文字,最后模型才有材料可总结。 第一步,批量下载全部投稿 先用一个基于yt-dlp的下载脚本,一次性抓取UP主视频列表页的全部视频。下载了所有的视频,在本地进行视频转音频、音频转文字操作。 耿同学封面墙 这里有两个实际坑。 第一个坑是B站风控。投稿列表页不带浏览器cookie直接访问,会被412拒绝。带上cookie之后,脚本才能正常拿到完整投稿列表。 第二个坑是下载策略。脚本第一次跑的时候,我设置成自动挑选最高画质。结果在正式下载前,yt-dlp会先对整个列表里的每一条视频做一次完整探测,导致跑了很久才真正开始下载。后来改成直接指定画质,跳过这一步,效率提升明显。 后面还有一次补漏。先前下载中断过,有些视频没下完整。这里用了yt-dlp自带的下载记录文件,也就是download archive机制:把已经下载好的视频ID写进记录文件,再次运行时自动跳过已完成的,只补齐缺的部分。 最后,155个投稿里成功拿到153个可用视频文件。 第二步,本地语音转文字 视频到手之后,下一步是把语音内容变成文字稿,方便后续做文本分析。 这一步用的是本地部署的语音识别模型faster-whisper,模型是large-v3,全程跑在自己电脑上,不依赖任何在线转写服务。 153个视频,平均单个模型推理耗时不短,累计跑了接近一整天。 中间出了两个挺有意思的乌龙。 一个是重复启动了两个进程。因为任务本身耗时很长,我没意识到之前已经有一个转写进程在后台跑了大半天,又手动开了一个新的。两个进程同时抢占了将近900%的CPU,电脑发烫严重,用上电风扇降温了。发现后赶紧把多余的那个关掉,只留一个继续跑。 另一个是日志假死。Python脚本把输出重定向到文件时,默认是整块缓冲,不是写一行就刷新一次。这导致我盯着日志文件,以为转写卡在了某一集长达一个多小时。实际上程序早就往前跑了十几个文件,只是日志内容还堆在内存缓冲区里没写盘。 后来不再盯日志,而是看实际产出的txt文件数量,才发现进度一直正常。 这个坑挺值得记一笔:监控长时间任务,不能只看它打印了什么,得看它实际产出了什么。 第三步,用本地模型做内容归纳 153份文字稿到手后,发现这位UP主的内容其实很杂。 除了论文打假,他还聊考研上岸率、读博的精神状态、相亲催婚、科研生活,也有不少直播带货式的科普。我粗筛了一遍,真正逐帧分析论文造假证据的硬核内容,大概40篇左右。 之后没有直接让模型“总结耿同学的观点”。那样很容易变成几句空话,比如“要重视学术诚信”“要加强科研监管”“要提升论文质量”。这些话都对,但没有用。 其实真正想知道的是另一件事: 如果把这些视频当成一个样本库,论文的“假”到底应该从哪些角度分析? 于是就先让本地模型做关键词检索和初步聚类,重点看“造假”“撤稿”“图片重复”“数据造假”“临床”“代写”“重复实验”“原始数据”等词反复出现的位置。然后再人工抽查高频案例,避免模型把普通科普内容也混进论文打假里。 跑完之后,一个很清楚的框架浮出来了。 论文的“假”,不是一个点。它不是只有P图,也不是只有数据编造。真正的问题经常是一条链:图片可疑,数据异常,方法写不清,实验不可重复,结论往外跳,作者回应躲闪,最后学校和期刊再用一句“不规范”把事情盖过去。 得出的结论 有了这批文字稿之后,真正有价值的不是复述每一期视频讲了谁,而是把反复出现的判断动作抽出来。最后我把它整理成10层,从最容易观察的图片问题,一直推到论文背后的生产链和回应方式。 第一层,看图片 这是最直观的一层,也是耿同学视频里最常见的入口。 同一篇论文里,图片重复出现。不同论文里,图片重复出现。图片旋转180度以后还能重合。图片翻转、裁剪、调色以后,背景噪点、组织纹理、细胞形态还能对上。 这类问题最麻烦的地方在于,它不需要你完全懂论文的专业方向。你不一定知道这个信号通路是否成立,也不一定知道这个动物模型是否合理,但你能看出来两张图是不是同一张。 尤其是Western blot、细胞图、组织切片、肿瘤照片这些图,背景噪点和纹理就像指纹。它们一旦对上,就很难用“巧合”解释。 很多作者会把这类问题说成“图片误用”。但“误用”这个词只能解释一次,很难解释一串。如果一个团队的多篇论文、多个项目、多个年份反复出现图片重复,那就不是手滑,更像是一种生产方式。 第二层,看数据 假数据常常败在随机性 图片问题最直观,但数据问题往往更致命。 耿同学的视频里,数据统计类分析是很核心的一块。把论文里的原始数据整理出来,看小数点位数是否有跨行、跨列复制粘贴的痕迹,看某几列之间是否存在固定加减关系,看末位数字的分布是否接近随机。 在没有固定取整规则或仪器偏好的连续测量里,真实数据的末位数字通常不该高度集中在少数几个数字上。如果大量数据都挤在某几个末位,就可以用概率论算出这种巧合发生的概率有多低。 这类分析的杀伤力在于,它不是说“我觉得不像真的”,而是把问题转成一个统计学判断:这些小概率事件不应该同时发生。 耿同学吐槽某些论文时,经常会说“下次用随机数生成器”。这句话听起来像玩笑,但背后是一个严肃判断:很多假数据不是因为太复杂被发现,而是因为编得太粗糙。 真实实验数据通常有噪声。它不会那么听话。 第三层,看常识能不能对上 有些问题不需要复杂统计,常识就能先挡一遍。 比如测量精度是否合理,生物学机制是否说得通,实验动物和实验分组是否匹配,疾病和性别是否匹配,样本来源和结论外推是否匹配。 这类交叉验证看起来很朴素,但很有用。 论文最容易出问题的地方,往往是作者只盯着想要的结论,忘了现实世界还有很多约束。数据可以编,图片可以修,段落可以写得很漂亮,但常识有时候会从边角里露出来。 第四层,看原始材料 论文出问题以后,最关键的不是作者怎么解释,而是作者能不能拿出原始材料。 原始图片在哪里?原始表格在哪里?实验记录在哪里?样本编号在哪里?仪器输出文件在哪里?动物实验和临床研究的伦理审批在哪里? 这些东西如果都能交代清楚,很多争议可以继续往下讨论。比如图片是否确实贴错了,统计方法是否可以修正,结论是否需要收窄。 但如果作者只给解释,不给材料,可信度就会迅速下降。 学术争议不是靠态度解决的。你说“我们没有造假”,这句话本身没有证据价值。真正有价值的是原始数据、实验记录和可以被第三方检查的材料。 第五层,看实验能不能重复 耿同学反复讲过一个意思:重复实验不是万能的,但重复不出来的实验一定要警惕。 这句话放在生命科学领域尤其刺耳。 很多生命科学实验确实复杂。样本来源、细胞状态、动物模型、菌群结构、试剂批次、操作人员都会影响结果。问题是,复杂不能变成免死金牌。 如果一篇论文的方法写得很模糊,关键材料拿不到,实验条件说不清,只有作者自己能做出来,别人一重复就失败,那它至少不应该被当成一个坚实结论。 科学研究当然允许失败,允许不确定,也允许后来被推翻。但如果一篇论文从发表那天起就无法被别人验证,它就更像一次性论文。 第六层,看方法设计有没有先天漏洞 有些论文不一定是直接伪造,但实验设计本身就撑不起结论。 ...