1. 程式人生 > 其它 >NLP 進行文字摘要的三種策略程式碼實現和對比:TextRank vs Seq2Seq vs BART

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