BART-Modell zur Textzusammenfassung
Einführung
Selbstüberwachte Ansätze haben viele verschiedene Arten von NLP-Aufgaben erledigt.
Die Rauschunterdrückung von Autoencodern, die darauf trainiert sind, Text wiederherzustellen, wenn eine zufällige Teilmenge von Wörtern maskiert wurde, hat sich als die effektivste Methode erwiesen.
In neueren Arbeiten wurden Fortschritte nachgewiesen, indem die Maskierungsverteilung, die Reihenfolge der Maskierungsvorhersagen und der Kontext zum Ersetzen von Maskierungstokens verbessert wurden.
Obwohl diese Ansätze vielversprechend sind, beschränken sie sich in ihrem Umfang oft auf nur wenige unterschiedliche Aufgaben (z. B. Span-Vorhersage, Span-Erstellung usw.).
Voraussetzungen
Um diesem Artikel folgen zu können, benötigen Sie Erfahrung mit Python-Code und ein Anfängerverständnis von Deep Learning. Wir gehen davon aus, dass alle Leser Zugang zu ausreichend leistungsfähigen Maschinen haben, sodass sie den bereitgestellten Code ausführen können.
Wenn Sie keinen Zugriff auf eine GPU haben, empfehlen wir den Zugriff über die Cloud. Es gibt viele Cloud-Anbieter, die GPUs anbieten. DigitalOcean GPU Droplets sind derzeit in der Frühverfügbarkeit. Erfahren Sie hier mehr und melden Sie sich für Interesse an GPU Droplets an
Für Anweisungen zum Einstieg in den Python-Code empfehlen wir Ihnen, diesen Leitfaden für Einsteiger auszuprobieren, um Ihr System einzurichten und sich auf die Ausführung von Einsteiger-Tutorials vorzubereiten.
Was ist das BART-Transformer-Modell im NLP?
In diesem Artikel wird BART vorgestellt, eine Pre-Training-Methode, die bidirektionale und autoregressive Transformatoren kombiniert. BART ist ein Autoencoder zur Rauschunterdrückung, der ein Sequenz-zu-Sequenz-Paradigma verwendet, was ihn für verschiedene Anwendungen nützlich macht. Das Vortraining besteht aus zwei Phasen: (1) Text wird mithilfe einer willkürlichen Rauschfunktion beschädigt und (2) ein Sequenz-zu-Sequenz-Modell wird erlernt, um den Originaltext zu rekonstruieren.
Die transformatorbasierte neuronale maschinelle Übersetzungsarchitektur von BART kann als Verallgemeinerung von BERT (aufgrund des bidirektionalen Encoders), GPT (mit dem Links-nach-rechts-Decoder) und vielen anderen modernen Pre-Training-Ansätzen angesehen werden.
Quelle
Zusätzlich zu seiner Stärke bei Verständnisaufgaben steigt die Effektivität von BART mit der Feinabstimmung der Textgenerierung. Es generiert neue hochmoderne Ergebnisse zu verschiedenen abstrakten Konversations-, Fragebeantwortungs- und Zusammenfassungsaufgaben und gleicht die Leistung von RoBERTa mit vergleichbaren Schulungsressourcen zu GLUE und SQuAD ab.
Architektur
Abgesehen von der Änderung der ReLU-Aktivierungsfunktionen in GeLUs und der Initialisierung von Parametern von (0, 0,02) folgt BART dem allgemeinen Sequenz-zu-Sequenz-Transformer-Design (Vaswani et al., 2017). Es gibt sechs Schichten im Encoder und Decoder für das Basismodell und jeweils zwölf Schichten für das große Modell.
Ähnlich wie bei der in BERT verwendeten Architektur bestehen die beiden Hauptunterschiede darin, dass (1) bei BERT jede Schicht des Decoders zusätzlich eine Queraufmerksamkeit gegenüber der letzten verborgenen Schicht des Encoders ausführt (wie im Transformer-Sequenz-zu-Sequenz-Modell). ; und (2) in BERT wird vor der Wortvorhersage ein zusätzliches Feed-Forward-Netzwerk verwendet, während dies in BART nicht der Fall ist.
BART vor dem Training
Um BART zu trainieren, verfälschen wir zunächst Dokumente und optimieren dann einen Rekonstruktionsverlust, bei dem es sich um die Kreuzentropie zwischen der Ausgabe des Decoders und dem Originaldokument handelt. Im Gegensatz zu herkömmlichen Autoencodern zur Rauschunterdrückung kann BART für jede Art von Dokumentbeschädigung verwendet werden.
Das schlimmste Szenario für BART ist der Verlust aller Quellinformationen, was einem Sprachmodell entspricht. Die Forscher probieren verschiedene neue und alte Transformationen aus, glauben aber auch, dass noch viel Raum für die Schaffung noch einzigartigerer Alternativen besteht.
Im Folgenden werden wir die von ihnen durchgeführten Transformationen skizzieren und einige Beispiele liefern. Nachfolgend finden Sie eine Zusammenfassung der verwendeten Transformationen. Einige der Ergebnisse werden in der Abbildung veranschaulicht.
- Token-Maskierung: Nach BERT werden zufällige Token abgetastet und durch MASK-Elemente ersetzt.
- Token-Löschung: Zufällige Token werden aus der Eingabe gelöscht. Im Gegensatz zur Token-Maskierung muss das Modell vorhersagen, an welchen Positionen Eingaben fehlen.
- Textfüllung: Mehrere Textabschnitte werden abgetastet, wobei die Abschnittslängen aus einer Poisson-Verteilung (λ=3) ermittelt werden. Jeder Span wird durch ein einzelnes MASK-Token ersetzt. Durch das Ausfüllen von Text lernt das Modell, vorherzusagen, wie viele Token in einer Spanne fehlen.
- Satzpermutation: Ein Dokument wird anhand von Punkten in Sätze unterteilt, und diese Sätze werden in zufälliger Reihenfolge gemischt.
- Dokumentrotation: Ein Token wird einheitlich zufällig ausgewählt und das Dokument wird so gedreht, dass es mit diesem Token beginnt. Diese Aufgabe trainiert das Modell, den Anfang des Dokuments zu identifizieren.
Quelle
Feinabstimmung von BART
Es gibt mehrere mögliche Verwendungsmöglichkeiten für die Darstellungen, die BART in nachfolgenden Verarbeitungsschritten generiert:
- Sequenzklassifizierungsaufgaben: Bei Sequenzklassifizierungsproblemen wird die gleiche Eingabe in den Encoder und Decoder eingespeist und die endgültigen verborgenen Zustände des letzten Decoder-Tokens werden in den neuen linearen Multiklassen-Klassifikator eingespeist.
Quelle
- Token-Klassifizierungsaufgaben: Sowohl der Encoder als auch der Decoder nehmen das gesamte Dokument als Eingabe und aus dem obersten verborgenen Zustand des Decoders wird eine Darstellung jedes Wortes abgeleitet. Die Klassifizierung des Tokens hängt von seiner Darstellung ab.
- Aufgaben zur Sequenzgenerierung: Für sequenzgenerierende Aufgaben wie die Beantwortung abstrakter Fragen und das Zusammenfassen von Text ermöglicht der autoregressive Decoder von BART eine direkte Feinabstimmung. Beide Aufgaben stehen im Zusammenhang mit dem Ziel der Rauschunterdrückung vor dem Training, da sie das Kopieren und anschließende Bearbeiten von Eingabedaten beinhalten. Dabei dient die Eingabesequenz als Eingabe für den Encoder, während der Decoder autoregressiv Ausgaben generiert.
- Maschinelle Übersetzung: Die Forscher untersuchen die Machbarkeit der Verwendung von BART zur Verbesserung von Decodern für maschinelle Übersetzung für die Übersetzung ins Englische. Die Verwendung vorab trainierter Encoder führt nachweislich zu einer Verbesserung von Modellen, während die Vorteile der Integration vorab trainierter Sprachmodelle in Decoder eher begrenzt sind. Mithilfe einer Reihe von Encoder-Parametern, die aus Bitext gelernt wurden, zeigen sie, dass das gesamte BART-Modell als einzelner vorab trainierter Decoder für die maschinelle Übersetzung verwendet werden kann. Genauer gesagt tauschen sie die Einbettungsschicht des BART-Encoders durch einen brandneuen Encoder mit zufälliger Initialisierung aus. Wenn das Modell von Anfang bis Ende trainiert wird, wird der neue Encoder darauf trainiert, Fremdwörter in eine Eingabe abzubilden, die BART dann ins Englische übersetzen kann. In beiden Trainingsphasen wird der Kreuzentropieverlust von der Ausgabe des BART-Modells zurückpropagiert, um den Quellencoder zu trainieren. In der ersten Phase korrigieren sie die meisten BART-Parameter und aktualisieren nur den zufällig initialisierten Quellencoder, die BART-Positionseinbettungen und die Selbstaufmerksamkeits-Eingabeprojektionsmatrix der ersten Ebene des BART-Encoders. Zweitens führen sie eine begrenzte Anzahl von Trainingsiterationen für alle Modellparameter durch.
Quelle
BART-Modell zur Textzusammenfassung
Es dauert lange, bis ein Rechercheur oder Journalist alle ausführlichen Informationen im Internet durchforstet und findet, was er braucht. Sie können Zeit und Energie sparen, indem Sie die Höhepunkte umfangreicher Literatur mit einer Zusammenfassung oder paraphrasierten Zusammenfassung überfliegen.
Die NLP-Aufgabe, Texte zusammenzufassen, kann mithilfe von Transformatormodellen automatisiert werden. Um dieses Ziel zu erreichen, gibt es extraktive und abstrahierende Techniken. Bei der extraktiven Zusammenfassung eines Dokuments geht es darum, die kritischsten Aussagen im Text zu finden und aufzuschreiben. Man kann dies als eine Art Informationsabruf klassifizieren. Anspruchsvoller als eine wörtliche Zusammenfassung ist die abstrakte Zusammenfassung, bei der es darum geht, das gesamte Material zu erfassen und einen umschriebenen Text bereitzustellen, der die wichtigsten Punkte zusammenfasst. Die zweite Art der Zusammenfassung erfolgt durch Transformatormodelle wie BART.
HuggingFace bietet uns schnellen und einfachen Zugriff auf Tausende vorab trainierter und fein abgestimmter Gewichte für Transformer-Modelle, einschließlich BART. Sie können ein maßgeschneidertes BART-Modell für die Textzusammenfassungsaufgabe auf der HuggingFace-Modell-Explorer-Website auswählen. Jedes eingereichte Modell enthält eine detaillierte Beschreibung seiner Konfiguration und seines Trainings. Das einsteigerfreundliche Bart-Large-CNN-Modell verdient einen Blick, also schauen wir es uns an. Verwenden Sie entweder die HuggingFace-Installationsseite oder führen Sie pip install Transformers aus, um zu beginnen. Als Nächstes folgen wir diesen drei einfachen Schritten, um unsere Zusammenfassung zu erstellen:
from transformers import pipeline
summarizer = pipeline("summarization", model="facebook/bart-large-cnn")
Die Transformers-Modellpipeline sollte zuerst geladen werden. Das Modul in der Pipeline wird durch Benennung der Aufgabe und des Modells definiert. Es wird der Begriff „Zusammenfassung“ verwendet und das Modell wird als „facebook/bart-large-xsum“ bezeichnet. „Wenn wir etwas anderes als den Standard-Nachrichtendatensatz ausprobieren möchten, können wir den Extreme Summary (XSum)-Datensatz verwenden. Das Modell wurde darauf trainiert, ausschließlich Zusammenfassungen mit einem Satz zu erstellen.
Der letzte Schritt besteht darin, eine Eingabesequenz zu erstellen und sie mithilfe der summarizer()-Pipeline auf Herz und Nieren zu testen. In Bezug auf Token kann die Zusammenfassungslänge auch mithilfe der optionalen Argumente max_length und min_length der Funktion angepasst werden.
from transformers import pipeline
summarizer = pipeline("summarization", model="facebook/bart-large-cnn")
ARTICLE = """ New York (CNN)When Liana Barrientos was 23 years old, she got married in Westchester County, New York.
A year later, she got married again in Westchester County, but to a different man and without divorcing her first husband.
Only 18 days after that marriage, she got hitched yet again. Then, Barrientos declared "I do" five more times, sometimes only within two weeks of each other.
In 2010, she married once more, this time in the Bronx. In an application for a marriage license, she stated it was her "first and only" marriage.
Barrientos, now 39, is facing two criminal counts of "offering a false instrument for filing in the first degree," referring to her false statements on the
2010 marriage license application, according to court documents.
Prosecutors said the marriages were part of an immigration scam.
On Friday, she pleaded not guilty at State Supreme Court in the Bronx, according to her attorney, Christopher Wright, who declined to comment further.
After leaving court, Barrientos was arrested and charged with theft of service and criminal trespass for allegedly sneaking into the New York subway through an emergency exit, said Detective
Annette Markowski, a police spokeswoman. In total, Barrientos has been married 10 times, with nine of her marriages occurring between 1999 and 2002.
All occurred either in Westchester County, Long Island, New Jersey or the Bronx. She is believed to still be married to four men, and at one time, she was married to eight men at once, prosecutors say.
Prosecutors said the immigration scam involved some of her husbands, who filed for permanent residence status shortly after the marriages.
Any divorces happened only after such filings were approved. It was unclear whether any of the men will be prosecuted.
The case was referred to the Bronx District Attorney\'s Office by Immigration and Customs Enforcement and the Department of Homeland Security\'s
Investigation Division. Seven of the men are from so-called "red-flagged" countries, including Egypt, Turkey, Georgia, Pakistan and Mali.
Her eighth husband, Rashid Rajput, was deported in 2006 to his native Pakistan after an investigation by the Joint Terrorism Task Force.
If convicted, Barrientos faces up to four years in prison. Her next court appearance is scheduled for May 18.
"""
print(summarizer(ARTICLE, max_length=130, min_length=30, do_sample=False))
Output:
[{'summary_text': 'Liana Barrientos, 39, is charged with two counts of "offering a false instrument for filing in the first degree" In total, she has been married 10 times, with nine of her marriages occurring between 1999 and 2002. She is believed to still be married to four men.'}]
Eine weitere Möglichkeit besteht darin, BartTokenizer zum Generieren von Tokens aus Textsequenzen und BartForConditionalGeneration zum Zusammenfassen zu verwenden.
# Importing the model
from transformers import BartForConditionalGeneration, BartTokenizer, BartConfig
As a pre-trained model, " bart-large-cnn" is optimized for the summary job.
The **from_pretrained()** function is used to load the model, as seen below.
# Tokenizer and model loading for bart-large-cnn
tokenizer=BartTokenizer.from_pretrained('facebook/bart-large-cnn')
model=BartForConditionalGeneration.from_pretrained('facebook/bart-large-cnn')
Angenommen, Sie müssen denselben Text wie im obigen Beispiel zusammenfassen. Zu diesem Zweck können Sie die Funktion batch_encode_plus() des Tokenizers nutzen. Beim Aufruf erstellt diese Methode ein Wörterbuch, das die codierte Sequenz oder das Sequenzpaar und alle anderen bereitgestellten Informationen speichert.
Wie können wir die kürzestmögliche Sequenz einschränken, die zurückgegeben werden kann?
Legen Sie in batch_encode_plus() den Wert des Parameters max_length fest. Um die ids der zusammenfassenden Ausgabe zu erhalten, geben wir die input_ids in die Funktion model.generate() ein.
# Transmitting the encoded inputs to the model.generate() function
inputs = tokenizer.batch_encode_plus([ARTICLE],return_tensors='pt')
summary_ids = model.generate(inputs['input_ids'], num_beams=4, max_length=150, early_stopping=True)
Die Zusammenfassung des Originaltextes wurde als Folge von ids durch die Methode model.generate() generiert. Die Funktion model.generate() hat viele Parameter, darunter:
- input_ids: Die Sequenz, die als Eingabeaufforderung für die Generierung verwendet wird.
- max_length: Die maximale Länge der zu generierenden Sequenz. Zwischen min_length und unendlich. Standardmäßig 20.
- min_length: Die Mindestlänge der zu generierenden Sequenz. Zwischen 0 und unendlich. Standardmäßig 0.
- num_beams: Anzahl der Strahlen für die Strahlensuche. Muss zwischen 1 und unendlich liegen. 1 bedeutet keine Strahlsuche. Standardmäßig 1.
- early_stopping: wenn auf True gesetzt, wird die Beam-Suche gestoppt, wenn mindestens num_beams Sätze pro Stapel beendet sind.
Mit der Funktion decode() kann die ids-Sequenz in Klartext umgewandelt werden.
# Decoding and printing the summary
summary = tokenizer.decode(summary_ids[0], skip_special_tokens=True)
print(summary)
Das decode() wandelt eine Liste von Listen mit Token-IDs in eine Liste von Zeichenfolgen um. Es akzeptiert mehrere Parameter, von denen wir zwei erwähnen möchten:
- token_ids: Liste der tokenisierten Eingabe-ids.
- skip_special_tokens: Gibt an, ob spezielle Token bei der Dekodierung entfernt werden sollen oder nicht.
Als Ergebnis erhalten wir Folgendes:
Liana Barrientos, 39, is charged with two counts of offering a false instrument for filing in the first degree. In total, she has been married 10 times, with nine of her marriages occurring between 1999 and 2002. At one time, she was married to eight men at once, prosecutors say.
Zusammenfassen von Dokumenten mit BART mit ktrain
ktrain ist ein Python-Paket, das die Menge an Code reduziert, die für die Implementierung von maschinellem Lernen erforderlich ist. Es umfasst TensorFlow und andere Bibliotheken und zielt darauf ab, hochmoderne ML-Modelle für Nicht-Experten zugänglich zu machen und gleichzeitig die Bedürfnisse von Experten auf diesem Gebiet zu erfüllen. Mit der optimierten Benutzeroberfläche von ktrain können Sie eine Vielzahl von Problemen mit nur drei oder vier „Befehlen“ oder Codezeilen lösen, unabhängig davon, ob es sich bei den Daten, mit denen gearbeitet wird, um Text-, visuelle, grafische oder tabellarische Daten handelt.
Mithilfe eines vorab trainierten BART-Modells aus der Transformers-Bibliothek kann ktrain Text zusammenfassen. Zuerst erstellen wir eine TransformerSummarizer-Instanz, um die eigentliche Zusammenfassung durchzuführen. (Bitte beachten Sie, dass zur Nutzung dieser Funktion die Installation von PyTorch erforderlich ist.)
from ktrain.text.summarization import TransformerSummarizer
ts = TransformerSummarizer()
Lasst uns einen Artikel verfassen:
article = """ Saturn orbiter and Titan atmosphere probe. Cassini is a joint
NASA/ESA project designed to accomplish an exploration of the Saturnian
system with its Cassini Saturn Orbiter and Huygens Titan Probe. Cassini
is scheduled for launch aboard a Titan IV/Centaur in October of 1997.
After gravity assists of Venus, Earth and Jupiter in a VVEJGA
trajectory, the spacecraft will arrive at Saturn in June of 2004. Upon
arrival, the Cassini spacecraft performs several maneuvers to achieve an
orbit around Saturn. Near the end of this initial orbit, the Huygens
Probe separates from the Orbiter and descends through the atmosphere of
Titan. The Orbiter relays the Probe data to Earth for about 3 hours
while the Probe enters and traverses the cloudy atmosphere to the
surface. After the completion of the Probe mission, the Orbiter
continues touring the Saturnian system for three and a half years. Titan
synchronous orbit trajectories will allow about 35 flybys of Titan and
targeted flybys of Iapetus, Dione and Enceladus. The objectives of the
mission are threefold: conduct detailed studies of Saturn's atmosphere,
rings and magnetosphere; conduct close-up studies of Saturn's
satellites, and characterize Titan's atmosphere and surface."""
We can now summarize this article by using TransformerSummarizer instance:
ts.summarize(article)
Abschluss
Bevor wir uns mit der BART-Architektur und den Trainingsdaten befassen, skizzierte dieser Artikel die Herausforderung, die BART zu beantworten versucht, und die Methodik, die zu seiner herausragenden Leistung führt. Wir haben uns auch ein Demo-Inferenzbeispiel mit HuggingFace, ktrain und der Python-Implementierung von BART angesehen. Dieser Überblick über Theorie und Code verschafft Ihnen einen großen Vorsprung, indem er Ihnen ermöglicht, ein leistungsstarkes Transformer-basiertes seq2seq-Modell in Python zu erstellen.
Referenzen
https://huggingface.co/transformers/v2.11.0/model_doc/bart.html
https://arxiv.org/abs/1910.13461
https://www.projectpro.io/article/transformers-bart-model-explained/553
https://github.com/amaiya/ktrain
https://www.machinelearningplus.com/nlp/text-summarization-approaches-nlp-example/