Un método automatizado basado en la búsqueda guiada por el gradiente para crear indicaciones para un conjunto diverso de tareas de PNL. AutoPrompt demuestra que los modelos de lenguaje enmascarados (MLM) tienen una capacidad innata para realizar análisis de sentimientos, inferencia del lenguaje natural, recuperación de hechos y extracción de relaciones. Visite nuestro sitio web para obtener el documento y más información.
conda create -n autoprompt -y python=3.7 && conda activate autoprompt
Instale los paquetes requeridos
pip install -r requirements.txt
También descargue el modelo de Spacy
python -m spacy download en
Los conjuntos de datos para análisis de sentimientos, NLI, recuperación de hechos y extracción de relaciones están disponibles para descargar aquí
Hay un par de conjuntos de datos diferentes para la recuperación de hechos y la extracción de relaciones, así que aquí hay breves descripciones de cada uno:
original : Utilizamos el subconjunto T-Rex proporcionado por LAMA como nuestro conjunto de pruebas y reunimos más datos del conjunto de datos T-Rex original que dividimos en conjuntos de tren y desarrollooriginal_rob : Filtramos hechos en original para que cada objeto sea un solo token para Bert y Robertatrex : dividimos los datos adicionales de T-Rex recopilados (para conjuntos de tren/val de original ) en tren, desarrollo, conjuntos de pruebasoriginal para compensar tanto la línea de base como Roberta. También excluimos las relaciones P527 y P1376 porque la línea de base RE no las considera. Se construye un aviso mapeando cosas como la entrada original y los tokens de activación a una plantilla que se parece a algo así como
[CLS] {sub_label} [T] [T] [T] [P]. [SEP]
El ejemplo anterior es una plantilla para generar indicaciones de recuperación de hechos con 3 tokens de activación donde {sub_label} es un marcador de posición para el sujeto en cualquier triplete (sujeto, relación, objeto) de hecho. [P] denota la colocación de un token especial [MASK] que se utilizará para "llenar el modelo de idioma". Cada token de activación en el conjunto de tokens de activación que se comparten en todas las indicaciones se denota por [T] .
Dependiendo del modelo de idioma (es decir, Bert o Roberta) que elija generar indicaciones, los tokens especiales serán diferentes. Para Bert, Stick [CLS] y [SEP] a cada extremo de la plantilla. Para Roberta, use <s> y </s> en su lugar.
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
Para el análisis de sentimientos
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'
Para 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
Clon nuestra bifurcación del repositorio de Lama y siga las instrucciones para establecerlo fuera del repositorio de autoprocrompt. Recomendamos crear un entorno de condena separado para LAMA debido a diferentes dependencias y requisitos.
Copie la carpeta de datos AutoPrompt en el directorio data de LAMA o establezca data_path_pre en scripts/run_experiments.py en una ubicación de datos personalizado.
Para que Lama trabaje con Roberta, ejecute los siguientes comandos:
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
Actualizar el archivo data/relations.jsonl con sus propias indicaciones generadas automáticamente
Para cambiar la configuración de evaluación, vaya a scripts/run_experiments.py y actualice los valores configurables en consecuencia. Nota: Cada una de las configuraciones configurables está marcada con un comentario [CONFIGURABLE] .
LMs en la parte superior del archivocommon_vocab_filename al archivo apropiado. Cualquier cosa que evalúe tanto Bert como Roberta requiere que este campo sea common_vocab_cased_rob.txt en lugar de lo habitual common_vocab_cased.txt .use_ctx en True si ejecuta evaluación para la extracción de relacionessynthetic a True para la evaluación de oraciones perturbadas para la extracción de relacionesget_TREx_parameters , establezca data_path_pre en la ruta de datos correspondiente (EG "../data/relation_extraction" para la extracción de relación)Ejecutar el código de evaluación
python scripts/run_experiments.py
Establezca PYTHONPATH si ocurre el siguiente error: 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}
}