Ini adalah kode sumber dari makalah ACL-IJCNLP 2021: beberapa-nerd: beberapa shot bernama dataset pengenalan entitas . Lihatlah situs web beberapa-nerd.
************************************* Pembaruan *****************************************
09/03/2022: Kami telah menambahkan skrip pelatihan untuk pelatihan yang diawasi menggunakan Bert Tagger. Jalankan bash data/download.sh supervised untuk mengunduh data, dan kemudian jalankan bash run_supervised.sh .
01/09/2021: Kami telah memodifikasi hasil pengaturan yang diawasi beberapa-nerd di Arxiv, terima kasih atas bantuan Pedromlf.
19/08/2021: Penting? Untuk menemani data episode yang dirilis, kami telah memperbarui skrip pelatihan. Cukup tambahkan --use_sampled_data saat menjalankan train_demo.py untuk melatih dan menguji data episode yang dirilis.
02/06/2021: Untuk menyederhanakan pelatihan, kami telah merilis data yang disampel oleh episode. Klik di sini untuk mengunduh. File dinamai demikian: {train/dev/test}_{N}_{K}.jsonl . Kami mencicipi tahun 20000, 1000, 5000 episode untuk kereta, dev, tes, masing -masing.
26/05/2021: Beberapa-nerd saat ini (SUP) adalah tingkat kalimat. Kami akan segera merilis beberapa-nerd (SUP) 1.1, yang merupakan tingkat paragraf dan berisi informasi yang lebih kontekstual.
11/06/2021: Kami telah memodifikasi kata tokenisasi dan kami akan segera memperbarui hasil terbaru. Kami dengan tulus berterima kasih kepada Tingtingma dan Chandan Akiti
Beberapa-nerd adalah dataset pengenalan entitas yang dinamai secara manual berskala besar, yang berisi 8 jenis berbutir kasar, 66 jenis berbutir halus, 188.200 kalimat, 491.711 entitas dan 4.601.223 token . Tiga tugas benchmark dibangun, satu diawasi: beberapa-nerd (SUP) dan dua lainnya adalah beberapa-shot: beberapa-nerd (intra) dan beberapa-nerd (Inter).
Skema beberapa-nerd adalah:
Beberapa-nerd secara manual dijelaskan berdasarkan konteksnya, misalnya, dalam kalimat " London adalah album kelima oleh British Rock Band ... ", entitas bernama London diberi label Art-Music .
Jalankan skrip berikut untuk menginstal dependensi yang tersisa,
pip install -r requirements.txtsupervised , dua lainnya untuk pengaturan beberapa tembakan inter dan intra . Masing -masing berisi tiga file train.txt , dev.txt , test.txt . Kumpulan data supervised dibagi secara acak. Dataset inter dipecah secara acak dalam jenis kasar, yaitu setiap file berisi semua 8 jenis kasar tetapi jenis berbutir halus yang berbeda. Dataset intra dibagi secara acak berdasarkan jenis kasar. Untuk mendapatkan tiga dataset benchmark beberapa-nerd, cukup jalankan data/download.sh dengan parameter supervised/inter/intra seperti di bawah ini
bash data/download.sh supervisedUntuk mendapatkan data sampel berdasarkan episode, jalankan
bash data/download.sh episode-data
unzip -d data/ data/episode-data.zip Data diproses sebelumnya ke dalam formulir data NER yang khas seperti di bawah ini ( tokentlabel ).
Between O
1789 O
and O
1793 O
he O
sat O
on O
a O
committee O
reviewing O
the O
administrative MISC-law
constitution MISC-law
of MISC-law
Galicia MISC-law
to O
little O
effect O
. OStruktur proyek kami adalah:
--util
| -- framework.py
| -- data_loader.py
| -- viterbi.py # viterbi decoder for structshot only
| -- word_encoder
| -- fewshotsampler.py
-- proto.py # prototypical model
-- nnshot.py # nnshot model
-- train_demo.py # main training script Seperti yang ditetapkan dalam makalah kami, kami merancang dengan cara strategi pengambilan sampel bidikan k ~ 2K dalam pekerjaan kami, implementasinya adalah SAT util/fewshotsampler.py .
Jaring prototipikal dengan Bert diimplementasikan dalam model/proto.py .
Nnshot dengan Bert diimplementasikan dalam model/nnshot.py .
Structshot direalisasikan dengan menambahkan decoder viterbi tambahan di util/framework.py .
Perhatikan bahwa encoder Bert Backbone yang kami gunakan untuk model structshot tidak terlatih dengan tugas NER
Jalankan train_demo.py . Argumen disajikan di bawah ini. Parameter default adalah untuk model proto pada dataset inter mode.
-- mode training mode, must be inter, intra, or supervised
-- trainN N in train
-- N N in val and test
-- K K shot
-- Q Num of query per class
-- batch_size batch size
-- train_iter num of iters in training
-- val_iter num of iters in validation
-- test_iter num of iters in testing
-- val_step val after training how many iters
-- model model name, must be proto, nnshot or structshot
-- max_length max length of tokenized sentence
-- lr learning rate
-- weight_decay weight decay
-- grad_iter accumulate gradient every x iterations
-- load_ckpt path to load model
-- save_ckpt path to save model
-- fp16 use nvidia apex fp16
-- only_test no training process, only test
-- ckpt_name checkpoint name
-- seed random seed
-- pretrain_ckpt bert pre-trained checkpoint
-- dot use dot instead of L2 distance in distance calculation
-- use_sgd_for_bert use SGD instead of AdamW for BERT.
# only for structshot
-- tau StructShot parameter to re-normalizes the transition probabilities Untuk hyperparameter --tau di structshot, kami menggunakan 0.32 dalam pengaturan 1-shot, 0.318 untuk pengaturan 5-arah-5-shot, dan 0.434 untuk pengaturan 10-arah-5-shot.
Ambil model structshot pada dataset inter misalnya, ekspresi dapat dijalankan sebagai berikut.
5-Way-1 ~ 5-shot
python3 train_demo.py --mode inter
--lr 1e-4 --batch_size 8 --trainN 5 --N 5 --K 1 --Q 1
--train_iter 10000 --val_iter 500 --test_iter 5000 --val_step 1000
--max_length 64 --model structshot --tau 0.325-Way-5 ~ 10-shot
python3 train_demo.py --mode inter
--lr 1e-4 --batch_size 1 --trainN 5 --N 5 --K 5 --Q 5
--train_iter 10000 --val_iter 500 --test_iter 5000 --val_step 1000
--max_length 32 --model structshot --tau 0.31810-arah-1 ~ 5-shot
python3 train_demo.py --mode inter
--lr 1e-4 --batch_size 4 --trainN 10 --N 10 --K 1 --Q 1
--train_iter 10000 --val_iter 500 --test_iter 5000 --val_step 1000
--max_length 64 --model structshot --tau 0.3210-Way-5 ~ 10-shot
python3 train_demo.py --mode inter
--lr 1e-4 --batch_size 1 --trainN 10 --N 10 --K 5 --Q 1
--train_iter 10000 --val_iter 500 --test_iter 5000 --val_step 1000
--max_length 32 --model structshot --tau 0.434Jika Anda menggunakan beberapa nerd dalam pekerjaan Anda, silakan kutip kertas kami:
@inproceedings { ding-etal-2021-nerd ,
title = " Few-{NERD}: A Few-shot Named Entity Recognition Dataset " ,
author = " Ding, Ning and
Xu, Guangwei and
Chen, Yulin and
Wang, Xiaobin and
Han, Xu and
Xie, Pengjun and
Zheng, Haitao and
Liu, Zhiyuan " ,
booktitle = " Proceedings of the 59th Annual Meeting of the Association for Computational Linguistics and the 11th International Joint Conference on Natural Language Processing (Volume 1: Long Papers) " ,
month = aug,
year = " 2021 " ,
address = " Online " ,
publisher = " Association for Computational Linguistics " ,
url = " https://aclanthology.org/2021.acl-long.248 " ,
doi = " 10.18653/v1/2021.acl-long.248 " ,
pages = " 3198--3213 " ,
}Dataset beberapa-nerd didistribusikan di bawah lisensi CC BY-SA 4.0. Kode ini didistribusikan di bawah lisensi Apache 2.0.
Jika Anda memiliki pertanyaan, jangan ragu untuk menghubungi