Автоматизированный метод, основанный на поиске с градиентом для создания подсказок для разнообразного набора задач NLP. AutoPrompt демонстрирует, что модели маскированных языков (MLMS) обладают врожденной способностью выполнять анализ настроений, вывод естественного языка, поиск фактов и извлечение отношений. Ознакомьтесь с нашим веб -сайтом для бумаги и дополнительной информации.
conda create -n autoprompt -y python=3.7 && conda activate autoprompt
Установите необходимые пакеты
pip install -r requirements.txt
Также скачать модель Spacy
python -m spacy download en
Наборы данных для анализа настроений, NLI, поиска фактов и извлечения отношений доступны для загрузки здесь
Существует пара различных наборов данных для поиска фактов и извлечения отношений, поэтому вот краткие обзоры каждого:
original : мы использовали подмножество T-REX, предоставленную LAMA в качестве нашего тестового набора, и собрали больше фактов из оригинального набора данных T-REX, который мы разбили на наборы поездов и разработчиковoriginal_rob : мы отфильтровали факты в original , чтобы каждый объект был единственным токеном как для Берта, так и для Робертыtrex : мы разделили дополнительные данные T-REX, собранные (для наборов поезда/VAL original ) на поезда, разработчик, тестовые наборыoriginal набор данных, чтобы компенсировать как базовую линию, так и Роберту. Мы также исключили отношения P527 и P1376 , потому что базовая линия RE не учитывает их. Подсказка построена путем отображения таких вещей, как исходный ввод и токены триггера с шаблоном, который выглядит как что -то вроде
[CLS] {sub_label} [T] [T] [T] [P]. [SEP]
Приведенный выше пример представляет собой шаблон для генерации подсказок о поиске фактов с 3 токенами триггера, где {sub_label} является заполнителем для субъекта в любом (субъекте, отношении, объекте) триплета, на самом деле поиск. [P] обозначает размещение специального токена [MASK] , который будет использоваться для «заполнения» языковой моделью. Каждый токен триггера в наборе токенов триггеров, которые разделяются во всех подсказках, обозначается [T] .
В зависимости от языковой модели (то есть Bert или Roberta) вы выберете для создания подсказок, специальные токены будут разными. Для Берта придерживайтесь [CLS] и [SEP] к каждому концу шаблона. Для Роберты используйте <s> и </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
Для анализа настроений
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'
Для 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
Клонируйте нашу вилку репо Лама и следуйте указаниям, чтобы установить его за пределами репо AutoPrompt. Мы рекомендовали создать отдельную среду Conda для Lama из -за различных зависимостей и требований.
Скопируйте папку данных AutoPrompt в каталог data LAMA или установите data_path_pre в scripts/run_experiments.py в пользовательское местоположение данных.
Чтобы заставить Ламу работать с Робертой, запустите следующие команды:
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
Обновите файл data/relations.jsonl с помощью собственных автоматически сгенерированных подсказок
Чтобы изменить настройки оценки, перейдите к scripts/run_experiments.py и соответственно обновите настраиваемые значения. ПРИМЕЧАНИЕ. Каждое из настраиваемых настроек помечено [CONFIGURABLE] комментарием.
LMs в верхней части файлаcommon_vocab_filename в соответствующий файл. Все, что оценивает как Берт, так и Роберта, требует, чтобы это поле было common_vocab_cased_rob.txt common_vocab_cased.txtuse_ctx в True при запуске оценки для извлечения отношенийsynthetic к True для оценки возмущенного предложения для извлечения отношенийget_TREx_parameters установите data_path_pre в соответствующий путь данных (например "../data/relation_extraction" для извлечения отношений)Запустите код оценки
python scripts/run_experiments.py
Установите PYTHONPATH если произойдет следующая ошибка: 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}
}