Dies ist der Quellcode des ACL-IJCNLP 2021-Papiers: wenige Nerven: Ein paar Schuss-Entitätserkennungsdatensatz . Schauen Sie sich die Website von wenigen Nerven an.
***********************
09/03/2022: Wir haben das Trainingsskript für überwachtes Training mit Bert Tagger hinzugefügt. Führen Sie bash data/download.sh supervised um die Daten herunterzuladen, und dann bash run_supervised.sh .
01/09/2021: Wir haben die Ergebnisse der überwachten Einstellung von wenigen Nerven in Arxiv geändert. Vielen Dank für die Hilfe von Pedromlf.
19/08/2021: Wichtig? In Begleitung der veröffentlichten Episodendaten haben wir das Trainingsskript aktualisiert. Einfach hinzufügen --use_sampled_data beim Ausführen train_demo.py , um die freigegebenen Episodendaten zu trainieren und zu testen.
02/06/2021: Um das Training zu vereinfachen, haben wir die von der Episode abgetasteten Daten veröffentlicht. Klicken Sie hier, um herunterzuladen. Die Dateien werden so benannt: {train/dev/test}_{N}_{K}.jsonl . Wir haben 20000, 1000, 5000 Episoden für Zug, Dev, Test probiert.
26/05/2021: Die aktuelle wenige Nerven (SUP) ist Satzebene. Wir werden bald nur wenige Nerven (Sup) 1.1 veröffentlichen, das sich auf Absatzebene befindet und mehr kontextbezogene Informationen enthält.
11/06/2021: Wir haben die Word -Tokenisierung geändert und werden bald die neuesten Ergebnisse aktualisieren. Wir danken Tingingma und Chandan Akiti aufrichtig
Nur wenige Nerven sind ein groß angelegter, feinkörniger manuell mit dem benanntes Entitätserkennungsdatensatz, der 8 grobkörnige Typen, 66 feinkörnige Typen, 188.200 Sätze, 491.711 Entitäten und 4.601.223 Token enthält. Es werden drei Benchmark-Aufgaben gebaut, einer wird beaufsichtigt: wenige Nerven (SUP) und die anderen beiden sind nur wenige Schüsse: wenige Nerven (Intra) und wenige Nerven (Inter).
Das Schema von wenigen Nerven ist:
Nur wenige Nerven sind manuell anhand des Kontextes annotiert, beispielsweise im Satz " London ist das fünfte Album der British Rock Band… ", das named Entity London wird als Art-Music bezeichnet.
Führen Sie das folgende Skript aus, um die verbleibenden Abhängigkeiten zu installieren.
pip install -r requirements.txtsupervised , die anderen beiden für wenige Schüsse Einstellung inter und intra . Jeweils enthält drei Dateien train.txt , dev.txt , test.txt . supervised Datensätze werden zufällig geteilt. inter Datensätze werden zufällig innerhalb von grobem Typ aufgeteilt, dh jede Datei enthält alle 8 groben Typen, aber unterschiedliche feinkörnige Typen. intra -Datensätze werden zufällig nach grobem Typ aufgeteilt. Um die drei Benchmark-Datensätze mit wenigen Nerven zu erhalten, führen Sie einfach die Bash- data/download.sh mit dem Parameter supervised/inter/intra wie unten aus
bash data/download.sh supervisedUm die Daten nach Episode zu erhalten, rennen Sie
bash data/download.sh episode-data
unzip -d data/ data/episode-data.zip Die Daten werden in die typischen NER-Datenformen wie unten ( tokentlabel ) vorverarbeitet.
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
. ODie Struktur unseres Projekts ist:
--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 Wie in unserer Zeitung festgelegt, entwerfen wir eine N -Way -2K -Schuss -Stichprobenstrategie in unserer Arbeit. Die Implementierung ist sat util/fewshotsampler.py .
Prototypische Netze mit Bert werden in model/proto.py implementiert.
NNSHOT mit Bert wird in model/nnshot.py implementiert.
Structshot wird durch Hinzufügen eines zusätzlichen Viterbi -Decoders in util/framework.py realisiert.
Beachten Sie, dass der Backbone Bert-Encoder, den wir für das Strukturshot-Modell verwendet haben
Run train_demo.py . Die Argumente sind nachstehend dargestellt. Die Standardparameter sind für das proto im inter -Modus -Datensatz.
-- 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 Für Hyperparameter --tau in Structhot verwenden wir 0.32 in 1-Shot-Einstellungen, 0.318 für die 5-Wege-5-Shot-Einstellung und 0.434 für die 10-Wege-5-Shot-Einstellung.
Nehmen Sie structshot auf inter -Datensatz zum Beispiel, beispielsweise können die Auswirkungen wie folgt ausgeführt werden.
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-Way-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.434Wenn Sie in Ihrer Arbeit nur wenige Nerven verwenden, zitieren Sie bitte unser Papier:
@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 " ,
}Ein wenig Nerven-Datensatz wird unter der CC BY-SA 4.0-Lizenz verteilt. Der Code wird unter der Apache 2.0 -Lizenz verteilt.
Wenn Sie Fragen haben, können Sie sich gerne wenden