当前位置: 首页 > article >正文

自然语言处理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, T5ForConditionalGeneration

model_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 openai

openai.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.content

long_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.kler.cn/a/567505.html

相关文章:

  • 一文了解:部署 Deepseek 各版本的硬件要求
  • 【Python爬虫(94)】爬虫生存指南:风险识别与应对策略
  • 【数据集】ACM数据集
  • 《动手学习深度学习》的笔记
  • 自学微信小程序的第八天
  • nuxt常用组件库html-validator应用解析
  • P1135 奇怪的电梯(深度优先搜索优化)
  • 多维模型数据库(OLAP)和列式数据库的区别
  • 【Qt QML】QML鼠标事件(MouseArea)
  • 【JAVA SE基础】抽象类和接口
  • 贪心算法 求解思路
  • 4-1.jvm的类加载
  • 485 多路信号采集,校验干扰问题
  • 机器学习预备知识
  • 基于springboot+vue的拼夕夕商城
  • GPT-4.5实际性能评测:实际探索
  • Java并发编程之可见性、原子性和有序性
  • C语言-7.函数
  • 6-1JVM的执行引擎处理
  • CF 109A.Lucky Sum of Digits(Java实现)