Metode otomatis berdasarkan pencarian yang dipandu gradien untuk membuat petunjuk untuk beragam tugas NLP. Autoprompt menunjukkan bahwa model bahasa bertopeng (MLM) memiliki kemampuan bawaan untuk melakukan analisis sentimen, inferensi bahasa alami, pengambilan fakta, dan ekstraksi hubungan. Lihat situs web kami untuk makalah dan informasi lebih lanjut.
conda create -n autoprompt -y python=3.7 && conda activate autoprompt
Pasang paket yang diperlukan
pip install -r requirements.txt
Unduh juga model spacy
python -m spacy download en
Dataset untuk analisis sentimen, NLI, pengambilan fakta, dan ekstraksi relasi tersedia untuk diunduh di sini
Ada beberapa dataset berbeda untuk pengambilan fakta dan ekstraksi hubungan jadi di sini ada ikhtisar singkat dari masing -masing:
original : Kami menggunakan subset T-Rex yang disediakan oleh Lama sebagai set uji kami dan mengumpulkan lebih banyak fakta dari dataset T-Rex asli yang kami partisi ke dalam set kereta dan devoriginal_rob : Kami memfilter fakta dalam original sehingga setiap objek adalah satu token untuk Bert dan Robertatrex : Kami membagi data T-Rex tambahan yang dikumpulkan (untuk set kereta api/val original ) menjadi kereta, dev, set tesoriginal untuk mengkompensasi baseline RE dan Roberta. Kami juga mengecualikan hubungan P527 dan P1376 karena garis dasar RE tidak mempertimbangkannya. Prompt dibangun dengan memetakan hal -hal seperti input asli dan memicu token ke templat yang terlihat seperti
[CLS] {sub_label} [T] [T] [T] [P]. [SEP]
Contoh di atas adalah templat untuk menghasilkan petunjuk pengambilan fakta dengan 3 token pemicu di mana {sub_label} adalah tempat penampung untuk subjek dalam pengambilan (subjek, relasi, objek) apa pun pada kenyataannya pengambilan. [P] menunjukkan penempatan token [MASK] khusus yang akan digunakan untuk "mengisi-dalam-blok" oleh model bahasa. Setiap token pemicu dalam set token pemicu yang dibagikan di semua petunjuk dilambangkan dengan [T] .
Bergantung pada model bahasa (yaitu Bert atau Roberta) Anda memilih untuk menghasilkan petunjuk, token khusus akan berbeda. Untuk Bert, tempel [CLS] dan [SEP] ke setiap ujung templat. Untuk Roberta, gunakan <s> dan </s> sebagai gantinya.
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
Untuk analisis sentimen
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'
Untuk 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
Kloning garpu kami dari repo LAMA dan ikuti arah untuk mengaturnya di luar repo autoprompt. Kami merekomendasikan menciptakan lingkungan Conda yang terpisah untuk LAMA karena berbagai ketergantungan dan persyaratan.
Salin folder data AutoPrompt ke direktori data LAMA atau atur data_path_pre di scripts/run_experiments.py ke lokasi data khusus.
Untuk membuat Lama bekerja dengan Roberta, jalankan perintah berikut:
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
Perbarui file data/relations.jsonl dengan prompt Anda yang dihasilkan secara otomatis
Untuk mengubah pengaturan evaluasi, buka scripts/run_experiments.py dan perbarui nilai yang dapat dikonfigurasi. Catatan: Setiap pengaturan yang dapat dikonfigurasi ditandai dengan komentar [CONFIGURABLE] .
LMs di bagian atas filecommon_vocab_filename ke file yang sesuai. Apa pun yang mengevaluasi Bert dan Roberta mengharuskan bidang ini menjadi common_vocab_cased_rob.txt , bukan common_vocab_cased.txt yang biasa.use_ctx ke True jika menjalankan evaluasi untuk ekstraksi relasisynthetic ke True untuk evaluasi kalimat yang terganggu untuk ekstraksi hubunganget_TREx_parameters , atur data_path_pre ke jalur data yang sesuai (misalnya "../data/relation_extraction" untuk ekstraksi relasi)Jalankan kode evaluasi
python scripts/run_experiments.py
Atur PYTHONPATH jika kesalahan berikut terjadi: 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}
}