Quellcode für das ACL 2022 -Papier "Kohärenzverleihung: Wenn Ihr vorgezogenes Sprachmodell nicht genug Aufmerksamkeit schenkt" (Arxiv, ACL -Anthologie)
Die semantische Kohärenz der langfristigen Langstreckenkohärenz bleibt eine Herausforderung für die automatische Sprachgenerierung und -verständnis. Wir zeigen, dass große Sprachmodelle die Wirkung entfernter Wörter auf die nächste Vorhersage unzureichend gelernt haben. Wir präsentieren Kohärenzschubs , ein Inferenzverfahren, das den Fokus eines LM auf einen langen Kontext erhöht. Wir zeigen die Vorteile der Kohärenzverstärkung mit vorbereiteten Modellen durch Verteilungsanalysen generierter ordentlicher Text- und Dialogantworten. Es wurde auch festgestellt, dass die Kohärenzverstärkung mit hochmodernen Modellen für verschiedene Null-Shot-NLP-Aufgaben ohne zusätzliches Training Leistungssteigerungen liefert.
Wenn Sie das Papier und den Code nützlich finden, speichern Sie bitte dieses Repo und zitieren Sie das Papier. Vielen Dank!
@inproceedings { malkin-etal-2022-coherence , title = " Coherence boosting: When your pretrained language model is not paying enough attention " , author = " Malkin, Nikolay and Wang, Zhen and Jojic, Nebojsa " , booktitle = " Proceedings of the 60th Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers) " , month = may, year = " 2022 " , address = " Dublin, Ireland " , publisher = " Association for Computational Linguistics " , url = " https://aclanthology.org/2022.acl-long.565 " , doi = " 10.18653/v1/2022.acl-long.565 " , pages = " 8214--8236 " }Wir präsentieren ein Demo-Programm, um die mangelnde Kohärenz für vorhandene vorgebrachte LMs zu demonstrieren, dh das Nicht-Vorhersagen des nächsten Tokens bei einem Kontext, der eindeutig das Verständnis von entfernten Wörtern erfordert. Solche Fehler können durch unsere vorgeschlagene Kohärenz-Steigerung aufgelöst werden, die das nächste Token kontrastiv vorhersagt, indem er zwei Verteilungen aus dem vollständigen Kontext und einem teilweisen Kontext mischt.
> >> from cb_demo import contrasting > >> contrasting ( model_name = 'gpt2' , context = ' Ballad metre is "less regular and more conversational" than common metre' , - - partial_length = 8 , - - alpha = 0.5 ) [ out ] Top tokens based on full context : Ballad metre is "less regular and more conversational" than common Rank Tokens Logprobs Probs - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 Ġsense - 2.405 9.03 % 2 Ġin - 3.900 2.02 % 3 . - 3.978 1.87 % 4 , - 4.097 1.66 % 5 Ġpractice - 4.287 1.37 % ... ... ... ... 13 Ġmetre ** - 5.098 0.610609 % * * Target Token Top tokens based on partial context : regular and more conversational " than common Rank Tokens Logprobs Probs - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 Ġsense - 2.547 7.83 % 2 ĠEnglish - 3.352 3.50 % 3 . - 3.427 3.25 % 4 Ġconversation - 3.445 3.19 % 5 , - 3.634 2.64 % ... ... ... ... 14103 Ġmetre ** - 13.450 0.000144 % * * Target Token Contrastive next token prediction : Rank Tokens Logprobs Probs - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 Ġmetre ** - 0.923 39.74 % 2 Ġsense - 2.334 9.69 % 3 Ġmeter - 2.785 6.17 % 4 Ġin - 3.210 4.03 % 5 Ġfoot - 3.220 3.99 % * * Target TokenSie können die Ergebnisse für einige Beispiele in Abbildung 1 des Papiers nach dem folgenden Code replizieren:
python cb_demo . py - - context = ' Ballad metre is "less regular and more conversational" than common metre' - - model_name = 'gpt2' - - partial_length = 8 - - alpha = 0.5 python cb_demo . py - - context = ' Isley Brewing Company: Going Mintal — a minty milk chocolate stout' - - model_name = 'gpt2' - - partial_length = 8 - - alpha = 0.5 python cb_demo . py - - context = ' Other times anxiety is not as easy to see, but can still be just as debilitating' - - model_name = 'gpt2' - - partial_length = 8 - - alpha = 0.5-Lambada -Aufgabe erfordern, ähnelt den oben gezeigten Beispielen, bei denen erwartet wird, dass das Modell das endgültige Wort in den Passagen mehrerer Sätze vorhersagt. Dieser Datensatz ist ein Standard -Benchmark, um moderne Langauge -Modelle (Beispiel) zu bewerten.
Noch wichtiger ist, dass diese Aufgabe ausdrücklich das Denken über einen breiten Kontext erfordert: Menschen können das letzte Wort zuverlässig erraten, wenn sie eine ganze Passage erhalten, jedoch nicht, wenn sie nur den letzten Satz gegeben haben. Eine solche Immobilie macht diesen Benchmark zu einem perfekten Testbett, um die Wirksamkeit unserer vorgeschlagenen Kohärenz -Steigerung zu bewerten.
Um die Lambada -Experimente durchzuführen, führen Sie einfach den folgenden Befehl aus:
python main . py - - tasks = 'lambada' - - models = 'gpt2-small' - - use_val = False - - alpha_start = 1 - - alpha_end = 1 - - alpha_step = 0.1 - - slen_start = 10 - - slen_end = 10python main.py --help Argumente werden wie folgt aufgeführt.
--models : Der Name von vorgeborenen Sprachmodellen, die von Semikolon getrennt sind, wenn Sie mehrere Modelle gleichzeitig ausführen möchten, z. B. 'gpt2-small;gpt2-medium' ; Wenn Sie GPT-3-Modelle verwenden möchten, finden Sie Noten zu GPT-3.--use_val : Ob Sie einen Validierungssatz verwenden möchten, um zwei Hyperparameter auszuwählen, alpha und slen , die den Boosting-Koeffizienten und--alpha_start --alpha_step --alpha_end alpha--slen_start --slen_step slen --slen_end Hyperparameter; Beachten Sie, dass beide Hyperparameter -Setups die Inferenzgeschwindigkeit für die Lambada -Aufgabe beeinflussenWir bewerten die vorgeschlagene Kohärenzverständnis der folgenden NLU -Aufgaben.
| Aufgabe | Schließung Aufgaben | Frage Beantwortung | der Textklassifizierung | NLI | FACT -Wissen |
|---|---|---|---|---|---|
| Abrufdatensätze | Storycloze Hellaswag Copa | CommonSenseqa Openbookqa Bogen einfach/Herausforderung PIQA | SST-2/5 TREC Agnews | Rte CB Boolq | Lama |
Die meisten Datensätze können durch die Datensätze des Hugginface geladen werden. Nur wenige von ihnen müssen manuell mit Anweisungen herunterladen, die aufgefordert wurden, wenn Sie den Code ausführen.
Um NLU -Experimente durchzuführen, führen Sie einfach den folgenden Befehl aus:
python main . py - - tasks = 'storycloze;csqa;openbookqa' - - models = 'gpt2-small;gpt2-medium;gpt2-large' - - alpha_start = 2 - - alpha_end = - 3 - - alpha_step = 0.01Einige python main.py --help Argumente werden wie folgt aufgeführt.
--models : Der Name von vorgeborenen Sprachmodellen, 'gpt2-small;gpt2-medium' von Semikolon getrennt sind, wenn Sie mehrere Modelle gleichzeitigalpha slen --use_val--alpha_start --alpha_end --alpha_step : Grid-Suchparameter für den alpha Hyperparameter; Beachten Sie, dass der Code Intermediate-Ergebnisse zwischengewertet und Sie diese Parameter nach dem Ausführen der Inferenz für einmaligeapi_key.txtzusätzlich zu den vorherigen Aufgaben auf Ihre eigenen Multi-Scice-Datensätze an. Unsere Codebasis ist flexibel genug, um einen neuen Multi-Scice-Datensatz mit minialen Bemühungen zu integrieren (inspiriert vom Open-Source-Projekt LM-Evaluation-Harness). Es gibt ungefähr drei Schritte:
__init__.py im tasks .get_contrast_ctxMultipleChoiceTask Klasse mit Datenvorverarbeitungsfunktionen (z. B. load_data , standardize ) erbtwird
Wir bieten ein Generationsmodellverpackungsverpackung, das mit der Suggingface transformers -Bibliothek in generation/generation.py kompatibel ist. Sie können kohärenzgesteuerte Varianten aller autoregressiven LM mit der Klasse im Beispiel-Skript erstellen:
> >> boosted_model = generation . BoostedModel ( base_model , k = 8 , alpha_long = 1.5 , alpha_short = - 0.5 )Das boosted_model kann dann flexibel mit der generate verwendet werden,
> >> ins = T . LongTensor ([ tokenizer . encode ( 'Once upon a midnight dreary,' )]) > >> outputs = boosted_model . generate ( input_ids = ins , do_sample = True , max_length = 100 , top_p = 0.95 ) > >> tokenizer . decode ( outputs [ 0 ]) "Once upon a midnight dreary, while I pondered over these things, I suddenly became aware of a strange and terrible noise. I turned round, and saw that the old man was standing near me. He was wearing a black suit, with a black tie, and a black hat. He had a long, thin, black beard, and his eyes were black. His hair was of a dark brown colour, and was very long. His face was rather large, and his lips were somewhat". Angepasst an Szenarien, in denen der kurze Kontext der aktuell erzeugte Text abzüglich eines Präfixes einer bestimmten Länge ( z . B. der vorherigen Kurve in einer Konversation) ist, indem boosted_model.k dynamisch auf die negative Präfixlänge eingestellt wird.
Wir präsentieren einige Ausgänge der bedingten Generation. Die in Tabelle 1 gezeigten Bewertungsmetriken können mit dem Code aus diesem Repository für die ersten vier Spalten oder den Code für die neuen Langstreckenkohärenzmetriken bewertet werden.
, wenn Sie Fragen haben, wenden Sie sich bitte an Kolya (Nikolay.malkin bei Mila.quebec) und Zhen (Wang.9215 bei Osu.edu).