文本摘要


文档摘要

文本摘要 本节摘要:抽取式系统告诉你文档说了什么,生成式系统告诉你作者想说什么。是不同的任务,有不同的坑。一篇 2000 字的新闻塞进你的信息流,你要 120 字抓住它。要么从原文挑三句最重要的(抽取式),要么用自己的话重写(生成式)。两者都叫摘要,却是完全不同的问题。抽取式是排序问题:给每句打分,返回前 句,输出永远合语法(因为逐字照搬),风险是漏掉散布全文的内容。生成式是生成问题:Transformer 据输入产新文本,输出流畅且压缩,却可能幻觉出源里没有的事实,风险是自信地编造。本节两者都搭,连同各自独有的失败模式。 对应原课程:Phase 5 · Lesson 12 · (原英文 )。前置依赖:第 02 节(词袋与 TF-IDF)、第 11 节(机器翻译)。

文本摘要

本节摘要:抽取式系统告诉你文档说了什么,生成式系统告诉你作者想说什么。是不同的任务,有不同的坑。一篇 2000 字的新闻塞进你的信息流,你要 120 字抓住它。要么从原文挑三句最重要的(抽取式),要么用自己的话重写(生成式)。两者都叫摘要,却是完全不同的问题。抽取式是排序问题:给每句打分,返回前 k 句,输出永远合语法(因为逐字照搬),风险是漏掉散布全文的内容。生成式是生成问题:Transformer 据输入产新文本,输出流畅且压缩,却可能幻觉出源里没有的事实,风险是自信地编造。本节两者都搭,连同各自独有的失败模式。

对应原课程:Phase 5 · Lesson 12 · text-summarization(原英文 phases/05-nlp-foundations-to-advanced/12-text-summarization/docs/en.md)。前置依赖:第 02 节(词袋与 TF-IDF)、第 11 节(机器翻译)。

学习目标

阅读完本节,你应当能够:

  1. 区分抽取式与生成式摘要的本质(排序 vs 生成)、各自的失败模式。
  2. 从零实现 TextRank 抽取式摘要,并用 BART 跑生成式。
  3. ROUGE 评估,并说清 2026 年为何要配 BERTScore 与 G-Eval。
  4. 识别生成式摘要的四类幻觉(实体替换、数字漂移、极性翻转、事实编造)及缓解手段。

一、问题与直觉

一篇 2000 字的新闻塞进你的信息流,你要 120 字抓住它。要么从原文挑三句最重要的(抽取式),要么用自己的话重写(生成式)。两者都叫摘要,却是完全不同的问题。

  • 抽取式是排序问题。给每句打分,返回前 k。输出永远合语法,因为是逐字照搬;风险是漏掉散布全文的内容。
  • 生成式是生成问题。Transformer 据输入产新文本,输出流畅且压缩,却可能幻觉出源里没有的事实;风险是自信地编造。

抽取式:把文章当图,节点是句子、边是相似度,跑 PageRank(或类似)按「与全局的连通度」给句子打分,最高分句即摘要。经典实现是 TextRank(Mihalcea 与 Tarau, 2004)。

生成式:在文档-摘要对上微调 Transformer 编码器-解码器(BART、T5、Pegasus)。推理时模型读文档,经交叉注意力逐 token 生成摘要。Pegasus 尤为特别,用间隙句预训练目标,使其几乎不需多少微调就擅长摘要。

评估用 ROUGE(面向召回的要旨评估替身)。ROUGE-1 与 ROUGE-2 打一元、二元重叠,ROUGE-L 打最长公共子序列。越高越好,但 40 ROUGE-L「好」、50「出色」,每篇论文都报这三个,用 rouge-score 包。

二、从零实现

第 1 步:TextRank(抽取式)

import math import re from collections import Counter def sentence_split(text): return re.split(r"(?<=[.!?])\s+", text.strip()) def similarity(s1, s2): w1 = Counter(s1.lower().split()) w2 = Counter(s2.lower().split()) intersection = sum((w1 & w2).values()) denom = math.log(len(w1) + 1) + math.log(len(w2) + 1) if denom == 0: return 0.0 return intersection / denom def textrank(text, top_k=3, damping=0.85, iterations=50, epsilon=1e-4): sentences = sentence_split(text) n = len(sentences) if n <= top_k: return sentences sim = [[0.0] * n for _ in range(n)] for i in range(n): for j in range(n): if i != j: sim[i][j] = similarity(sentences[i], sentences[j]) scores = [1.0] * n for _ in range(iterations): new_scores = [1 - damping] * n for i in range(n): total_out = sum(sim[i]) or 1e-9 for j in range(n): if sim[i][j] > 0: new_scores[j] += damping * sim[i][j] / total_out * scores[i] if max(abs(s - ns) for s, ns in zip(scores, new_scores)) < epsilon: scores = new_scores break scores = new_scores ranked = sorted(range(n), key=lambda k: scores[k], reverse=True)[:top_k] ranked.sort() return [sentences[i] for i in ranked]

两点值得一说。相似度函数用的是对数归一化词重叠,即原版 TextRank 变体;TF-IDF 向量余弦也行。阻尼 0.85 和迭代数是 PageRank 默认。

第 2 步:用 BART 做生成式

from transformers import pipeline summarizer = pipeline("summarization", model="facebook/bart-large-cnn") article = """(long news article text)""" summary = summarizer(article, max_length=120, min_length=60, do_sample=False) print(summary[0]["summary_text"])

BART-large-CNN 在 CNN/DailyMail 语料上微调,开箱产出新闻风格摘要。其他领域(科学论文、对话、法律)用对应的 Pegasus 检查点或在目标数据上微调。

第 3 步:ROUGE 评估

from rouge_score import rouge_scorer scorer = rouge_scorer.RougeScorer(["rouge1", "rouge2", "rougeL"], use_stemmer=True) scores = scorer.score(reference_summary, generated_summary) print({k: round(v.fmeasure, 3) for k, v in scores.items()})

永远开词干还原,否则 "running" 与 "run" 算两个词,ROUGE 少算。

超越 ROUGE(2026 摘要评估)

ROUGE 二十年是摘要主导指标,但 2026 年单用它不够。大规模 NLG 论文元分析显示:

  • BERTScore(上下文嵌入相似度)到 2023 已站稳,如今多数摘要论文与 ROUGE 并报。
  • BARTScore 把评估当生成:用预训练 BART 给定源时分配摘要的似然打分。
  • MoverScore(上下文嵌入上的推土机距离)在 2025 摘要基准登顶,因它比 ROUGE 更好地捕捉语义重叠。
  • FactCC基于 QA 的忠实度在 2021~2023 常见,如今常被 G-Eval(一条 GPT-4 提示链,用思维链打连贯、一致、流畅、相关)取代。
  • G-Eval 及同类 LLM 评判,评分细则设计良好时约 80% 与人一致。

💡 生产建议:ROUGE-L 做遗留对比,BERTScore 做语义重叠,G-Eval 做连贯与事实,在 50~100 个人工标注摘要上校准。

第 4 步:事实性问题

生成式摘要易幻觉。抽取式风险低得多,因为输出逐字照搬源;不过若源句被去语境化、过时或乱序引用,仍可能误导。这是生产系统在合规相关内容上仍偏爱抽取式的最大原因。

要命名的幻觉类型:

  • 实体替换:源说 "John Smith",摘要说 "John Brown"。
  • 数字漂移:源说 "25,000",摘要说 "25 million"。
  • 极性翻转:源说「拒绝了报价」,摘要说「接受了报价」。
  • 事实编造:源没提 CEO,摘要说 CEO 批准了。

可行的评估方法:

  • FactCC:在源句与摘要句的蕴含上训的二分类,预测事实/非事实。
  • 基于 QA 的事实性:向 QA 模型提问答案在源里的问题,若摘要支持不同答案则标记。
  • 实体级 F1:对比源与摘要的命名实体,只出现在摘要里的实体可疑。

对任何事实要紧的面向用户内容(新闻、医学、法律、金融),抽取式是更安全的默认,生成式必须有事实性检查在环。

三、框架对比

2026 年的栈:

用例 推荐
新闻,3~5 句摘要,英语 facebook/bart-large-cnn
科学论文 google/pegasus-pubmed 或调过的 T5
多文档、长文 任何 32k+ 上下文的 LLM,提示
对话摘要 philschmid/bart-large-cnn-samsum
抽取式,构造上低幻觉风险 TextRank 或 sumy 的 LSA / LexRank

算力不受限时,长上下文 LLM 在 2026 常超越专用模型,代价是成本与可复现性——专用模型给出更一致的输出。

四、可复用产物

保存为 outputs/skill-summary-picker.md:

--- name: summary-picker description: Pick extractive or abstractive, named library, factuality check. version: 1.0.0 phase: 5 lesson: 12 tags: [nlp, summarization] --- Given a task (document type, compliance requirement, length, compute budget), output: 1. Approach. Extractive or abstractive. Explain in one sentence why. 2. Starting model / library. Name it. `sumy.TextRankSummarizer`, `facebook/bart-large-cnn`, `google/pegasus-pubmed`, or an LLM prompt. 3. Evaluation plan. ROUGE-1, ROUGE-2, ROUGE-L (use rouge-score with stemming). Plus factuality check if abstractive. 4. One failure mode to probe. Entity swap is the most common in abstractive news summarization; flag samples where source entities do not appear in summary. Refuse abstractive summarization for medical, legal, financial, or regulated content without a factuality gate. Flag input over the model's context window as needing chunked map-reduce summarization (not just truncation).

五、练习

  1. 基础:在 5 篇新闻上跑 TextRank,对比前 3 句与参考摘要,测 ROUGE-L,应在 CNN/DailyMail 风格文章上看到 30~45。
  2. 进阶:实现实体级事实性——从源与摘要(spaCy)抽命名实体,算源实体在摘要中的召回、摘要实体对源的精确。高精低召表示安全但简短,低精表示幻觉实体。
  3. 挑战:在 50 篇 CNN/DailyMail 上对比 BART-large-CNN 与一个 LLM(Claude 或 GPT-4),报 ROUGE-L、事实性(实体 F1)、每条摘要成本,记录各自在哪赢。

本节要点回顾

  1. 抽取式 vs 生成式:排序(逐字照搬、不幻觉但可能漏)vs 生成(流畅压缩、可能编造)。
  2. TextRank 是句相似图上的 PageRank,相似度用对数归一化词重叠。
  3. 生成式微调 BART/T5/Pegasus,Pegasus 的间隙句预训练让它几乎不需微调就擅长。
  4. ROUGE 三件套:ROUGE-1/2 打 n-gram 重叠,ROUGE-L 打最长公共子序列,40 好 50 出色。
  5. 永远开词干还原,否则 "running"/"run" 算两词。
  6. 2026 配三件:ROUGE-L(遗留)、BERTScore(语义)、G-Eval(连贯+事实),50~100 人工标注校准。
  7. 抽取式低幻觉是合规内容默认,生成式必须有事实性检查在环。
  8. 四类幻觉:实体替换、数字漂移、极性翻转、事实编造。
  9. 三种事实评估:FactCC(蕴含二分类)、QA 式、实体级 F1。
  10. 长上下文 LLM 常超越专用模型,代价是成本与可复现性。

下一节,我们让模型回答问题——进入「问答系统」,看抽取式、生成式、RAG 三种范式如何取舍。


发布者: 作者: Rohit Gupta 转发
评论区 (0)
U