自然语言处理NLP入门 -- 第十一节NLP 实战项目 3: 文本摘要

1. 为啥需要文本摘要?

还记得小时候我们要写“读后感”或“观后感”吗?看完一篇长长的文章、一本书,甚至一部电影后,老师总是要我们用几句话概括主要内容。其实,这就跟文本摘要的核心思路一样——把那些最有价值、最能代表原文核心思想的内容给“捞”出来,让别人一下子就知道“这篇文章”或“这个故事”到底讲了啥。

在现实生活里,你可能会遇到这样的场景:

  • 新闻阅读:想快速知道今天世界发生了什么事儿,但新闻一篇好几千字,没时间细看?一键自动生成摘要,让你两三句话就知道新闻说啥。
  • 工作汇报:老板发来长篇邮件,没空细读?让自动摘要工具抽取重点,你再补充修饰就行。
  • 学术研究:你有一堆论文要看,每篇都是好几页甚至几十页?自动摘要能帮你快速判断这篇论文值不值得深挖。

因此,有了文本摘要,我们的效率就能大大提升,也能节省大量宝贵时间。接下来,我们来看看如何轻松实现它。


2. 文本摘要怎么做?(两大派系)

在NLP(自然语言处理)里,文本摘要主要有两种方式,想象一下这是两个“门派”:

  1. 抽取式摘要门派
    他们的招式是从原文中直接“摘取”关键词句,重新组合成摘要,读起来和原文内容很像。这就像你在商场买瓶矿泉水,直接拿起来就走,没有对它进行任何改造。

    • 好处:信息失真少,几乎不会“瞎编”。
    • 局限:可能读起来有点“不连贯”,句子缺少润色。
  2. 生成式摘要门派
    他们会“读懂”文章,再“用自己的话”写出一个精简、流畅的新文本。这就像把矿泉水倒进自己的保温杯,还可能加点柠檬片提升口感,最后让你喝到完全不同体验的饮品。

    • 好处:内容更通顺,风格更自然。
    • 局限:有时会有“想象力过度”,可能对原文做出不准确的改写。

现在,深度学习兴起后,生成式摘要特别火。因此,咱们今天聚焦用 T5、GPT 等模型来做“生成式摘要”。


3. 用 T5 模型来“写摘要”,就像找了个勤劳的小助理

3.1 T5 是啥?

T5(Text-To-Text Transfer Transformer)可以理解为一个“全能小助理”。它对绝大多数的文字处理任务都能上手,比如翻译、写摘要、问答等等,统统用“输入文本 -> 输出文本”这种形式来搞定。

  • 优点:能帮你做各种文字任务,不用自己手动来回换工具。
  • 如何使用:Hugging Face 库提供了预训练好的T5模型,我们拿来就能用,不用从零开始训练。

3.2 代码示例:给 T5 一个长文本,让它帮你总结

在正式开始前,你需要安装好 transformerstorch

pip install transformers torch

然后,在 Python 里写几行代码,就能让 T5 接手你的文本,输出简洁摘要。示例如下:

from transformers import T5Tokenizer, T5ForConditionalGenerationmodel_name = "t5-small"  # 可换成 t5-base 或 t5-large
tokenizer = T5Tokenizer.from_pretrained(model_name)
model = T5ForConditionalGeneration.from_pretrained(model_name)text = """
人工智能(AI)是计算机科学的一个分支,致力于让机器拥有类似人类的智能,
涉及推理、规划、学习、语言理解等多种技术领域。
它在机器人、医疗、金融、教育等行业都有广泛应用。
"""
# 在句子前加上 "summarize: " 提醒 T5:老兄,这是摘要任务
input_text = "summarize: " + text# 分词并编码
encoding = tokenizer.encode_plus(input_text,max_length=512,truncation=True,return_tensors="pt"  # 返回 PyTorch 张量
)# 生成摘要
summary_ids = model.generate(encoding["input_ids"],num_beams=4,         # beam search宽度no_repeat_ngram_size=2, min_length=10, max_length=50,       # 生成的摘要长度early_stopping=True
)summary = tokenizer.decode(summary_ids[0], skip_special_tokens=True)
print("T5生成的摘要:", summary)

示例输出:

看不懂的地方说明
  • num_beams=4:这是一种寻找最佳句子的策略,让模型有机会从多个候选里选出相对高质量的摘要。
  • max_length=50:输出摘要的上限字数,别太长,否则就没“摘要”意味了。
  • skip_special_tokens=True:去掉模型在生成时出现的特殊标记(比如 <pad>, <sep> 等)。

运行完,你就能得到一段简短的摘要。虽然它可能没有你自己写的那么“贴心”,但作为一款自动化工具,已经很够用了。


4. 用 OpenAI API 做摘要,像雇了个超级写手

4.1 为什么用 OpenAI?

  • 你不想做模型部署?不想配环境?没问题。只需要一个 API Key,就能让 GPT 系列(GPT-3.5、GPT-4 等)帮你写摘要。
  • GPT 对中文和很多语言都擅长,能写得像模像样。

4.2 给 OpenAI API 发消息,让它生成摘要

第一步,先安装 openai

pip install openai

然后写一点点 Python 代码,就能把文本交给 GPT,让它帮你写一段简洁的摘要:

import openaiopenai.api_key = "你的OPENAI_API_KEY"def generate_summary(text):prompt = f"请用简洁生动的语言概括以下文本:\n{text}\n摘要:"response = openai.chat.completions.create(model = "gpt-4",messages = [{"role": "user", "content": prompt}],max_tokens = 50,temperature = 0.7)return response.choices[0].message.contentlong_text = """
自然语言处理是一门让计算机能理解和生成自然语言(如中文、英语)的方法,
包括分词、文本分类、情感分析、机器翻译等。在人工智能大潮下,NLP 正日渐火热。
"""print(generate_summary(long_text))

示例输出:

自然语言处理是一种使计算机理解和产生自然语言的技术,包括分词、文本分类、情感分析和机器翻译等
  • prompt:给 GPT 的“指令”。像跟人聊天一样,对它说“请概括下面的文本”。
  • temperature=0.7:控制文字生成的“创造力”,数字越高,生成越有个性;数字低,生成越稳当。

只要联网并且 Key 没失效,运行后 GPT 会迅速给你一个简洁的概括。是不是感觉像给你配了个“写手助理”?


5. 常见困难:模型也会“卡壳”?

  1. 摘要不够准确:生成式模型(尤其是 GPT)有时“脑补”过头,可能添加原文没有的内容。所以使用后要做一下人工核对。
  2. 文本太长:T5 或 GPT 都有输入长度限制,字数太多时得分段处理,然后把分段的摘要再合并总结。

6. 小练习,动动手更牢固

  1. 调参试验:试着改变 T5 的 num_beamsmax_length 等参数,看看最终摘要风格有什么不同。
  2. 多段合并:如果输入段落很多,先给每段做摘要,再汇总这些摘要形成二次摘要。
  3. 事实校验:选一篇有数字、时间等细节的新闻,让 GPT 做摘要,对比是否和原文对得上。
  4. 多语言尝试:如果手头有英文或其他语言文章,看看 T5 或 GPT 会不会“翻车”?
  5. 比较抽取式和生成式:用一些抽取式工具(例如 gensim.summarization.summarize)跟 T5 或 GPT 做对比,体会两者区别。

7. 总结

“文本摘要”就像是一个能快速为你筛选信息、抓住重点的小能手,不管你是在工作场景、阅读新闻还是学术领域,都能让你大大提升阅读效率。本文介绍了两条主要“捷径”:

  1. T5:在 Hugging Face 上直接调包,是个通用又强大的文字处理模型。
  2. OpenAI API:付费获取高级写手“GPT”,几行代码搞定摘要。

对于零基础的你,大可不必深陷复杂的数学公式,先把代码跑起来,试验一下效果,感受这些工具的神奇之处!等你对它们的能力和局限有了更深了解,再决定要不要继续挖掘背后的深度学习原理。

祝你在文本摘要的世界里玩得愉快,也欢迎把这份经验用到更多多语言场景,为低资源语言的自动化处理献出一份力量!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/72238.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法day4 dfs搜索2题

一 糖果 我们看这个蓝桥A组真题 首先我们看这个题目说有M种的糖果&#xff0c;K颗一包&#xff0c;N包糖果 第一行就是输入M&#xff0c;K&#xff0c;N的数量 后面就是输入每个糖果在每包里面的种类 然后问我们最少要用几包糖果才可以把所有种类的糖果都吃一遍 如果不可以吃完…

【MySQL】窗口函数详解(概念+练习+实战)

文章目录 前言1. SQL窗口函数 1.1 窗口函数概念1.2 窗口函数语法1.3 常见窗口函数 1.3.1 聚合窗口函数1.3.2 专用窗口函数 1.4 窗口函数性能比较 2. LeetCode 例题 2.1 LeetCode SQL 178&#xff1a;分数排名2.2 LeetCode SQL 184&#xff1a;最高工资2.3 LeetCode SQL 185&am…

【Ai】--- DeepSeek-r1 如何选择适合自己的版本(超详细)

在编程的艺术世界里&#xff0c;代码和灵感需要寻找到最佳的交融点&#xff0c;才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里&#xff0c;我们将共同追寻这种完美结合&#xff0c;为未来的世界留下属于我们的独特印记。 【Ai】--- DeepSeek-r1 如何选择适合自己…

植物大战僵尸金铲铲版 v1.1.6(windows+安卓)

游戏简介 《植物大战僵尸金铲铲版》是由“古见xzz”、“对不起贱笑了”、“是怪哉吖”等联合开发的民间魔改版本&#xff0c;融合了原版塔防玩法与《金铲铲之战》的自走棋元素&#xff0c;属于非官方同人作品。 游戏特点 合成升星机制&#xff1a;三个相同低星植物可合成更高…

网络空间安全(6)web应用程序技术

前言 Web应用程序技术是指用于开发和构建基于Web的应用程序的技术和工具&#xff0c;涵盖了前端开发、后端开发、数据库管理、安全性等多个方面的技术。 一、前端开发技术 HTML/CSS/JavaScript&#xff1a;HTML用于构建网页结构&#xff0c;CSS用于进行样式设计&#xff0c;Jav…

零基础学习OpenGL(一)创建一个窗口

基于 ubuntu 系统&#xff0c;设置基础环境。 #!/usr/bin/env bashsudo apt-get update# 安装基础编译软件 sudo apt-get -y install gcc g cmake git# 安装编译 glfw 依赖的软件 sudo apt-get -y install libwayland-dev libx11-dev libxcursor-dev libxi-dev libxinerama-de…

Windows 11 下正确安装 Docker Desktop 到 D 盘的完整教程

文章目录 Windows 11 在 D 盘正确安装 Docker Desktop 的完整教程**前言****准备工作****1. 手动创建 Docker 相关目录**&#xff08;⚠️ **这一步非常重要**&#xff0c;否则会报错&#xff09;**2. 下载 Docker Desktop 安装程序****3. 使用管理员权限打开终端** **安装 Doc…

版图自动化连接算法开发 00001 ------ 直接连接两个给定的坐标点

版图自动化连接算法开发 00001 ------ 直接连接两个给定的坐标点 引言正文定义坐标点的类绘图显示代码直接连接两个坐标点引言 由于人工智能的加速普及,每次手动绘制版图都会觉得特别繁琐,作者本人在想可否搞一个自动化连接器件端口的算法,后期可以根据一些设定的限制进行避…

AIP-156 单例资源

编号156原文链接AIP-156: Singleton resources状态批准创建日期2019-05-12更新日期2024-04-15 API有时需要表示在任意上级资源中&#xff0c;始终只存在一个实例的资源。常见的例子是配置对象。 指南 API 可以 定义 单例资源 。单例资源 必须 始终随上级资源而存在&#xff…

程序诗篇里的灵动笔触:指针绘就数据的梦幻蓝图(水文,勿三)

大家好啊&#xff0c;我是小象٩(๑ω๑)۶ 我的博客&#xff1a;Xiao Xiangζั͡ޓއއ 很高兴见到大家&#xff0c;希望能够和大家一起交流学习&#xff0c;共同进步。 这一节我们来学习指针的相关知识&#xff0c;学习内存和地址&#xff0c;指针变量和地址&#xff0c;包…

【实用技巧】RAGFlow+DeepSeek搭建私人Ai助理

前言 满血版DeepSeek虽然很好用&#xff0c;但仍然有三个主要缺陷&#xff1a; 联网的DeepSeek无法解决数据安全问题&#xff0c;如果使用&#xff0c;数据将传输到其服务器&#xff0c;数据隐私性无法保证。上传的文件存在限制&#xff0c;无法解决有多个文件的问题。回答的…

Storm实时流式计算系统(全解)——中

storm编程的基本概念-topo-spout-bolt 例如下&#xff1a; storm 编程接口-spout的结构及组件实现 storm编程案例-spout组件-实现 这是我的第一个组件&#xff08;spout组件继承BaseRichSput&#xff09;所有重写内部的三个方法&#xff0c;用于接收数据&#xff08;这里数据是…

【tplink】校园网接路由器如何单独登录自己的账号,wan-lan和lan-lan区别

老式路由器TPLINK&#xff0c;接入校园网后一人登录&#xff0c;所有人都能通过连接此路由器上网&#xff0c;无法解决遂上网搜索&#xff0c;无果&#xff0c;幸而偶然看到一个帖子说要把信号源网线接入路由器lan口&#xff0c;开启新世界。 一、wan-lan&#xff0c;lan-lan区…

Qt常用控件之旋钮QDial

旋钮QDial QDial 表示一个旋钮控件。 1. QDial属性 属性说明value当前数值。minimum最小值。maximum最大值。singleStep按下方向键时改变的步长。pageStep按下 pageUp/pageDown 的时候改变的步长。sliderPosition界面上旋钮显示的初始位置。tracking外观是否会跟踪数值变化&…

微服务笔记 2025/2/15

微服务是一种软件架构风格&#xff0c;它是以专注于单一职责的很多小型项目为基础&#xff0c;组合出复杂的大型应用。 微服务是一种架构。 微服务是一种架构。 微服务是一种架构。 以前自己做项目最常用的架构是单体架构。单体项目不适合开发大型项目。 学习微服务技术来解…

7-1JVMCG垃圾回收

一、GC的作用与原理 ​核心功能​ 自动识别并回收堆内存中不再被引用的对象&#xff0c;释放内存空间。 避免手动管理内存的复杂性&#xff08;如C/C中的delete/free操作&#xff09;&#xff0c;降低内存泄漏风险。 ​判断对象可回收的方法​ ​可达性分析算法&#xff1a;…

yunedit-post ,api测试比postman更好

postman应该是大家最熟悉的api测试软件了&#xff0c;但是由于它是外国软件&#xff0c;使用它的高端功能注册和缴费都比较麻烦。生成在线文档分享也经常无法访问被拦截掉。 这里可以推荐一下yunedit-post&#xff0c;该有的功能都有。 https://www.yunedit.com/postdetail …

010 rocketmq批量消息

文章目录 批量消息BatchProducer.javaBatchConsumer.java 批量消息 批量发送可以提⾼发送性能&#xff0c;但有⼀定的限制&#xff1a; topic 相同 waitStoreMsgOK 相同 &#xff08;⾸先我们建设消息的iswaitstoremsgoktrue(默认为true), 如果没有异常,我们将始终收到"O…

6.6.6 嵌入式SQL

文章目录 2个核心问题识别SQL语句主语言和SQL通信完整导图 2个核心问题 SQL语句嵌入高级语言需要解决的2个核心问题是&#xff1a;如何识别嵌入语句&#xff1f;如何让主语言&#xff08;比如C,C语言&#xff09;和SQL通信&#xff1f; 识别SQL语句 为了识别主语言中嵌入的SQL…

Windows安装sql server2017

看了下官网的文档&#xff0c;似乎只有ubuntu18.04可以安装&#xff0c;其他debian系的都不行&#xff0c;还有通过docker的方式安装的。 双击进入下载的ISO&#xff0c;点击执行可执行文件&#xff0c;并选择“是” 不要勾选 警告而已&#xff0c;不必理会 至少勾选这两…