วิธีการอัตโนมัติตามการค้นหาที่มีการไล่ระดับสีเพื่อสร้างพรอมต์สำหรับงาน 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 ดั้งเดิมที่เราแบ่งออกเป็นชุดรถไฟและชุด Devoriginal_rob : เรากรองข้อเท็จจริงใน original เพื่อให้แต่ละวัตถุเป็นโทเค็นเดียวสำหรับทั้ง Bert และ Robertatrex : เราแยกข้อมูล T-Rex พิเศษที่รวบรวม (สำหรับชุดรถไฟ/Val ของ original ) เป็นรถไฟ, dev, ชุดทดสอบoriginal เพื่อชดเชยทั้ง RE Baseline และ Roberta นอกจากนี้เรายังไม่รวมความสัมพันธ์ P527 และ P1376 เนื่องจากพื้นฐาน RE ไม่ได้พิจารณาพวกเขา พรอมต์ถูกสร้างขึ้นโดยการแมปสิ่งต่าง ๆ เช่นอินพุตดั้งเดิมและโทเค็นทริกเกอร์ไปยังเทมเพลตที่มีลักษณะคล้ายกัน
[CLS] {sub_label} [T] [T] [T] [P]. [SEP]
ตัวอย่างด้านบนเป็นเทมเพลตสำหรับการสร้างพรอมต์การดึงข้อมูลข้อเท็จจริงด้วยโทเค็นทริกเกอร์ 3 ตัวโดยที่ {sub_label} เป็นตัวยึดสำหรับตัวแบบใน (หัวเรื่อง, ความสัมพันธ์, วัตถุ) ทริปเล็ตในความเป็นจริง [P] หมายถึงตำแหน่งของโทเค็น [MASK] พิเศษที่จะใช้ในการ "เติมเต็มในช่องว่าง" โดยรูปแบบภาษา โทเค็นทริกเกอร์แต่ละตัวในชุดโทเค็นทริกเกอร์ที่แชร์ในการแจ้งเตือนทั้งหมดจะแสดงโดย [T]
ขึ้นอยู่กับรูปแบบภาษา (เช่นเบิร์ตหรือโรเบอร์ต้า) ที่คุณเลือกที่จะสร้างพรอมต์โทเค็นพิเศษจะแตกต่างกัน สำหรับเบิร์ต, ติด [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
โคลนส้อมของเราของ Lama Repo และทำตามคำแนะนำเพื่อตั้งค่านอก Autoprompt Repo เราแนะนำให้สร้างสภาพแวดล้อม conda แยกต่างหากสำหรับลามะเนื่องจากการพึ่งพาและข้อกำหนดที่แตกต่างกัน
คัดลอกโฟลเดอร์ Data Autoprompt ลงในไดเรกทอรี data ของ LAMA หรือ SET data_path_pre ใน scripts/run_experiments.py ไปยังตำแหน่งข้อมูลที่กำหนดเอง
เพื่อให้ลามะทำงานร่วมกับ 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 ที่ด้านบนของไฟล์common_vocab_filename เป็นไฟล์ที่เหมาะสม อะไรก็ตามที่ประเมินทั้ง Bert และ Roberta ต้องการให้ฟิลด์นี้เป็น 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}
}