bert-extractive-summarizer
bert-extractive-summarizer 是一个基于 BERT 的开源文本摘要工具,能自动从长篇文章中提取出最具代表性的句子,生成简洁的摘要。它解决了人工阅读耗时、信息过载的问题,特别适合需要快速把握文本核心内容的场景,比如新闻摘要、会议纪要或论文速读。
这款工具主要面向开发者和研究人员,只需几行 Python 代码即可集成到项目中。它利用 Hugging Face 的预训练模型对句子进行语义嵌入,再通过聚类算法找出最接近簇中心的句子作为摘要。值得一提的是,它还支持共指消解(coreference resolution),能自动补全文本中指代不清的代词(如“他”“它”),让摘要更连贯易懂。此外,用户可灵活选择使用标准 BERT、DistilBERT 或 Sentence-BERT 模型,并指定摘要长度(按句子数或比例)。如果系统配有 GPU,还会自动启用 CUDA 加速,提升处理效率。
使用场景
某医疗科技公司的产品团队每周需处理数十份来自医院的临床试验反馈报告,每份报告长达5–10页,内容包含大量专业术语和重复描述,人工提炼关键信息耗时且易遗漏重点。
没有 bert-extractive-summarizer 时
- 团队成员需逐字阅读整份报告,平均耗时30分钟以上才能提取出核心结论。
- 手动摘录容易受主观判断影响,不同人员总结的重点不一致,影响后续分析一致性。
- 面对突发紧急需求(如监管问询),无法快速定位多份文档中的共性问题。
- 使用传统关键词提取或规则摘要方法,无法理解上下文语义,常截取不完整或脱离原意的句子。
- 报告中频繁出现代词(如“该患者”“其症状”),缺乏指代消解导致摘要可读性差。
使用 bert-extractive-summarizer 后
- 通过几行代码即可自动从长文本中抽取最具代表性的句子,单份报告摘要生成仅需10秒。
- 基于BERT的语义理解能力,确保提取内容忠实反映原文核心观点,不同文档间摘要风格统一。
- 支持按比例(如ratio=0.15)或固定句数(num_sentences=4)灵活控制摘要长度,适配不同汇报场景。
- 内置coreference功能自动解析代词指代关系,使摘要语句更连贯、易于理解。
- 可集成到内部文档处理流水线中,实现批量自动化摘要,大幅提升响应效率。
bert-extractive-summarizer 将冗长专业的临床文本转化为精准、可读的要点摘要,让团队从繁琐阅读中解放,聚焦高价值决策。
运行环境要求
- Linux
- macOS
- Windows
- 非必需,但若使用 GPU 需为 NVIDIA 显卡并支持 CUDA
- README 中未说明具体显存大小和 CUDA 版本要求
未说明

快速开始
Bert Extractive Summarizer(BERT 抽取式摘要器)
本仓库是 lecture-summarizer 仓库的通用化版本。该工具利用 HuggingFace 的 PyTorch transformers 库执行抽取式摘要(extractive summarization)。其工作原理是:首先对句子进行嵌入(embedding),然后运行聚类算法,找出距离聚类中心最近的句子。此外,该库还使用了共指消解(coreference)技术,借助 https://github.com/huggingface/neuralcoref 库来解析摘要中需要更多上下文信息的词语。neuralcoref 库的“贪婪程度”(greedyness)可在 CoreferenceHandler 类中调整。
从 bert-extractive-summarizer 的最新版本开始,默认情况下,如果系统中存在 GPU,则会自动使用 CUDA。
论文:https://arxiv.org/abs/1906.04165
在线演示:
目录
安装
pip install bert-extractive-summarizer
示例
简单示例
from summarizer import Summarizer
body = 'Text body that you want to summarize with BERT'
body2 = 'Something else you want to summarize with BERT'
model = Summarizer()
model(body)
model(body2)
指定句子数量
句子数量可以以比例(ratio)或整数(num_sentences)形式指定。示例如下:
from summarizer import Summarizer
body = 'Text body that you want to summarize with BERT'
model = Summarizer()
result = model(body, ratio=0.2) # 使用比例指定
result = model(body, num_sentences=3) # 返回 3 个句子
使用多个隐藏层作为嵌入输出
你也可以将多个隐藏层的嵌入向量拼接(concat)起来用于聚类。简单示例如下:
from summarizer import Summarizer
body = 'Text body that you want to summarize with BERT'
model = Summarizer('distilbert-base-uncased', hidden=[-1,-2], hidden_concat=True)
result = model(body, num_sentences=3)
使用 SBert
在最新版本中,你可以将 Sentence-BERT(SBert)与 bert-extractive-summarizer 结合使用。该方法基于论文:https://arxiv.org/abs/1908.10084,以及库:https://www.sbert.net/。首先安装 SBERT:
pip install -U sentence-transformers
然后使用如下简单示例:
from summarizer.sbert import SBertSummarizer
body = 'Text body that you want to summarize with BERT'
model = SBertSummarizer('paraphrase-MiniLM-L6-v2')
result = model(body, num_sentences=3)
值得注意的是,主 Summarizer 类支持的所有功能,SBert 同样支持。
获取嵌入向量
你也可以获取摘要结果对应的嵌入向量。示例如下:
from summarizer import Summarizer
body = 'Text body that you want to summarize with BERT'
model = Summarizer()
result = model.run_embeddings(body, ratio=0.2) # 使用比例指定
result = model.run_embeddings(body, num_sentences=3) # 返回形状为 (3, N) 的嵌入 numpy 矩阵
result = model.run_embeddings(body, num_sentences=3, aggregate='mean') # 返回嵌入向量的均值聚合结果
使用共指消解
首先确保已安装 neuralcoref 和 spacy。注意:neuralcoref 不兼容 spacy > 0.2.1 版本。
pip install spacy
pip install transformers # > 4.0.0
pip install neuralcoref
python -m spacy download en_core_web_md
然后按如下方式使用共指消解:
from summarizer import Summarizer
from summarizer.text_processors.coreference_handler import CoreferenceHandler
handler = CoreferenceHandler(greedyness=.4)
# 共指消解的工作方式示例:
# >>>handler.process('''My sister has a dog. She loves him.''', min_length=2)
# ['My sister has a dog.', 'My sister loves a dog.']
body = 'Text body that you want to summarize with BERT'
body2 = 'Something else you want to summarize with BERT'
model = Summarizer(sentence_handler=handler)
model(body)
model(body2)
自定义模型示例
from transformers import *
# 通过 Transformers 加载模型、配置和分词器
custom_config = AutoConfig.from_pretrained('allenai/scibert_scivocab_uncased')
custom_config.output_hidden_states=True
custom_tokenizer = AutoTokenizer.from_pretrained('allenai/scibert_scivocab_uncased')
custom_model = AutoModel.from_pretrained('allenai/scibert_scivocab_uncased', config=custom_config)
from summarizer import Summarizer
body = 'Text body that you want to summarize with BERT'
body2 = 'Something else you want to summarize with BERT'
model = Summarizer(custom_model=custom_model, custom_tokenizer=custom_tokenizer)
model(body)
model(body2)
大型示例
from summarizer import Summarizer
body = '''
克莱斯勒大厦(The Chrysler Building)是纽约著名的装饰艺术风格(art deco)摩天大楼,此次将以远低于此前售价的一小部分价格出售。
据熟悉该交易的消息人士透露,这笔交易最初由《The Real Deal》报道,成交价为1.5亿美元。
2008年,阿布扎比投资基金 Mubadala 以8亿美元收购了该大厦90%的股份。
房地产公司 Tishman Speyer 持有剩余的10%。
买方是纽约房地产公司 RFR Holding。
Tishman 和 RFR 的官员尚未立即回应置评请求。
目前尚不清楚交易何时完成。
该大厦在两个月前公开挂牌出售,很快就完成了交易。
此次出售由 CBRE Group 负责处理。
之所以愿意以如此巨大的亏损出售该大厦,是因为业主需向纽约库伯联盟学院(Cooper Union)支付地皮租金,而租金正在飙升。
租金从去年的775万美元上涨到今年的3250万美元,并将在2028年达到4100万美元。
与此同时,大厦本身的租金涨幅却远远不及这一水平。
尽管该大厦是纽约天际线中标志性的地标建筑,但它正面临更新的办公大楼的竞争——这些新楼拥有大面积的落地窗和各种现代化设施。
然而,即使从未去过纽约的人,也大多知道这座大厦。
它以其三角形拱顶窗(融入风格化的塔冠设计)以及顶部附近独特的鹰形滴水嘴兽(gargoyles)而闻名。
该大厦曾多次在电影中显著亮相,包括《黑衣人3》、《蜘蛛侠》、《世界末日》、《关于史蒂夫的一切》和《独立日》。
上一次出售发生在2008年金融危机爆发前夕,随后房地产价格暴跌。
不过近年来仍有不少知名摩天大楼以高价成交,例如华尔道夫酒店(Waldorf Astoria hotel),中国安邦保险于2016年以近20亿美元购得;还有芝加哥的威利斯大厦(Willis Tower,原名西尔斯大厦,曾是世界最高建筑),黑石集团(Blackstone Group, BX)于2015年以13亿美元购入。
克莱斯勒大厦在1953年之前一直是美国汽车制造商克莱斯勒公司的总部,但该大厦是以克莱斯勒公司首席执行官沃尔特·克莱斯勒(Walter Chrysler)的名字命名并由其个人持有,而非公司本身所有。
沃尔特·克莱斯勒当时立志建造世界最高建筑,与当时曼哈顿下城华尔街40号(40 Wall Street)正在建设的另一座摩天大楼展开竞争。他将大厦顶部尖塔的设计保密,在建筑内部秘密建造,直到华尔街40号完工后才公之于众。
一旦竞争对手无法再增高,克莱斯勒大厦的尖塔便被升起展示,从而赢得了“世界最高”的头衔。
'''
model = Summarizer()
result = model(body, min_length=60)
full = ''.join(result)
print(full)
"""
克莱斯勒大厦(The Chrysler Building)是纽约著名的装饰艺术风格(art deco)摩天大楼,此次将以远低于此前售价的一小部分价格出售。
该大厦在两个月前公开挂牌出售,很快就完成了交易。
之所以愿意以如此巨大的亏损出售该大厦,是因为业主需向纽约库伯联盟学院(Cooper Union)支付地皮租金,而租金正在飙升。
然而,即使从未去过纽约的人,也大多知道这座大厦。
"""
计算肘部点(Elbow)
从 bert-extractive-summarizer 版本 0.7.1 开始,你还可以计算肘部点(ELBOW)以确定最优聚类数量。以下示例展示了如何获取惯性值(inertias)列表。
from summarizer import Summarizer
body = 'Your Text here.'
model = Summarizer()
res = model.calculate_elbow(body, k_max=10)
print(res)
你也可以使用以下算法,通过肘部法找到最优句子数量。
from summarizer import Summarizer
body = 'Your Text here.'
model = Summarizer()
res = model.calculate_optimal_k(body, k_max=10)
print(res)
Summarizer 选项
model = Summarizer(
model: 该参数用于 Hugging Face BERT 库加载模型,你可以在此提供自定义训练好的模型
custom_model: 如果你有预训练模型,可以在此传入模型类
custom_tokenizer: 如果你有自定义分词器(tokenizer),可以在此传入
hidden: 必须为负数,用于指定从哪一层提取嵌入(embeddings)
reduce_option: 可选 'mean'(均值)、'median'(中位数)或 'max'(最大值),用于对嵌入层进行池化(pooling)降维
sentence_handler: 用于处理句子的处理器。若想使用共指消解(coreference),可实例化 CoreferenceHandler 并传入
)
model(
body: str # 需要摘要的文本字符串
ratio: float # 最终摘要中保留句子的比例
min_length: int # 删除字符数少于40的句子(可通过此参数指定最小长度)
max_length: int # 删除超过最大长度的句子
num_sentences: 要使用的句子数量。若提供此参数,则会覆盖 ratio 参数
)
运行服务
项目提供了一个 Flask 服务及对应的 Dockerfile。运行该服务非常简单,可以通过 Makefile 使用以下两个命令:
make docker-service-build
make docker-service-run
默认将使用 bert-base-uncased 模型,该模型的表示规模较小。Docker 运行命令也支持传入多种参数以使用自定义或其他模型。例如,可以使用如下命令:
docker build -t summary-service -f Dockerfile.service ./
docker run --rm -it -p 5000:5000 summary-service:latest -model bert-large-uncased
还可以向服务器传递其他参数。以下是可用参数列表:
-greediness:浮点数参数,用于控制 neuralcoref(神经共指消解)的贪婪程度-reduce:指定编码层使用的聚合统计方式(mean 均值、median 中位数、max 最大值)-hidden:指定用于生成 embeddings(嵌入向量)的隐藏层(默认为 -2)-port:指定服务监听的端口-host:指定服务绑定的主机地址
服务启动后,即可向 http://localhost:5000/summarize 端点发送文本摘要请求。该端点接受 text/plain 类型的请求体,内容为待摘要的原始文本。此外,也可以通过请求参数传递配置选项。支持的参数包括:
ratio:摘要句子数量占原文句子总数的比例(默认为 0.2)min_length:句子被接受的最小长度(默认为 25)max_length:句子被接受的最大长度(默认为 500)
以下是一个请求示例:
POST http://localhost:5000/summarize?ratio=0.1
Content-type: text/plain
Body:
The Chrysler Building, the famous art deco New York skyscraper, will be sold for a small fraction of its previous sales price.
The deal, first reported by The Real Deal, was for $150 million, according to a source familiar with the deal.
Mubadala, an Abu Dhabi investment fund, purchased 90% of the building for $800 million in 2008.
Real estate firm Tishman Speyer had owned the other 10%.
The buyer is RFR Holding, a New York real estate company.
Officials with Tishman and RFR did not immediately respond to a request for comments.
It's unclear when the deal will close.
The building sold fairly quickly after being publicly placed on the market only two months ago.
The sale was handled by CBRE Group.
The incentive to sell the building at such a huge loss was due to the soaring rent the owners pay to Cooper Union, a New York college, for the land under the building.
The rent is rising from $7.75 million last year to $32.5 million this year to $41 million in 2028.
Meantime, rents in the building itself are not rising nearly that fast.
While the building is an iconic landmark in the New York skyline, it is competing against newer office towers with large floor-to-ceiling windows and all the modern amenities.
Still the building is among the best known in the city, even to people who have never been to New York.
It is famous for its triangle-shaped, vaulted windows worked into the stylized crown, along with its distinctive eagle gargoyles near the top.
It has been featured prominently in many films, including Men in Black 3, Spider-Man, Armageddon, Two Weeks Notice and Independence Day.
The previous sale took place just before the 2008 financial meltdown led to a plunge in real estate prices.
Still there have been a number of high profile skyscrapers purchased for top dollar in recent years, including the Waldorf Astoria hotel, which Chinese firm Anbang Insurance purchased in 2016 for nearly $2 billion, and the Willis Tower in Chicago, which was formerly known as Sears Tower, once the world's tallest.
Blackstone Group (BX) bought it for $1.3 billion 2015.
The Chrysler Building was the headquarters of the American automaker until 1953, but it was named for and owned by Chrysler chief Walter Chrysler, not the company itself.
Walter Chrysler had set out to build the tallest building in the world, a competition at that time with another Manhattan skyscraper under construction at 40 Wall Street at the south end of Manhattan. He kept secret the plans for the spire that would grace the top of the building, building it inside the structure and out of view of the public until 40 Wall Street was complete.
Once the competitor could rise no higher, the spire of the Chrysler building was raised into view, giving it the title.
Response:
{
"summary": "The Chrysler Building, the famous art deco New York skyscraper, will be sold for a small fraction of its previous sales price. The buyer is RFR Holding, a New York real estate company. The incentive to sell the building at such a huge loss was due to the soaring rent the owners pay to Cooper Union, a New York college, for the land under the building."
}
版本历史
0.10.12022/01/040.10.02022/01/030.9.02021/11/280.8.12021/08/060.8.02021/08/060.7.12021/03/070.7.02021/02/210.6.12020/12/280.6.02020/12/280.5.22020/12/230.5.12020/10/100.4.22020/04/140.2.22019/11/190.2.12019/10/250.2.02019/09/290.1.62019/09/28常见问题
相似工具推荐
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
NextChat
NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。
ML-For-Beginners
ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。
ragflow
RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。