NLP 进行文本摘要的三种策略代码实现和对比:TextRank vs Seq2Seq vs BART

本文将使用 Python 实现和对比解释 NLP中的3 种不同文本摘要策略:老式的 TextRank(使用 gensim)、著名的 Seq2Seq(使基于 tensorflow)和最前沿的 BART(使用Transformers )。

NLP(自然语言处理)是人工智能领域,研究计算机与人类语言之间的交互,特别是如何对计算机进行编程以处理和分析大量自然语言数据。最难的 NLP 任务是输出不是单个标签或值(如分类和回归),而是完整的新文本(如翻译、摘要和对话)的任务。

文本摘要是在不改变其含义的情况下减少文档的句子和单词数量的问题。有很多不同的技术可以从原始文本数据中提取信息并将其用于摘要模型,总体来说它们可以分为提取式(Extractive)和抽象式(Abstractive)。提取方法选择文本中最重要的句子(不一定理解含义),因此作为结果的摘要只是全文的一个子集。而抽象模型使用高级 NLP(即词嵌入)来理解文本的语义并生成有意义的摘要。抽象技术很难从头开始训练,因为它们需要大量参数和数据,所以一般情况下都是用与训练的嵌入进行微调。

本文比较了 TextRank(Extractive)的老派方法、流行的编码器-解码器神经网络 Seq2Seq(Abstractive)以及彻底改变 NLP 领域的最先进的基于注意力的 Transformers(Abstractive)。

本文将使用“CNN DailyMail”数据集,包含了数千篇由 CNN 和《每日邮报》的记者用英语撰写的新闻文章,以及每篇文章的摘要,数据集和本文的代码也都会在本文末尾提供。

首先,我需要导入以下库:

  1. ## for data
  2. import datasets #(1.13.3)
  3. import pandas as pd #(0.25.1)
  4. import numpy #(1.16.4)
  5. ## for plotting
  6. import matplotlib.pyplot as plt #(3.1.2)
  7. import seaborn as sns #(0.9.0)
  8. ## for preprocessing
  9. import re
  10. import nltk #(3.4.5)
  11. import contractions #(0.0.18)
  12. ## for textrank
  13. import gensim #(3.8.1)
  14. ## for evaluation
  15. import rouge #(1.0.0)
  16. import difflib
  17. ## for seq2seq
  18. from tensorflow.keras import callbacks, models, layers, preprocessing as kprocessing #(2.6.0)
  19. ## for bart
  20. import transformers #(3.0.1)

然后我使用 HuggingFace 的加载数据集:

  1. ## load the full dataset of 300k articles
  2. dataset = datasets.load_dataset("cnn_dailymail", '3.0.0')
  3. lst_dics = [dic for dic in dataset["train"]]
  4. ## keep the first N articles if you want to keep it lite
  5. dtf = pd.DataFrame(lst_dics).rename(columns={"article":"text",
  6. "highlights":"y"})[["text","y"]].head(20000)
  7. dtf.head()

让我们检查一个随机的样本:

  1. i = 1
  2. print("--- Full text ---")
  3. print(dtf["text"][i])
  4. print("--- Summary ---")
  5. print(dtf["y"][i])

在上图中,我将摘要中提到的信息手动标记为红色。 体育文章对机器来说是非常困难的,因为标题需要在有限的字符限制的情况下突出主要结果。 这个实例可能是一个非常好的例子,我会将这个示例保留在测试集中以比较模型。

  1. dtf_train = dtf.iloc[i+1:]
  2. dtf_test = dtf.iloc[:i+1]

TextRank

TextRank (2004) 是一种基于图的文本处理排名模型,基于 Google 的 PageRank 算法,可在文本中找到最相关的句子。 PageRank 是 1998 年 Google 搜索引擎使用的第一个对网页进行排序的算法。简而言之,如果页面 A 链接到页面 B,页面 C,页面 B 链接到页面 C,那么排序将是页面 C,页面 B,页面 A。

完整文章:

https://www.overfit.cn/post/ce018bb0dd574f2e982ed5e136d4af77

posted @ 2022-04-13 11:19  deephub  阅读(197)  评论(0编辑  收藏  举报