英文新闻怎么在本地生成摘要?用 DistilBART 控制长度并核对事实

本地调用英文 DistilBART,按模型前缀和窗口核对输入 token 数,再生成摘要并回查主体、数字、日期和否定条件。

需要在本地把英文新闻压缩成短摘要时,可以用 DistilBART 生成候选摘要,再对照原文审核。操作重点是让长输入失败得明确,并核对人名、数字与否定条件;摘要流畅不表示它保留了全部事实。

选择适用的英文输入

sshleifer/distilbart-cnn-12-6 是英文摘要检查点,其模型资料列出新闻摘要数据。它不是中文摘要模型,也不适合直接替你处理未经提取的 PDF 或图片。准备 UTF-8 的 news.txt,先放入一段你有权处理、内容完整的英文报道。为了确认输入文件,运行前手动打开一次。

英文新闻怎么在本地生成摘要?用 DistilBART 控制长度并核对事实

示例面向有基础 Python 经验的读者,按 Transformers 4.57.1 接口编写。Windows 可用以下独立环境;macOS/Linux 用 python3 创建环境,并把后续解释器路径换为 .venv/bin/python。首次加载模型需要网络、磁盘和足够内存,CPU 可以执行但速度取决于机器。安装失败时先看 Python 版本与 pip 报错,不能把安装成功当成模型已跑通。

py -m venv .venv
.venv\Scripts\python -m pip install "torch>=2.6" "transformers==4.57.1" safetensors

先查长度,再生成摘要

保存下列代码为 summarize_demo.py。程序从该检查点配置读取输入边界,并把 pipeline 会添加的前缀也计入 token 数,超长时停止;不能靠字符数量猜模型窗口,也不静默丢掉报道结尾。输出上限 100 是新 token 的上限,不等于 100 个英文单词。

from pathlib import Path
from transformers import AutoConfig, AutoTokenizer, pipeline

model_id = "sshleifer/distilbart-cnn-12-6"
tokenizer = AutoTokenizer.from_pretrained(model_id)
config = AutoConfig.from_pretrained(model_id)
text = Path("news.txt").read_text(encoding="utf-8").strip()
if not text:
    raise ValueError("news.txt is empty")
prefix = config.prefix or ""
token_count = len(tokenizer(prefix + text, add_special_tokens=True)["input_ids"])
if token_count > config.max_position_embeddings:
    raise ValueError(f"Input too long: {token_count}; select a complete passage first")
summarizer = pipeline("summarization", model=model_id, tokenizer=tokenizer, device=-1)
result = summarizer(text, max_new_tokens=100, min_new_tokens=10,
                    do_sample=False, num_beams=4, truncation=False)
summary = result[0]["summary_text"]
if not summary.strip():
    raise ValueError("Empty summary; inspect input and generated token IDs")
Path("summary.txt").write_text(summary, encoding="utf-8")
print("input_tokens", token_count)
print(summary)

该检查点当前配置的 max_position_embeddings 为 1024、prefix 为空格;程序依据读取到的配置核对长度,不把正文字符数当作 token 数。若替换检查点,须重新确认模型窗口与该任务的前缀规则。摘要接口会先拼接前缀再分词,不能只对裸正文计数后在边界处放行。

用一段虚构报道做第一次检查

可把以下四句作为演示 news.txt:On Monday, Harbor Library announced a free weekend coding workshop. The workshop will run on Saturday from 10 a.m. to noon. Registration is required because only 20 seats are available. The library said the workshop does not include advanced machine learning training. 地点名称及活动为虚构,适合检查否定项和数字,不是新闻案例。

核对摘要的四类事实

运行后打开 summary.txt,对照原文检查:活动主体是否还是图书馆,时间是否为周六 10 点到中午,免费与需报名是否矛盾,是否把“不含高级机器学习训练”改成“提供高级训练”。摘要可以省略非核心信息,但不能凭空增加地点、人数或训练承诺;有误的摘要要改写或删除错误,不能仅调短长度就视为合格。

超长输入与运行问题

遇到 Input too long 时,先选出一段完整内容保存为另一个文件,保留来源段落;本例没有实现长文分段汇总。如果你分段生成,多段摘要仍需要去重和事实核对,不能保证跨段因果关系完整。CPU 内存不足可换更小的、同任务同语言模型;不要直接换成任意 text-generation 检查点并沿用 summarization 接口。

相关问答

能否把输出长度调很短就当标题?不应自动采用。摘要可能只保留一个片段;先确认标题是否覆盖主要事实,再单独编辑标题。

本文已核对官方接口与模型资料,示例输入为人为构造;未在本文环境下载并实跑所列公开模型,未测速度或任务准确率。下面的检查方法由你在实际运行后执行,不能把演示代码当成质量评测结果。

官方资料与版本依据

Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/31347.html

赞 (0)
AI小管家的头像AI小管家
英文人名和机构怎么提取?用 BERT NER 导出实体与字符位置
上一篇 4小时前
中文怎么离线翻译成英文?下载 OPUS-MT 并核对逐句译文
下一篇 4小时前

相关推荐

联系我们

联系我们

1

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
关注微信
分享本页
返回顶部