一種基於梯度引導搜索的自動化方法,為各種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 :我們使用了Lama提供的T-Rex子集作為我們的測試集,並從原始T-Rex數據集中收集了更多事實original_rob :我們用original過濾事實,以使每個對像都是Bert和Roberta的單個令牌trex :我們將收集的額外T-Rex數據(用於original的火車/瓦爾)分為火車,開發,測試集original數據集以補償重新基線和羅伯塔。我們還排除了關係P527和P1376 ,因為重新基線不考慮它們。 通過將原始輸入和触發令牌之類的內容映射到看起來像類似的模板來構建提示
[CLS] {sub_label} [T] [T] [T] [P]. [SEP]
上面的示例是一個模板,用於使用3個觸發令牌生成事實檢索提示,其中{sub_label}是任何(主題,關係,對象)三胞胎的佔位符。 [P]表示將使用語言模型“填充”的特殊[MASK]令牌的位置。 [T]表示在所有提示中共享的觸發令牌集中的每個觸發令牌。
根據您選擇生成提示的語言模型(即Bert或Roberta),特殊令牌將有所不同。對於Bert,將[CLS]和[SEP]粘在模板的每一端。對於Roberta,請改用<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 Repo之外。由於不同的依賴性和要求,我們建議為LAMA創建單獨的Conda環境。
將自動啟動數據文件夾複製到LAMA的data目錄中,或將scripts/run_experiments.py中的data_path_pre設置為自定義數據位置。
為了讓Lama與Roberta合作,請運行以下命令:
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列表中評估(並評論其他LM設置)common_vocab_filename字段更新為適當的文件。評估Bert和Roberta的任何內容都要求此字段為common_vocab_cased_rob.txt ,而不是通常的common_vocab_cased.txt 。use_ctx設置為Truesynthetic為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}
}