Ceci est le code source du document ACL-IJCNLP 2021: Few-Nerd: un ensemble de données de reconnaissance d'entités nommé à quelques tirs . Consultez le site Web de Fewerd.
*************************************** Mises à jour *************************************
09/03/2022: Nous avons ajouté le script de formation pour une formation supervisée à l'aide de Bert Tagger. Exécutez bash data/download.sh supervised pour télécharger les données, puis exécutez bash run_supervised.sh .
01/09/2021: Nous avons modifié les résultats du réglage supervisé de Fiwerd dans ArXIV, merci pour l'aide de Pedromlf.
19/08/2021: important? Dans l'accompagnement des données de l'épisode publiées, nous avons mis à jour le script de formation. Ajoutez simplement --use_sampled_data lors de l'exécution train_demo.py pour s'entraîner et tester les données de l'épisode publiées.
02/06/2021: Pour simplifier la formation, nous avons publié les données échantillonnées par épisode. Cliquez ici pour télécharger. Les fichiers sont nommés tels: {train/dev/test}_{N}_{K}.jsonl . Nous avons échantillonné 20000, 1000, 5000 épisodes pour Train, Dev, Test, respectivement.
26/05/2021: Le niveau inférieur actuel (SUP) est au niveau de la phrase. Nous publierons bientôt quelques-uns (SUP) 1.1, qui est au niveau du paragraphe et contient des informations plus contextuelles.
11/06/2021: Nous avons modifié le mot tokenisation et nous mettrons bientôt à jour les derniers résultats. Nous remercions sincèrement Tingtingma et Chandan Akiti
Few-Serd est un ensemble de données de reconnaissance entités à grande échelle à grande échelle et à grain fin, qui contient 8 types à grain grossier, 66 types à grain fin, 188 200 phrases, 491 711 entités et 4 601223 tokens . Trois tâches de référence sont construites, l'une est supervisée: peu nerd (SUP) et les deux autres sont à quelques coups: peu nerd (intra) et peu nerd (inter).
Le schéma de quelques-nerd est:
Fiwerd est annoté manuellement en fonction du contexte, par exemple, dans la phrase " Londres est le cinquième album du British Rock Band… ", l'entité nommée London est étiquetée comme Art-Music .
Exécutez le script suivant pour installer les dépendances restantes,
pip install -r requirements.txtsupervised , les deux autres pour le réglage à quelques coups inter et intra . Chacun contient trois fichiers train.txt , dev.txt , test.txt . Les ensembles de données supervised sont divisés au hasard. Les ensembles de données inter sont divisés au hasard dans le type grossier, c'est-à-dire que chaque fichier contient les 8 types grossiers mais différents types à grain fin. Les ensembles de données intra sont divisés au hasard par type grossier. Pour obtenir les trois ensembles de données de référence de Fiw-Lerd, exécutez simplement les data/download.sh avec paramètre supervised/inter/intra comme ci-dessous
bash data/download.sh supervisedPour obtenir les données échantillonnées par épisode, exécutez
bash data/download.sh episode-data
unzip -d data/ data/episode-data.zip Les données sont prétraitées dans les formulaires de données NER typiques comme ci-dessous ( 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
. OLa structure de notre projet est:
--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 Comme établi dans notre article, nous concevons une stratégie d'échantillonnage de Nation N Way K ~ 2K dans notre travail, la mise en œuvre est SAT util/fewshotsampler.py .
Les réseaux prototypiques avec Bert sont implémentés dans model/proto.py .
Nnshot avec Bert est implémenté dans model/nnshot.py .
STRUCTSHOT est réalisé en ajoutant un décodeur ViterBI supplémentaire dans util/framework.py .
Notez que le codeur BERT BERT que nous avons utilisé pour le modèle StructShot n'est pas pré-formé avec la tâche NER
Exécutez train_demo.py . Les arguments sont présentés ci-dessous. Les paramètres par défaut sont destinés au modèle proto sur l'ensemble de données du mode inter .
-- 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 Pour l'hyperparamètre --tau dans StructShot, nous utilisons 0.32 dans un réglage à 1 coup, 0.318 pour un réglage à 5 voies 5 et 0.434 pour un réglage à 10 voies 5.
Prenez le modèle structshot sur l'ensemble de données inter , par exemple, les expromements peuvent être exécutés comme suit.
5 voies 1 ~ 5 tirs
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 voies-5 ~ 10 tirs
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 voies 1 ~ 5 tirs
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 voies-5 ~ 10 tirs
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.434Si vous utilisez quelques-uns dans votre travail, veuillez citer notre article:
@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 " ,
}L'ensemble de données à quelques nerds est distribué dans le cadre de la licence CC BY-SA 4.0. Le code est distribué sous la licence Apache 2.0.
Si vous avez des questions, n'hésitez pas à contacter