Ini adalah repo kode untuk kertas Temuan ACL 2023 kami Regen: Klasifikasi teks nol-shot melalui pembuatan data pelatihan dengan pengambilan padat progresif.
UPDATE : Checkout Cara Meningkatkan Regen Menggunakan Model Bahasa Besar di Pra -Cetak Terbaru Kami Dengan Kode!
python 3.8
transformers==4.2.0
pytorch==1.8.0
scikit-learn
faiss-cpu==1.6.4
tqdm>=4.62.2
nltk
Corpus dapat diunduh di:
Set uji {AG News, Dbpedia, Yahoo, IMDB} dapat dengan mudah ditemukan di hub data Huggingface. Set tes untuk dataset lain dapat didirikan di folder test .
_id adalah singkatan dari ID kelas, dan text adalah konten dokumen.
Contoh (untuk dataset 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."}
...
}
Kami menyesuaikan kode dari Coco-DR untuk pretraining. Silakan periksa implementasi asli untuk detailnya.
Diperbarui pada 7 Sep 2023 : Model pretrain telah dirilis pada permukaan pelukan:
Lihat kode dari folder retrieval , gen_embedding.sh untuk detailnya.
Lihat kode dari retrieval/retrieve.py untuk detailnya.
Beberapa hyperparameter utama:
args.target : Dataset target yang digunakan dalam percobaan.args.model : Model pengambilan yang digunakan dalam penelitian ini.args.corpus_folder/args.corpus_name : Folder/nama corpus yang digunakan (misalnya berita, wiki) dalam percobaan.args.topN : Topn yang digunakan dalam pencarian KNN (biasanya diatur ke 50-100).args.round : Putaran pengambilan. Setel ke 0 untuk putaran pertama (menggunakan nama label/templat untuk pengambilan saja) dan 1,2, ... untuk putaran selanjutnya.Catatan : Pada prinsipnya, model kami kompatibel dengan setiap retriever padat (setelah pelatihan dengan benar). Jika Anda ingin menggunakan model pengambilan padat Anda sendiri, pastikan bahwa model pengambilan padat juga menggunakan embedding token [CLS] sebagai embeddings urutan. Kalau tidak, Anda mungkin perlu memodifikasi kode dalam menanamkan bagian pembuatan untuk memastikan embedding yang dihasilkan benar .
Lihat kode dari folder filter . Perintah contoh harus
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
Di Sini
folder_for_data adalah folder dari data yang diambil.unlabel_file_used_for_filtering adalah nama file dari data yang diambil.task adalah nama tugas.model_type adalah PLM yang digunakan sebagai diskriminator (misalnya Roberta). Lihat kode dari folder classification . Perintah contoh harus
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
Ini dicapai dengan cara yang mirip dengan langkah pengambilan sebelumnya. Lihat kode dari retrieval/retrieve.py lagi untuk detailnya. Satu -satunya perbedaan adalah Anda perlu mengatur args.round variabel ke lebih dari 0 . Anda juga perlu mengatur prev_retrieve_path_name dan prev_retrieve_folder ke jalur dokumen untuk hasil pengambilan terbaru setelah penyaringan .
Dataset yang dihasilkan dapat ditemukan di tautan ini.
Harap silakan mengutip makalah kami jika Anda menemukan repo ini berguna untuk penelitian Anda. Terima kasih!
@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}
}