一篇新闻太长懒得看?我用 Python + 深度学习,3分钟教你做一个“自动摘要神器”
🧠 一篇新闻太长懒得看?我用 Python + 深度学习,3分钟教你做一个“自动摘要神器”
有多少人和我一样:
- 打开一篇新闻,2000 字起步
- 划重点划到怀疑人生
- 最后直接滑到评论区看“网友总结版”
说白了,我们不是不爱看内容,是信息密度太低 + 时间太少。
那能不能自己做一个工具:
👉 输入一篇新闻 → 自动生成“人话版摘要”?
答案是:完全可以,而且比你想象的简单。
今天我就带你从 0 到 1,撸一个完整的:
🔥 Python + 深度学习新闻摘要系统(可直接跑)
不讲空话,全是能落地的东西。
一、先看效果(我们到底要做什么)
先看目标效果👇
输入(原新闻):
“某科技公司发布最新AI模型,该模型在多项基准测试中超越现有方案,并在自然语言处理、图像识别等多个领域取得突破……”
输出(自动摘要):
“该公司发布新AI模型,性能全面提升,在多个领域取得突破。”
👉 一句话讲清核心信息
这背后其实就是一个任务:
📌 文本摘要(Text Summarization)
二、技术选型(别一上来就搞复杂)
做摘要有两条路:
1️⃣ 抽取式(Extractive)
- 从原文“挑句子”
- 简单,但不够自然
2️⃣ 生成式(Abstractive)✅
- 模型“理解后重写”
- 更像人写的
👉 今天我们选第二种:生成式摘要
三、核心模型:直接用现成的(别重复造轮子)
我们用 HuggingFace 的模型,比如:
facebook/bart-large-cnnt5-small
👉 这些模型已经在新闻摘要上训练好了
四、上代码:10行实现一个摘要系统
先安装依赖:
pip install transformers torch
🚀 核心代码(最简单版本)
from transformers import pipeline
# 加载摘要模型
summarizer = pipeline("summarization", model="facebook/bart-large-cnn")
text = """
A major tech company has released a new AI model that outperforms existing solutions
in multiple benchmarks. The model demonstrates strong capabilities in natural language
processing and image recognition.
"""
# 生成摘要
summary = summarizer(text, max_length=50, min_length=20, do_sample=False)
print(summary[0]['summary_text'])
👉 就这么简单,你已经有一个“AI摘要引擎”了。
五、加点“工程味”:支持真实新闻数据
我们不可能手动输入文本,真实场景是:
👉 从新闻网站抓数据
示例:用 requests 抓新闻
import requests
from bs4 import BeautifulSoup
url = "https://example.com/news"
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")
# 假设文章在 <p> 标签
paragraphs = soup.find_all("p")
text = " ".join([p.get_text() for p in paragraphs])
print(text[:500])
👉 现在你有“真实新闻文本”了
六、长文本处理(很多人会踩的坑)
模型是有输入长度限制的(比如 1024 tokens)
👉 新闻太长怎么办?
✂️ 分段摘要(推荐)
def split_text(text, max_len=500):
sentences = text.split(". ")
chunks = []
current = ""
for sentence in sentences:
if len(current) + len(sentence) < max_len:
current += sentence + ". "
else:
chunks.append(current)
current = sentence + ". "
if current:
chunks.append(current)
return chunks
🧠 多段摘要再融合
chunks = split_text(text)
summaries = []
for chunk in chunks:
result = summarizer(chunk, max_length=50, min_length=20)
summaries.append(result[0]['summary_text'])
final_summary = " ".join(summaries)
print(final_summary)
👉 这就是一个“工业级思路”的雏形了。
七、让结果更“像人话”(优化点)
很多人跑完会吐槽:
“怎么有点像机器人写的?”
确实,这里有几个优化方向👇
1️⃣ 控制摘要长度
summarizer(text, max_length=60, min_length=30)
2️⃣ 使用中文模型(如果是中文新闻)
比如:
uer/t5-base-chinese-cluecorpussmall
summarizer = pipeline("summarization", model="uer/t5-base-chinese-cluecorpussmall")
3️⃣ 加一点“后处理”
def clean_text(text):
return text.replace("\n", "").strip()
final_summary = clean_text(final_summary)
八、效果展示(更直观一点)
👉 上面这类流程其实就是:
原文 → 分段 → 模型理解 → 重写 → 合并摘要
九、再往上走一步:做成API服务
如果你想真正“用起来”,可以这样👇
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route("/summarize", methods=["POST"])
def summarize_api():
text = request.json["text"]
result = summarizer(text)
return jsonify(result[0]['summary_text'])
app.run(port=5000)
👉 现在你有:
- 一个摘要模型
- 一个接口服务
- 可以接前端 / 小程序 / 内部系统
十、说点我的真实感受
我自己在做内容系统的时候,有一个很深的感受:
AI不是用来“替代人”,而是用来“压缩信息成本”。
新闻摘要这个东西,本质上解决的是:
- 信息过载
- 阅读时间不足
- 注意力稀缺
而你如果能把这个能力用在:
- 内容推荐
- 数据分析报告
- 内部知识库
那价值就完全不一样了。
十一、总结一句话(建议收藏)
如果你今天只记住一件事,那就是:
文本摘要 ≠ 技术炫技,而是信息效率革命。
🔥 最后给你一个升级方向
如果你想把这个项目再往上打磨,我建议你试试:
- ✅ 加入关键词提取(KeyBERT)
- ✅ 做“多新闻聚合摘要”
- ✅ 用大模型(GPT / Claude)做对比增强
- ✅ 加缓存 + 并发优化
- 点赞
- 收藏
- 关注作者
评论(0)