นี่คือรหัส repo สำหรับ ACL 2023 การค้นพบกระดาษของเรา Regen: การจำแนกข้อความแบบไม่มีการยิงผ่านการสร้างข้อมูลการฝึกอบรมด้วยการดึงข้อมูลหนาแน่นแบบก้าวหน้า
อัปเดต : ชำระเงินวิธีปรับปรุง regen โดยใช้แบบจำลองภาษาขนาดใหญ่ในรหัสล่าสุดของเราด้วยรหัส!
python 3.8
transformers==4.2.0
pytorch==1.8.0
scikit-learn
faiss-cpu==1.6.4
tqdm>=4.62.2
nltk
คลังข้อมูลสามารถดาวน์โหลดได้ที่:
ชุดทดสอบของ {Ag News, Dbpedia, Yahoo, IMDB} สามารถค้นหาได้อย่างง่ายดายที่ HuggingFace Data Hub ชุดทดสอบสำหรับชุดข้อมูลอื่น ๆ สามารถสร้างได้ที่โฟลเดอร์ test
_id ย่อมาจาก ID คลาสและ text เป็นเนื้อหาของเอกสาร
ตัวอย่าง (สำหรับชุดข้อมูล SST-2):
{
{"_id": 0, "text": "It seems to me the film is about the art of ripping people off without ever letting them consciously know you have done so."}
{"_id": 0, "text": "In the end , the movie collapses on its shaky foundation despite the best efforts of director joe carnahan."}
{"_id": 1, "text": "Despite its title , punch-drunk love is never heavy-handed ."}
{"_id": 1, "text": "Though only 60 minutes long , the film is packed with information and impressions."}
...
}
เราปรับรหัสจาก Coco-DR เพื่อการเตรียมการ โปรดตรวจสอบการใช้งานดั้งเดิมเพื่อดูรายละเอียด
อัปเดตเมื่อวันที่ 7 ก.ย. 2023 : รุ่นที่ผ่านการฝึกอบรมได้รับการเผยแพร่บน HuggingFace:
ดูรหัสจากโฟลเดอร์ retrieval gen_embedding.sh สำหรับรายละเอียด
ดูรหัสจาก retrieval/retrieve.py สำหรับรายละเอียด
พารามิเตอร์ที่สำคัญบางอย่าง:
args.target : ชุดข้อมูลเป้าหมายที่ใช้ในการทดสอบargs.model : แบบจำลองการดึงข้อมูลที่ใช้ในการศึกษานี้args.corpus_folder/args.corpus_name : โฟลเดอร์/ชื่อของคลังข้อมูลที่ใช้ (เช่นข่าว, wiki) ในการทดลองargs.topN : topn ที่ใช้ในการค้นหา KNN (มักจะตั้งค่าเป็น 50-100)args.round : รอบการดึง ตั้งค่าเป็น 0 สำหรับรอบแรก (ใช้ชื่อฉลาก/เทมเพลตสำหรับการดึงข้อมูลเท่านั้น) และ 1,2, ... สำหรับรอบต่อมาหมายเหตุ : โดยหลักการแล้วโมเดลของเราเข้ากันได้กับการดึงข้อมูลที่หนาแน่น (หลังจากการฝึกอบรมอย่างเหมาะสม) หากคุณต้องการใช้โมเดลการดึงข้อมูลหนาแน่นของคุณเองโปรดตรวจสอบให้แน่ใจว่าโมเดลการดึงข้อมูลหนาแน่นยังใช้การฝังโทเค็น [CLS] เป็นลำดับการฝัง มิฉะนั้นคุณอาจต้องแก้ไขรหัสในการสร้างชิ้นส่วนการสร้างเพื่อให้แน่ใจว่าการฝังที่สร้างขึ้นนั้นถูก ต้อง
ดูรหัสจากโฟลเดอร์ filter คำสั่งตัวอย่างควรเป็น
train_cmd="CUDA_VISIBLE_DEVICES=0 python3 inference.py --task=${task}
--unlabel_file=${unlabel_file_used_for_filtering}
--data_dir=${folder_for_data}
--cache_dir="${task}/cache" --output_dir=${output_dir} --round=${round}
--load_from_prev=1
--gpu=${gpu} --eval_batch_size=${eval_batch_size}
--max_seq_len=${max_seq_len} --auto_load=0
--model_type=${model_type}"
echo $train_cmd
eval $train_cmd
ที่นี่
folder_for_data เป็นโฟลเดอร์ของข้อมูลที่ดึงมาunlabel_file_used_for_filtering เป็นชื่อไฟล์ของข้อมูลที่ดึงมาtask คือชื่อของงานmodel_type เป็น PLM ที่ใช้เป็น discriminator (เช่น Roberta) ดูรหัสจากโฟลเดอร์ classification คำสั่งตัวอย่างควรเป็น
train_cmd="CUDA_VISIBLE_DEVICES=0 python3 main.py --do_train --do_eval --task=${task}
--train_file={PATH_FOR_GENERATED_DATASET}
--dev_file={PATH_FOR_GENERATED_VALID_DATASET
--test_file={PATH_FOR_TEST_DATASET
--unlabel_file=unlabeled.json
--data_dir=../datasets/${task}-${label_per_class} --train_seed=${train_seed}
--cache_dir="../datasets/${task}-${label_per_class}/cache"
--output_dir=${output_dir}
--logging_steps=${logging_steps}
--n_gpu=${n_gpu} --num_train_epochs=6
--learning_rate=2e-5 --weight_decay=1e-8
--batch_size=32 --eval_batch_size=128
--max_seq_len=128 --auto_load=1
--model_type=${model_type}"
echo $train_cmd
eval $train_cmd
มันประสบความสำเร็จด้วยวิธีที่คล้ายกับขั้นตอนการดึงข้อมูลก่อนหน้า ดูรหัสจาก retrieval/retrieve.py อีกครั้งสำหรับรายละเอียด ความแตกต่างเพียงอย่างเดียวคือคุณต้องตั้งค่าตัวแปร args.round เป็นมากกว่า 0 คุณต้องตั้งค่า prev_retrieve_path_name และ prev_retrieve_folder เป็นเส้นทางของเอกสารสำหรับผลลัพธ์การดึงข้อมูลล่าสุด หลังจากการกรอง
ชุดข้อมูลที่สร้างขึ้นสามารถพบได้ที่ลิงค์นี้
โปรดกรุณาอ้างอิงบทความของเราหากคุณพบว่า repo นี้มีประโยชน์สำหรับการวิจัยของคุณ ขอบคุณ!
@inproceedings{yu2023zero,
title={ReGen: Zero-Shot Text Classification via Training Data Generation with Progressive Dense Retrieval},
author={Yu, Yue and Zhuang, Yuchen and Zhang, Rongzhi and Meng, Yu and Shen, Jiaming and Zhang, Chao},
booktitle={Findings of ACL},
year={2023}
}