다양한 NLP 작업 세트에 대한 프롬프트를 생성하기 위해 구배 유도 검색을 기반으로하는 자동화 된 방법. AutoPrompt는 MLM (Masked Language Model)이 감정 분석, 자연어 추론, 사실 검색 및 관계 추출을 수행 할 수있는 타고난 능력을 가지고 있음을 보여줍니다. 논문 및 자세한 정보는 웹 사이트를 확인하십시오.
conda create -n autoprompt -y python=3.7 && conda activate autoprompt
필요한 패키지를 설치하십시오
pip install -r requirements.txt
또한 스파이 모델을 다운로드하십시오
python -m spacy download en
감정 분석, NLI, 사실 검색 및 관계 추출을위한 데이터 세트는 여기에서 다운로드 할 수 있습니다.
사실 검색 및 관계 추출을위한 몇 가지 다른 데이터 세트가 있으므로 여기에 각각의 간단한 개요가 있습니다.
original : Lama가 제공 한 T-Rex 서브 세트를 테스트 세트로 사용했으며 기차 및 개발자 세트에 분할 된 원래 T-Rex 데이터 세트에서 더 많은 사실을 수집했습니다.original_rob : 우리는 각 객체가 Bert와 Roberta를위한 단일 토큰이되도록 original 으로 필터링 된 사실을 필터링했습니다.trex : 수집 된 추가 t-rex 데이터 (원본/val original 세트)를 기차, 개발자, 테스트 세트로 나눕니다.original 데이터 세트를 다듬 었습니다. 우리는 또한 RE 기준선이 고려하지 않기 때문에 관계 P527 과 P1376 제외했습니다. 원래 입력 및 트리거 토큰과 같은 것들과 같은 것과 같은 템플릿에 트리거 토큰을 매핑하여 프롬프트가 구성됩니다.
[CLS] {sub_label} [T] [T] [T] [P]. [SEP]
위의 예는 {sub_label} 실제로 검색의 트리플렛에서 주제에 대한 자리 표시자인 3 개의 트리거 토큰으로 사실 검색 프롬프트를 생성하기위한 템플릿입니다. [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 외부에 설정하십시오. 다른 종속성과 요구 사항으로 인해 라마를위한 별도의 콘다 환경을 만드는 것이 좋습니다.
AutoPrompt 데이터 폴더를 LAMA의 data 디렉토리에 복사하거나 scripts/run_experiments.py 에서 data_path_pre 사용자 정의 데이터 위치로 설정하십시오.
라마가 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의 설정 (그리고 다른 LM 설정을 주석)common_vocab_filename 필드를 해당 파일로 업데이트하십시오. Bert와 Roberta를 모두 평가하는 것은이 필드가 일반적인 common_vocab_cased.txt 대신 common_vocab_cased_rob.txt 여야합니다.use_ctx True 로 설정하십시오.True 문장 평가를 위해 synthetic 설정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}
}