自然语言处理NLP入门 -- 第十一节NLP 实战项目 3: 文本摘要
1. 为啥需要文本摘要?
还记得小时候我们要写“读后感”或“观后感”吗?看完一篇长长的文章、一本书,甚至一部电影后,老师总是要我们用几句话概括主要内容。其实,这就跟文本摘要的核心思路一样——把那些最有价值、最能代表原文核心思想的内容给“捞”出来,让别人一下子就知道“这篇文章”或“这个故事”到底讲了啥。
在现实生活里,你可能会遇到这样的场景:
- 新闻阅读:想快速知道今天世界发生了什么事儿,但新闻一篇好几千字,没时间细看?一键自动生成摘要,让你两三句话就知道新闻说啥。
- 工作汇报:老板发来长篇邮件,没空细读?让自动摘要工具抽取重点,你再补充修饰就行。
- 学术研究:你有一堆论文要看,每篇都是好几页甚至几十页?自动摘要能帮你快速判断这篇论文值不值得深挖。
因此,有了文本摘要,我们的效率就能大大提升,也能节省大量宝贵时间。接下来,我们来看看如何轻松实现它。
2. 文本摘要怎么做?(两大派系)
在NLP(自然语言处理)里,文本摘要主要有两种方式,想象一下这是两个“门派”:
-
抽取式摘要门派:
他们的招式是从原文中直接“摘取”关键词句,重新组合成摘要,读起来和原文内容很像。这就像你在商场买瓶矿泉水,直接拿起来就走,没有对它进行任何改造。- 好处:信息失真少,几乎不会“瞎编”。
- 局限:可能读起来有点“不连贯”,句子缺少润色。
-
生成式摘要门派:
他们会“读懂”文章,再“用自己的话”写出一个精简、流畅的新文本。这就像把矿泉水倒进自己的保温杯,还可能加点柠檬片提升口感,最后让你喝到完全不同体验的饮品。- 好处:内容更通顺,风格更自然。
- 局限:有时会有“想象力过度”,可能对原文做出不准确的改写。
现在,深度学习兴起后,生成式摘要特别火。因此,咱们今天聚焦用 T5、GPT 等模型来做“生成式摘要”。
3. 用 T5 模型来“写摘要”,就像找了个勤劳的小助理
3.1 T5 是啥?
T5(Text-To-Text Transfer Transformer)可以理解为一个“全能小助理”。它对绝大多数的文字处理任务都能上手,比如翻译、写摘要、问答等等,统统用“输入文本 -> 输出文本”这种形式来搞定。
- 优点:能帮你做各种文字任务,不用自己手动来回换工具。
- 如何使用:Hugging Face 库提供了预训练好的T5模型,我们拿来就能用,不用从零开始训练。
3.2 代码示例:给 T5 一个长文本,让它帮你总结
在正式开始前,你需要安装好 transformers
和 torch
。
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. 常见困难:模型也会“卡壳”?
- 摘要不够准确:生成式模型(尤其是 GPT)有时“脑补”过头,可能添加原文没有的内容。所以使用后要做一下人工核对。
- 文本太长:T5 或 GPT 都有输入长度限制,字数太多时得分段处理,然后把分段的摘要再合并总结。
6. 小练习,动动手更牢固
- 调参试验:试着改变 T5 的
num_beams
、max_length
等参数,看看最终摘要风格有什么不同。 - 多段合并:如果输入段落很多,先给每段做摘要,再汇总这些摘要形成二次摘要。
- 事实校验:选一篇有数字、时间等细节的新闻,让 GPT 做摘要,对比是否和原文对得上。
- 多语言尝试:如果手头有英文或其他语言文章,看看 T5 或 GPT 会不会“翻车”?
- 比较抽取式和生成式:用一些抽取式工具(例如
gensim.summarization.summarize
)跟 T5 或 GPT 做对比,体会两者区别。
7. 总结
“文本摘要”就像是一个能快速为你筛选信息、抓住重点的小能手,不管你是在工作场景、阅读新闻还是学术领域,都能让你大大提升阅读效率。本文介绍了两条主要“捷径”:
- T5:在 Hugging Face 上直接调包,是个通用又强大的文字处理模型。
- OpenAI API:付费获取高级写手“GPT”,几行代码搞定摘要。
对于零基础的你,大可不必深陷复杂的数学公式,先把代码跑起来,试验一下效果,感受这些工具的神奇之处!等你对它们的能力和局限有了更深了解,再决定要不要继续挖掘背后的深度学习原理。
祝你在文本摘要的世界里玩得愉快,也欢迎把这份经验用到更多多语言场景,为低资源语言的自动化处理献出一份力量!