深度學(xué)習(xí)NLP文本摘要的完整介紹(含代碼示例)
本文將要介紹抽象文本摘要任務(wù)的推理過程,以及來自HuggingFace的示例代碼。

什么是自動文本摘要?
它是一個捕獲文檔最重要部分(如新聞、書籍、文章等)并生成包含該信息的較短文本的過程。
有兩種類型的文本摘要
Extractive: 它從源文檔中選擇一些句子,并使用它們作為摘要。通常是使用排名功能來評估每個句子,并挑選出最高的分數(shù)的成為摘要。
Abstractive: 這種方法是,我們使用生成模型來形成一個新的句子來描述文檔。(就想我們做全文中心總結(jié)一樣)
?

Figure 1.?
提取和抽象摘要方法之間的區(qū)別。
提取算法選擇文檔的第一句話作為摘要,
但抽象模型使用文檔中的詞(如姓名、位置等)
和它自己的詞(如克服)來形成摘要。
?
?? 下面開始學(xué)習(xí)如何進行摘要式的總結(jié)

使用什么架構(gòu)
文本摘要任務(wù)的主要架構(gòu)稱為序列到序列(seq2seq),它具有圖2所示的六個主要組件。

Figure 2
The Encoder-Decoder Architecture
輸入:
它是我們要匯總的標記化源文檔。什么是標記化?將文檔中的每個單詞轉(zhuǎn)換為代表它的數(shù)字的過程。
相關(guān)知識點:
https://nlpiation.medium.com/how-to-use-huggingfaces-transformers-pre-trained-tokenizers-e029e8d6d1fa
編碼器/表示
該塊處理源文檔并創(chuàng)建一個固定大小的高維張量來表示它。此表示包含有關(guān)文本的上下文信息,這些信息也可用于不同的下游任務(wù),如分類(使用編碼器頂部的線性層而不是解碼器)。編碼器在訓(xùn)練期間學(xué)習(xí)語言和單詞之間的關(guān)系。
相關(guān)知識點:
https://medium.com/mlearning-ai/what-are-the-differences-in-pre-trained-transformer-base-models-like-bert-distilbert-xlnet-gpt-4b3ea30ef3d7
解碼器/線性層/輸出
一種生成模型,它使用上述表示一次編寫一個標記的摘要。解碼器的輸出將是一個與分詞器詞匯表大小相同的張量,其中包含每個索引成為下一個預(yù)測標記的概率(使用線性層)。
seq2seq 架構(gòu)可以使用不同的構(gòu)建塊來形成編碼器/解碼器模型。不久前我們主要使用 LSTM/GRU 單元,而現(xiàn)在,Transformer網(wǎng)絡(luò)是顯而易見的選擇。

它是如何工作的?
我將使用 Huggingface庫和預(yù)訓(xùn)練的BART[1]模型來展示模型如何生成每個標記以形成摘要,而不會詳細介紹模型的實現(xiàn)和子模塊。
第一步是加載編碼器、解碼器和線性層部分。
讓我們加載模型并打印出來以查找所有子模塊的名稱(圖片和代碼結(jié)合起來看):

BART 模型具有三個主要組件:編碼器 (12 layers), 解碼器 (12 layers), 和 lm_head (我們稱之為線性層)。您可以輕松地使用體系結(jié)構(gòu)的特定部分model.model.encoder,model.model.decoder,and model.lm_head。Huggingface 內(nèi)置函數(shù)可以更靈活地訪問編碼器和解碼器。
如下所示:
最后一個準備步驟是加載示例文章并使用 BART 分詞器對其進行分詞。它可以通過加載預(yù)訓(xùn)練的標記器并調(diào)用它來完成。
相關(guān)知識點:
https://nlpiation.medium.com/how-to-use-huggingfaces-transformers-pre-trained-tokenizers-e029e8d6d1fa
現(xiàn)在我們有了開始生成摘要的所有部分。這個過程首先使用編碼器對文章進行編碼以創(chuàng)建我們的表示。這一步只會做一次,因為文章不會改變!(將使用相同的表示來生成所有token)
解碼器組件是負責(zé)生成摘要的單元。生成過程首先通過傳遞 <bos>(句子的開頭)標記來啟動該過程,然后一次一個標記以完成摘要。
以下代碼的含義是“根據(jù)文章的編碼表示預(yù)測 <bos> 標記之后的單詞”。
logits.argmax(1)將從所有概率中選擇最可能的token,并返回token ?id。在我們的例子中,它將返回與 BART 詞匯表中的標記“ se ”相對應(yīng)的1090。
我們成功生成了摘要的第一個token。 通過將start_token從僅有的<bos>更改為同時具有兩個[<bos>,se]的張量,也可以很容易地預(yù)測第二個標。
這種方法稱為貪心搜索,是最簡單的推理方法。
了解有關(guān)不同策略的更多信息:
https://huggingface.co/blog/how-to-generate
讓我們使用 Huggingface 的內(nèi)置generate()功能來處理這個重復(fù)性任務(wù)。
因此,該模型試圖通過預(yù)測單詞“se”來生成名稱“sebastian”。一些分詞器會將單詞分解成更小的塊,使詞匯量更小,從而使模型的參數(shù)計數(shù)更低。
BART(最好的預(yù)訓(xùn)練總結(jié)模型之一)在生成良好總結(jié)方面是正確的。它已經(jīng)從這篇文章中提取了一些關(guān)鍵信息。您可以通過使用諸如max_length(生成更長的文本)、num_beam(使用光束搜索而不是貪心)和no_repeat_ngram_size(避免重復(fù))之類的變量來提高模型輸出的質(zhì)量。
?? 代碼可在Google Colab的notebook中找到
https://colab.research.google.com/drive/1CUWAW3sb5jYsxi62t3dGDYTgH6uy90xe?usp=sharing

總結(jié)
以上演示了sequence-to-sequence如何使用示例代碼在文本摘要任務(wù)中對推理文本進行建模(逐步),這篇文章的重點是推理。

參考文檔:
[1] Lewis, Mike, et al. “Bart: Denoising sequence-to-sequence pre-training for natural language generation, translation, and comprehension.” arXiv preprint arXiv:1910.13461 (2019).
原文鏈接:
https://pub.towardsai.net/a-full-introduction-on-text-summarization-using-deep-learning-with-sample-code-ft-huggingface-d21e0336f50c
免責(zé)聲明:所載內(nèi)容來源互聯(lián)網(wǎng),僅供參考。轉(zhuǎn)載稿件版權(quán)歸原作者和機構(gòu)所有,如有侵權(quán),請聯(lián)系我們刪除。
覺得有用就點贊吧!
每天18:30分更新
關(guān)注學(xué)姐+星標+在看
不迷路看好文
