惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
The Exploit Database - CXSecurity.com
F
Fortinet All Blogs
U
Unit 42
F
Full Disclosure
雷峰网
雷峰网
博客园 - 司徒正美
云风的 BLOG
云风的 BLOG
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
Tailwind CSS Blog
The Cloudflare Blog
Last Week in AI
Last Week in AI
罗磊的独立博客
D
DataBreaches.Net
C
Check Point Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
O
OpenAI News
C
CXSECURITY Database RSS Feed - CXSecurity.com
aimingoo的专栏
aimingoo的专栏
S
Security @ Cisco Blogs
大猫的无限游戏
大猫的无限游戏
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
S
SegmentFault 最新的问题
NISL@THU
NISL@THU
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The Hacker News
The Hacker News
Webroot Blog
Webroot Blog
Security Latest
Security Latest
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Google DeepMind News
Google DeepMind News
酷 壳 – CoolShell
酷 壳 – CoolShell
N
News | PayPal Newsroom
P
Proofpoint News Feed
B
Blog RSS Feed
MongoDB | Blog
MongoDB | Blog
C
Cybersecurity and Infrastructure Security Agency CISA
N
News and Events Feed by Topic
Google Online Security Blog
Google Online Security Blog
H
Help Net Security
Spread Privacy
Spread Privacy
T
Threat Research - Cisco Blogs
GbyAI
GbyAI
I
Intezer
Application and Cybersecurity Blog
Application and Cybersecurity Blog
M
MIT News - Artificial intelligence
Vercel News
Vercel News
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
IT之家
IT之家
MyScale Blog
MyScale Blog
腾讯CDC

博客园 - 沐子馨

Agent Loop:从对话式 AI 到自主智能体的范式跃迁 解锁图数据建模的奥秘 基于 Neo4j 与 Milvus 的图RAG系统搭建指南 解决复杂推理难题:KG-RAG 在大模型中的应用 RAG 评估常用工具简介 RAG系统效果不好?一文看懂如何进行系统评估 写出让 AI “秒懂”的技能Skill 深入理解 RAG 中的格式化生成与函数调用 解锁 RAG 系统中的高级检索与重排序策略 掌握查询重构与智能路由的艺术 告别黑盒:手把手实现一个可解释、可调试的 Text2SQL 代理系统 告别简单向量搜索:RAG 中的高级查询构建与优化策略 深入理解 RAG 中的混合搜索策略 告别基础检索:掌握 RAG 中的句子窗口与递归路由策略 构建多模态检索系统:Milvus 部署、Schema 设计与混合检索实践 向量数据库原理与实战:从核心机制到 FAISS 应用 多模态向量嵌入:从文本到图像的语义统一与 RAG 应用 构建高效 RAG 的基石:深度解析 Embedding 模型原理与优化 All-in-RAG:解锁大模型“开卷考试”的终极能力 AI Agent 是如何思考的?一文读懂推理与决策引擎 终端革命:AI Agent 正在重新定义命令行 给企业装上“AI 大脑”:AgentSpace 如何从“手动检索”跨越到“智能决策”? Agentic 框架快速概览 AI 智能体交互如何带领它走出对话框,从屏幕像素迈向真实物理世界 高级提示词技巧如何带领大模型走出“一本正经胡说八道”的误区? 当 AI 学会“开疆拓土”:探索与发现模式如何从源头打破静态知识的桎梏,在陌生领域催生新洞见? 拒绝 AI “手忙脚乱”:优先级模式如何为智能体打造毫秒级的“任务调度官”? 构建生产级可信 Agent:评估与监控中的自动化审计与闭环优化机制 当 AI 学会“三思后言”:安全护栏如何从源头掐灭偏见、幻觉与恶意攻击? 拒绝“张口就来”:推理技术如何让 AI 像人类一样拆解复杂难题? 当家方知柴米贵:资源感知优化如何让 AI 智能体告别“算力浪费”? 开启多智能体互联时代:A2A 协议与 AI 协作网络的底层逻辑 为智能体装上“实时百科全书”:RAG 如何打破 AI 的知识边界? 构建负责任的AI:人类监督、干预与反馈闭环机制 当工具失效、网络中断:AI智能体的应急与自修复指南 赋予AI“北极星”:如何让智能体自主设定并追踪目标 打破“M×N”集成魔咒:MCP如何重塑AI应用架构 赋予模型“生命力”:大语言模型如何通过学习实现持续适应 赋予模型“长期记忆”:大语言模型的记忆管理机制 AI的“社会性”:深入理解多智能体协作机制 理解AI智能体的规划机制 理解大模型的工具使用 智能体的元认知:反思模式与自我优化机制 智能体并行化模式:提升复杂工作流性能的关键技术 超越线性执行:使用LLM实现智能体路由模式 解构复杂任务:深入理解提示词链(Prompt Chaining) 别再被 AI 术语唬住了!一文理清你需要了解的所有概念 不止是多写几句:谷歌如何用69页白皮书重塑提示工程 Context 工程:如何把正确的上下文喂给 AI 前端如何写出优秀的 AI Agent Skills mac安装python后command not found: pip keep-alive 原理剖析 如何优雅地在 React 中使用TypeScript,看这一篇就够了! react useContext React Context 详细介绍(状态共享、数据传递) 以用户为中心的性能指标【译】 element下拉框远程搜索debounce防抖控制 vue-router打开新窗口 propmise: allSettled()与all()的区别 使用 new Date() 在chrome、安卓和 IOS 中表现不同
[转]长PDF文档的总结与评估策略
沐子馨 · 2026-04-08 · via 博客园 - 沐子馨

大语言模型在另一个传统自然语言处理应用场景中的突破,就是长文档的总结和评估,这也是大语言模型的一个重要应用方向。我们将探讨如何利用大语言模型的强大能力,实现高质量的文档总结,并对总结结果进行全面评估。

新一代大模型出现之前的文档总结

文档总结是一个经典课题。传统的文档总结方法通常基于统计学和信息检索理论,如提取关键词、句子排序等。这些方法虽然简单高效,但在处理长文档、复杂语义时往往力不从心。

老一代的大模型文档总结通常采用两种范式:文本抽取式(Extractive)和摘要生成式(Abstractive)。

  1. 抽取式方法是从原文中选取关键句作为摘要。比如基于 BERT 的文档总结就常常使用这个范式。
  2. 生成式方法则根据对原文的理解,生成新的摘要文本。比如基于初代 GPT、T5、BART 等生成式模型的文档总结就基于这个范式。

下面,我们用一个经典“老”NLP 模型 T5,来做一个论文的摘要总结。论文我们随便选择一个就可以了,这里选择的是 Tiny Llama 这篇论文,先看看它主要说了什么。

image

这篇论文介绍的 TinyLlama 是一个 1.1B 参数的小型语言模型,在约 1 万亿 Token 上预训练了 3 个 Epoch。它采用了 Llama 2 的架构和分词器,并利用了开源社区贡献的各种进展(如 FlashAttention)以提高计算效率。尽管规模相对较小,但 TinyLlama 在一系列下游任务中表现出色,优于具有相似规模的现有开源语言模型。首先,导入 PyPDF2 包,打开论文文件,读取 PDF 文件内容。

# 导入PyPDF2包
import PyPDF2

# 读取PDF文件内容
pdf_path = "99_data\\pdf\\2401.02385-TinyLlama.pdf"
def read_pdf(file_path):
    with open(file_path, 'rb') as file:
        reader = PyPDF2.PdfReader(file)
        text = ""
        for page in reader.pages:
            text += page.extract_text()
    return text

然后,导入 T5 模型和分词器, 定义函数来加载模型和分词器。

# 导入T5模型和分词器
from transformers import T5Tokenizer, T5ForConditionalGeneration

# 定义函数来加载模型和分词器
def load_model(model_name='t5-small'):
    tokenizer = T5Tokenizer.from_pretrained(model_name)
    model = T5ForConditionalGeneration.from_pretrained(model_name)
    return tokenizer, model

最后,就可以通过 T5 模型来做文档总结啦!

# 定义函数进行文本总结
def summarize_text(text, tokenizer, model):
    # 使用T5的前缀来指定任务类型
    text = "summarize: " + text
    
    # 对文本进行编码
    inputs = tokenizer.encode(text, return_tensors="pt", max_length=512, truncation=True)
    
    # 使用模型生成总结
    summary_ids = model.generate(inputs, max_length=150, min_length=40, length_penalty=2.0, num_beams=4, early_stopping=True)
    
    # 解码生成的总结
    summary = tokenizer.decode(summary_ids[0], skip_special_tokens=True)
    
    return summary

# 加载预训练的T5模型
tokenizer, model = load_model('t5-small')

# 对PDF内容进行总结
pdf_summary = summarize_text(pdf_text, tokenizer, model)
print("Generated Summary:", pdf_summary)

# 保存生成的摘要到文件
with open("t5_summary.txt", "w", encoding="utf-8") as file:
    file.write(t5_summary)

程序输出如下:

TinyLlama is a compact 1.1B language model pretrained on around 1 trillion tokens for approximately 3 epochs. despite its relatively small size, it significantly outperforms existing open-source language models with compara-ble sizes.

结果看起来不错,对吗?其实不然。

首先,T5 的总结结果其实更像是论文开头部分的照搬照抄。另外,你在程序中应该注意到 max_length=512 这个参数,其实传统的“大”语言模型,如 BERT、T5,一般情况下,只能够接受 512,最多 1024 个 Token,可不像新一代的模型动不动就可以接受几万、几十万的 Token 作为上下文。

因此,我们所看到的 Summary 结果,只不过是对整个论文第一段话的总结。

对于老一代模型来说,针对文档总结任务对大模型进行微调(Fine-tune),也可以进一步提升它们的摘要质量。微调使模型更加适应特定领域的文本,学习总结的格式和风格。在一些研究中还提出了复杂的 Prompt 设计,引导模型生成满足特定需求的摘要。

当然,现在有了真正的大模型,这种微调也已经是昨日黄花了。

用新一代的大模型做文档总结

ChatGPT 等新一代大语言模型的出现,为文档总结带来了新的突破。这些模型在海量文本数据上进行预训练,学习到了丰富的语言知识和通用表示。它们能够深入理解文本的语义、结构、样式等各个方面,生成连贯、通顺的摘要。

我们现在利用强大的 Claude-3 Opus,来生成真正高效的 PDF 论文总结。

首先,导入 PyPDF2 包,打开论文文件,读取 PDF 文件内容。

然后,导入 anthropic 库,并设置 API 密钥。

from dotenv import load_dotenv
load_dotenv()

import os 
import anthropic
os.environ["ANTHROPIC_API_KEY"] = "<your_api_key>"

接下来,我们构造一个名为 generate_summary 的函数,用于利用 Claude 模型生成研究论文的摘要。这个函数接受一个参数 text,即要总结的论文全文,然后会返回全文的总结。

def generate_summary(text):
    client = anthropic.Anthropic()
    
    system_prompt = "你是一个用于总结研究论文的AI助手。"
    
    messages = [
        {
            "role": "user", 
            "content": [
                {
                    "type": "text",
                    "text": f"""
                    请总结以下研究论文,重点关注其关键发现、方法和结论:
                    
                    {text}
                    
                    请用大约150字提供一个简明扼要的英文摘要。
                    """
                }
            ]
        }
    ]
    
    message = client.messages.create(
        model="claude-3-opus-20240229",
        max_tokens=1000,
        messages=messages,
        system=system_prompt
    )
    
    return message.content[0].text.strip()

我们创建了一个 Anthropic 客户端对象,用于与 Claude 模型进行交互。在系统提示中,我们告诉 Claude 它是一个用于总结研究论文的 AI 助手。

接下来,我们构造了一个消息列表,其中包含一条用户消息,并在消息的内部中通过 {text} 变量嵌入了要总结的论文全文。我们还在消息中提供了一些指示,要求 Claude 关注论文的关键发现、方法和结论,并生成一个大约 150 字的简洁摘要。

client.messages.create 方法会将所构造的消息列表、系统提示以及其他参数传递给 Claude。Claude 会根据这些信息生成论文的摘要,并返回结果。

最后,使用 Claude 生成总结并保存。

# 使用Claude生成总结
claude_summary = generate_summary(pdf_text)
print("Summary:", claude_summary)

# 保存生成的摘要到文件
with open("claude_summary.txt", "w", encoding="utf-8") as file:
    file.write(claude_summary)

运行程序后,得到的总结文字如下:

image

Summary:
TinyLlama is an open-source 1.1B parameter language model pretrained on approximately 1 trillion tokens for 3 epochs. It leverages advances from the open-source community to achieve better computational efficiency. Despite its small size, TinyLlama significantly outperforms existing open-source language models of comparable sizes on various downstream tasks measuring commonsense reasoning and problem-solving capabilities. The authors tracked TinyLlama's performance on benchmarks during pretraining and found that its accuracy generally improves with more compute, surpassing Pythia-1.4B. TinyLlama's pretraining code, intermediate checkpoints, and data processing details have been publicly released. The authors believe TinyLlama's compact size and strong performance make it an attractive platform for researchers to test innovative ideas related to language models. They plan to develop future versions of TinyLlama with enhanced capabilities based on the experience gained from this open research project.

翻译成中文:

TinyLlama 是一个开源的 11 亿参数语言模型,在大约 1 万亿个标记上预训练了 3 个周期。它利用了开源社区的进展来实现更好的计算效率。尽管其规模较小,但 TinyLlama 在衡量常识推理和解决问题能力的各种下游任务上显著优于现有的相似规模的开源语言模型。作者在预训练期间跟踪了 TinyLlama 在基准测试中的表现,发现其准确性通常随着计算量的增加而提高,超过了 Pythia-1.4B。TinyLlama 的预训练代码、中间检查点和数据处理细节已经公开发布。作者认为,TinyLlama 的紧凑尺寸和强大性能使其成为研究人员测试与语言模型相关的创新想法的有吸引力的平台。他们计划根据从这个开放研究项目中获得的经验,开发具有增强功能的 TinyLlama 的未来版本。

这个总结非常非常优秀。它并不是像刚才 T5 模型那样,只是对头几行文字的简单 copy,而是详实地介绍出了 TinyLlama 这篇论文的主要工作、意义和创新点,以及作者的评述及未来计划。

评估文档总结的优劣

不过,口说无凭,我们需要想一些办法来量化这个总结的优质程度。这不仅可以帮助我们了解总结的效果,还可以为进一步优化模型提供依据。

所以,下面我们的目标就是通过不同的方法来量化文档总结的优质程度。

基于真值的评估

在文档总结领域,基于真值的评估是常见的方法。文档总结的真值并不是那么容易获得的,好在对于论文来说,我们可以使用论文摘要作为真值,然后通过计算生成的总结与真值之间的相似度来评估质量。

image

有了真值之后,常用的经典评估指标包括 ROUGE 和 BERTScore。

ROUGE 评估

ROUGE(Recall-Oriented Understudy for Gisting Evaluation)是一组用于自动化评估机器翻译和自动摘要系统性能的指标,要衡量生成摘要与参考摘要之间的重叠情况,特别关注回忆率(Recall)。

ROUGE 主要有三种变体:ROUGE-N、ROUGE-L 和 ROUGE-S,从不同的角度评估摘要的质量。

1. ROUGE-N

ROUGE-N 是基于 N-gram 的匹配来评估生成摘要与参考摘要之间的相似度。N-gram 可以是单个词(unigram)、双词(bigram)、三词(trigram)等。常见的 ROUGE-N 指标包括 ROUGE-1 和 ROUGE-2,分别表示基于 unigram 和 bigram 的匹配情况。

ROUGE-1:计算生成摘要和参考摘要之间的 unigram 匹配。

ROUGE-2:计算生成摘要和参考摘要之间的 bigram 匹配。

ROUGE-N 的计算公式如下:

image

其中,Countmatch(gram) 表示生成摘要中 N-gram 的匹配次数,CountRef(gram) 则表示参考摘要中 N-gram 的总次数。

2. ROUGE-L

ROUGE-L 基于最长公共子序列(Longest Common Subsequence, LCS)来评估生成摘要和参考摘要之间的相似度。通过计算生成摘要和参考摘要之间的最长公共子序列匹配情况,LCS 能够捕捉到全局序列信息,而不仅仅是局部的 N-gram 匹配。

ROUGE-L 的计算公式如下: 

image

因此,ROUGE 评估指标能够从不同的角度评估生成摘要和参考摘要之间的相似度,涵盖了局部 N-gram 匹配(ROUGE-N)、全局序列信息(ROUGE-L)和灵活词对关系(ROUGE-S)。结合这些指标,我们就可以全面衡量生成摘要的质量。

下面是使用 ROUGE 评估生成摘要的示例代码。 

# 读取摘要文件
def read_summary(file_path):
    with open(file_path, 'r', encoding='utf-8') as file:
        return file.read()
t5_summary = read_summary("t5_summary.txt")
claude_summary = read_summary("claude_summary.txt")
ref_summary = read_summary("ref_summary.txt")

from rouge import Rouge

# Rouge评估函数
def get_rouge_scores(text1, text2):
    rouge = Rouge()
    return rouge.get_scores(text1, text2)

# 示例生成摘要和参考摘要
eval_summary = "..." # 把总结结果放进来
ref_summary = "..." 把论文的原始总结放进来

# 计算ROUGE分数
rouge_scores = get_rouge_scores(eval_summary, ref_summary)

# 提取并显示关键的ROUGE指标
for metric, scores in rouge_scores[0].items():
    print(f"{metric} - Precision: {scores['p']}, Recall: {scores['r']}, F1-Score: {scores['f']}")

输出如下:

ROUGE Scores:
             T5 Summary  Claude Summary
Metric
rouge-1 (f)    0.568421        0.421875
rouge-1 (p)    0.843750        0.415385
rouge-1 (r)    0.428571        0.428571
rouge-2 (f)    0.466019        0.178082
rouge-2 (p)    0.727273        0.171053
rouge-2 (r)    0.342857        0.185714
rouge-l (f)    0.568421        0.406250
rouge-l (p)    0.843750        0.400000
rouge-l (r)    0.428571        0.412698

这样,就可以计算生成摘要和参考摘要的 ROUGE 分数,并从精确率(Precision)、召回率(Recall)和 F1 分数(F1-Score)三个方面进行分析。如果仅从 ROUGE 指标看,T5 竟然比 Claude 这种大模型总结得还要好?真的如此吗?我们继续看其他指标。

BERTScore 评估

BERTScore 则是另一种评估方法,它通过计算生成的摘要和参考摘要的 BERT 嵌入表示之间的相似度来评估摘要的质量。

image

相比于 ROUGE,BERTScore 利用了词向量的思想,因此就能够更好地捕捉语义上的相似度。

from bert_score import BERTScorer

# BERTScore评估
scorer = BERTScorer(lang="en")
P1, R1, F1_1 = scorer.score([eval_summary_1], [ref_summary])
print(f"\nSummary 1 BERTScore F1: {F1_1.tolist()[0]}")
print(f"Summary 2 BERTScore F1: {F2_2.tolist()[0]}")

输出如下:

T5 Summary BERTScore F1: 0.9143788814544678
Claude Summary BERTScore F1: 0.9115773439407349

我们得到生成摘要和参考摘要的 BERTScore 分数,以此来衡量它们的语义相似度。从这个指标来看,T5 和大模型总结得分很相似。

使用 Claude 进行评估

除了使用传统的评估指标,我们还可以利用 Claude/GPT-4 这样的新一代大模型来进行更全面的评估。大模型不仅能够生成高质量的文档总结,还能够根据你自己定制的评估标准对总结进行评分。我们可以定义几个关键的评估标准,包括相关性、准确性、简洁性、连贯性、一致性、流畅性等。

每个标准都会有它具体的评分规则,我们这里选择几个。

  • 相关性:评估摘要是否涵盖了原文中最重要和核心的信息。
  • 准确性:评估摘要中的信息是否准确反映了原文的内容,是否存在误导或错误信息。
  • 简洁性:评估摘要是否在简明扼要的基础上传达了主要信息,而不是冗长或重复。

以下是使用 Claude(你可以选择 GPT 或者其他国内大模型,对 Claude 的总结进行交叉评估)进行评估的示例代码。

# Claude评估函数
import anthropic
import re
def get_claude_score(criteria, document, summary, metric_name):
    prompt = f"""
    你将会被提供一段文章和一段摘要。你的任务是根据以下标准对摘要进行评分(1到5分):

    评价标准:
    {criteria}

    示例:
    原文:
    {document}

    摘要:
    {summary}

    请给出{metric_name}的评分(1到5分):"""

    client = anthropic.Anthropic(api_key=os.getenv("ANTHROPIC_API_KEY"))
    response = client.completions.create(
        prompt=prompt,
        stop=["\n"],
        model="claude-v1",
        max_tokens=1000
    )
    result = response["choices"][0]["text"]
    score = int(re.findall(r'\d+', result)[0])
    return score

evaluation_metrics = {
    "相关性": "相关性(1-5) - 摘要是否涵盖了原文中最重要和核心的信息。",
    "准确性": "准确性(1-5) - 摘要中的信息是否准确反映了原文的内容,是否存在误导或错误信息。",
    "简洁性": "简洁性(1-5) - 摘要是否在简明扼要的基础上传达了主要信息,而不是冗长或重复。",
}

summaries = {"T5 Summary": t5_summary, "Claude Summary": claude_summary}

claude_scores = {"Metric": [], "T5 Summary": [], "Claude Summary": []}

for metric, criteria in evaluation_metrics.items():
    claude_scores["Metric"].append(metric)
    for summ_id, summ in summaries.items():
        score = get_claude_score(criteria, ref_summary, summ, metric)
        claude_scores[summ_id].append(score)

import pandas as pd
claude_df = pd.DataFrame(claude_scores).set_index("Metric")
print("\nClaude Evaluation Scores:")
print(claude_df)

Claude 基于对原文和摘要的深度理解,从多个角度对摘要质量做出了判断。

Claude Evaluation Scores:
        T5 Summary  Claude Summary
Metric
相关性              3               5
准确性              5               4
简洁性              4               4

此时,终于,Claude 这种新一代大模型的总结能力,在评估指标上超越了 T5。可见,这种全方位的评估更接近于我们人类的评估水准,这就有助于我们优化摘要模型,生成更高质量的摘要。

以上,就是几种常用的文档总结评估方式。这些评估方法,对其他 NLP 任务,比如机器翻译、句子配对等等,亦有启发。综合利用这些评估方法,我们可以更好地了解文档总结的效果,并进一步优化我们的模型。

总结时刻

今天,我们探讨了如何利用大语言模型实现智能化的文档总结与评估。我介绍了大模型文档总结的理论基础,展示了使用 Claude 生成和评估摘要的实战示例,如果你没有 Claude API,你当然也可以用其他大模型来尝试做相同的工作。可以看到,无论是生成摘要,还是评估摘要,Prompt 设计在引导模型完成特定任务中至关重要。

得益于大模型强大的语言理解和生成能力,我们可以实现高质量的摘要生成,并对摘要进行全面、客观的评估。传统的基于真值的评估方法(如 ROUGE 和 BERTScore)可以提供一定的量化指标,而新一代的大模型(如 Claude)则可以提供更丰富和深入的评估信息。

未来,随着大语言模型的进一步发展,其在文档总结领域的应用将更加广泛和深入。结合知识图谱、多模态等技术,能实现更加智能、个性化的摘要服务。同时,对话式摘要、增量式摘要等新型交互和优化范式值得关注和探索。