Une méthode automatisée basée sur la recherche guidée par gradient pour créer des invites pour un ensemble diversifié de tâches NLP. AutoPrompt démontre que les modèles de langage masqué (MLMS) ont une capacité innée à effectuer l'analyse des sentiments, l'inférence du langage naturel, la récupération des faits et l'extraction de relations. Consultez notre site Web pour le journal et plus d'informations.
conda create -n autoprompt -y python=3.7 && conda activate autoprompt
Installez les packages requis
pip install -r requirements.txt
Téléchargez également le modèle spacy
python -m spacy download en
Les ensembles de données pour l'analyse des sentiments, le NLI, la récupération des faits et l'extraction de relations sont disponibles en téléchargement ici
Il existe quelques ensembles de données différents pour la récupération des faits et l'extraction de relations, alors voici de brefs aperçus de chacun:
original : Nous avons utilisé le sous-ensemble T-Rex fourni par LAMA comme ensemble de tests et avons rassemblé plus de faits de l'ensemble de données T-REX d'origine que nous avons partitionné dans des ensembles de train et de développeursoriginal_rob : Nous avons filtré les faits dans original afin que chaque objet soit un jeton unique pour Bert et Robertatrex : Nous avons divisé les données T-Rex supplémentaires collectées (pour les ensembles de train / val d' originaloriginal pour compenser à la fois la ligne de base Re et Roberta. Nous avons également exclu les relations P527 et P1376 parce que la ligne de base RE ne les considère pas. Une invite est construite en mappant des choses comme les jetons d'entrée et de déclenchement d'origine sur un modèle qui ressemble à quelque chose
[CLS] {sub_label} [T] [T] [T] [P]. [SEP]
L'exemple ci-dessus est un modèle pour générer des invites de récupération de faits avec 3 jetons de déclenchement où {sub_label} est un espace réservé pour le sujet dans n'importe quel triplet (sujet, relation, objet) en fait. [P] désigne le placement d'un jeton [MASK] spécial qui sera utilisé pour «remplir le-linguiste» par le modèle de langue. Chaque jeton de déclenchement dans l'ensemble des jetons de déclenchement qui sont partagés sur toutes les invites sont indiqués par [T] .
Selon le modèle de langue (c'est-à-dire Bert ou Roberta) que vous choisissez de générer des invites, les jetons spéciaux seront différents. Pour Bert, Stick [CLS] et [SEP] à chaque extrémité du modèle. Pour Roberta, utilisez à la place <s> et </s> .
python -m autoprompt.create_trigger
--train glue_data/SST-2/train.tsv
--dev glue_data/SST-2/dev.tsv
--template '<s> {sentence} [T] [T] [T] [P] . </s>'
--label-map '{"0": ["Ġworse", "Ġincompetence", "ĠWorse", "Ġblamed", "Ġsucked"], "1": ["ĠCris", "Ġmarvelous", "Ġphilanthrop", "Ġvisionary", "Ġwonderful"]}'
--num-cand 100
--accumulation-steps 30
--bsz 24
--eval-size 48
--iters 180
--model-name roberta-large
python -m autoprompt.create_trigger --train SICK_TRAIN_ALL_S.tsv --dev SICK_DEV_ALL_S.tsv --template '<s> {sentence_A} [P] [T] [T] [T] [T] {sentence_B} </s>' --label-map '{"ENTAILMENT": ["u0120Taiwan", "u0120Ara", "abet"], "CONTRADICTION": ["u0120Only", "u0120Didn", "u0120BUT"], "NEUTRAL": ["icy", "oder", "agna"]}' --bsz 120 --model-name roberta-large
python -m autoprompt.create_trigger
--train $path/train.jsonl
--dev $path/dev.jsonl
--template '<s> {sub_label} [T] [T] [T] [P] . </s>'
--num-cand 10
--accumulation-steps 1
--model-name roberta-large
--bsz 56
--eval-size 56
--iters 1000
--label-field 'obj_label'
--tokenize-labels
--filter
--print-lama
python -m autoprompt.create_trigger
--train $path/train.jsonl
--dev $path/dev.jsonl
--template '[CLS] {context} [SEP] {sub_label} [T] [T] [T] [P] . [SEP]'
--num-cand 10
--accumulation-steps 1
--model-name bert-base-cased
--bsz 32
--eval-size 32
--iters 500
--label-field 'obj_label'
--tokenize-labels
--filter
--print-lama
--use-ctx
Pour l'analyse des sentiments
python -m autoprompt.label_search --train ../data/SST-2/train.tsv --template '[CLS] {sentence} [T] [T] [T] [P]. [SEP]' --label-map '{"0": 0, "1": 1}' --iters 50 --model-name 'bert-base-cased'
Pour NLI
python -m autoprompt.label_search --train ../data/SICK-E-balanced/3-balance/SICK_TRAIN_ALL_S.tsv --template '<s> {sentence_A} [P] [T] [T] [T] [T] {sentence_B} </s>' --label-map '{"ENTAILMENT": 0, "CONTRADICTION": 1, "NEUTRAL": 2}' --iters 50 --model-name roberta-large
Clone Notre fourche du repo lama et suivez les instructions pour l'installer à l'extérieur du référentiel automatique. Nous avons recommandé de créer un environnement conda séparé pour LAMA en raison de différentes dépendances et exigences.
Copiez le dossier de données AutoPrompt dans le répertoire data de LAMA ou définissez data_path_pre dans scripts/run_experiments.py vers un emplacement de données personnalisé.
Afin de faire fonctionner Lama avec Roberta, exécutez les commandes suivantes:
mkdir pre-trained_language_models/roberta
cd pre-trained_language_models/roberta
curl -O https://dl.fbaipublicfiles.com/fairseq/models/roberta.large.tar.gz
tar -xvzf roberta.large.tar.gz
Mettez à jour le fichier data/relations.jsonl avec vos propres invites générées automatiquement
Pour modifier les paramètres d'évaluation, accédez à scripts/run_experiments.py et mettez à jour les valeurs configurables en conséquence. Remarque: Chacun des paramètres configurables est marqué d'un commentaire [CONFIGURABLE] .
LMs en haut du fichiercommon_vocab_filename dans le fichier approprié. Tout ce qui évalue à la fois Bert et Roberta nécessite que ce champ soit common_vocab_cased_rob.txt au lieu de la common_vocab_cased.txt habituelle.use_ctx sur True si l'exécution de l'évaluation pour l'extraction de relationsynthetic sur True pour l'évaluation des phrases perturbée pour l'extraction de relationget_TREx_parameters , définissez data_path_pre sur le chemin de données correspondant (par exemple "../data/relation_extraction" pour l'extraction de relation)Exécutez le code d'évaluation
python scripts/run_experiments.py
Définissez PYTHONPATH si l'erreur suivante se produit: ModuleNotFoundError: No module named 'lama'
export PYTHONPATH="${PYTHONPATH}:/path/to/the/AutoPrompt/repo"
@inproceedings{autoprompt:emnlp20,
author = {Taylor Shin and Yasaman Razeghi and Robert L. Logan IV and Eric Wallace and Sameer Singh},
title = { {AutoPrompt}: Eliciting Knowledge from Language Models with Automatically Generated Prompts },
booktitle = {Empirical Methods in Natural Language Processing (EMNLP)},
year = {2020}
}