如何使用 GPT-2 总结文本?

人工智能 开放式 文本摘要 文本生成 gpt-2
2021-11-03 00:49:35

OpenAI GPT-2 论文的第 3.6 节中,它提到了基于与此相关的总结文本,但该方法是用非常高级的术语描述的:

为了诱导摘要行为,我们在文章TL;DR:之后添加文本并使用 Top-k 随机抽样 (Fan et al., 2018) 生成 100 个标记,其中 k=2,这减少了重复并鼓励比贪婪解码更抽象的摘要。我们使用这 100 个标记中的前 3 个生成的句子作为摘要。

给定一个文本语料库,用具体的代码术语(首选python),我将如何生成它的摘要?

1个回答

简而言之:这取决于。

你会在哪里运行它?
  • On Premises:您可能希望在自己的环境中运行。
  • IaaS:GPT 模型通常太大,因此人们可能更愿意为此设置不同的服务器,为您的 API 提供服务。
  • PaaS:如果它更具实验性,我建议在 Google Colab 上运行它。
  • SaaS:甚至使用一些外部 API,因此您无需担心此设置,只需将其用作服务即可。(最简单的)

每种方法都需要不同的架构和不同的代码。

设置环境/API 后,您将通过提供初始提示和一些参数来运行它:

GPT

GPT-2(任何 GPT 模型)是一个通用的、开放域的文本生成模型,它试图预测任何给定上下文的下一个单词。

因此,设置“汇总模式不仅仅是标记参数。这是一个不确定的过程,需要尝试和错误。

GPT 设置是实验性的:

  • 您使用沙盒。
  • 创建初始提示。
  • 设置一些参数(温度,Top-P,Top-K,...)
  • 评估你的结果
  • 调整提示
  • 调整参数
  • 直到您始终如一地取得理想的结果。

提示

1.简单的方法

一个非常简单的方法是:

prompt = text+"\nTD;DR:"

如果您的文本简单而小,它应该特别好用。

2.明确介绍

如果最初提示一些上下文,您可能会得到更好的结果,例如:

"Here is a text and it's respective summary.\n"+
"#Full text:" + text + "\n"+
"#Summary:"
3.添加示例

另一种方法是在原始提示之前用一些(高质量)示例填充您的提示:

prompt = sample_1+"\nTD;DR:"+summary_1
prompt += "\n###\n"
prompt += sample_2+"\nTD;DR:"+summary_2
prompt += "\n###\n"
prompt += your_input+"\nTD;DR:"

你意识到生成器的下一个合乎逻辑的事情是对你的输入进行总结。

结果将在很大程度上取决于您的文本大小和样式。因此,您应该找到最适合您需求的提示模板。

执行

请记住,GPT 不会从以前的执行中学习它在两次执行之间没有记忆或学习,这意味着每个输入都将再次需要整个提示。

所以你的主程序应该运行一个循环并为每个文本文件提示一次 GPT就像是:

for file in glob(./files.txt)
  text = open(file, "r")
  prompt = text+"\nTLDR:\n"
  result = GPT(prompt, parameters)
要记住的其他提示:

如果您没有示例:

  1. 结果可能与预期不同(太大、太短、太不正式、忽略您认为重要的内容)
  2. 不太稳定。(有时钉它,有时毁了它)。

如果您有一些示例,它应该复制您的示例样式。但:

  1. 它可能会错误地引用示例(而不是所需的文本)。
  2. 如果您的文本与示例长度/样式不匹配,则会感到困惑。
  3. 提示可能会变得太大。

如果原文太大:

  1. 这将需要更多的计算能力。
  2. 它可能会推断出它可以消化的令牌的限制。(因此您可能需要将文本分成章节)。
  3. 该模型可能会感到困惑,例如:仅总结最后一段(因此您需要明确文本何时开始和结束)。