给小说自动标注「谁说了这句话」,一个比LLM快1000倍的方法开源了

做 NLP 的人多少都碰过这类问题:一段文本里好几个人物轮流说话,要自动搞清楚每句话是谁说的。文学文本、剧本、多轮会议记录——引文归属(quotation attribution)加上指代消解,始终是个又基础又烦人的环节。准确率上不去,速度跟不上的时候更折磨,尤其面对几十万字的全文,基本只能放弃自动化,回到手工标注的老路。

最近 arXiv 上的一篇论文(2608.02359)专门针对文学文本这个场景,捅了一个突破。Gaspard Michel 等人提出一个叫 joint scoring 的框架——不再一条引文一条引文地孤立判断,而是把整篇小说里的所有引文放进同一个 encoder 的大上下文窗口里做联合打分。结果是在 PDNC 数据集(Project Dialogism Novel Corpus,22 部英文小说、超过 35000 条人工标注引文)上跑到了 94.5% 的整体准确率,是目前公开的最好结果。

速度上的提升同样直接。论文的数据很直接:比现有的标准方法快 20 倍,比基于 LLM 的方法快 1000 倍以上——同一个 A100 GPU 上跑的对比。1000 倍的差距,直接从「跑不动」变成了「随便跑」。对于做数字人文、文学计算或者大规模文本分析的人来说,这个差距决定了方案能不能真正落地。

技术上的思路很直接。传统方法每条引文独立预测,能看到的上文有限;LLM 方法上下文吃得够深但计算成本爆炸。joint scoring 的做法是让 encoder 一次性看到所有引文和它们周围的文本,利用预训练模型里本来就有的长距离指代消解信号来做联合判断。论文里的表征分析也证实了这一点——提升最大的地方正好是那些依赖跨段落指代才能搞定的难例。

团队不只发了论文,还直接开源了一个叫 ModernBookNLP 的工具,是知名 NLP 管线 BookNLP 的一个修改版 fork,核心改动就是替换了引文归属模块。GitHub 代码在论文页面可以直接找到,想试的拉下来就能跑。

这套工作目前只在英文文学文本上验证了,PDNC 里 22 部小说都是英文经典。中文、日文或者其他语言里的情况可能更复杂——尤其是那些没有显式引号标记或者人物称呼方式差异大的文本。但至少在英文文学分析这个场景里,它已经把「能跑」和「好用」之间的距离缩短了一大截。

做文本分析、数字人文或者 NLP 研发的人,这个工具值得花时间跑一跑。尤其是那些角色多、对话密的长篇小说,它大概率能省去不少「这句话到底是谁说的」的猜谜时间。