Este es el código fuente del documento ACL-IJCNLP 2021: Peque-Gerd: un conjunto de datos de reconocimiento de entidad con nombre de pocos disparos . Consulte el sitio web de pocos.
**********************************************************************************************
03/09/2022: Hemos agregado el script de entrenamiento para el entrenamiento supervisado usando Bert Tagger. Ejecute bash data/download.sh supervised para descargar los datos y luego ejecute bash run_supervised.sh .
01/09/2021: Hemos modificado los resultados de la configuración supervisada de pocos en ARXIV, gracias por la ayuda de Pedromlf.
19/08/2021: ¿IMPORTANTE? En acompañamiento con los datos de episodios publicados, hemos actualizado el script de capacitación. Simplemente agregue --use_sampled_data cuando se ejecute train_demo.py para entrenar y probar en los datos de episodio lanzados.
06/06/2021: Para simplificar la capacitación, hemos lanzado los datos muestreados por episodio. Haga clic aquí para descargar. Los archivos se denominan tales: {train/dev/test}_{N}_{K}.jsonl . Probamos 20000, 1000, 5000 episodios para tren, desarrollo, prueba, respectivamente.
26/05/2021: Los pocos actuales (SUP) es a nivel de oración. Pronto lanzaremos pocos (SUP) 1.1, que es el nivel de párrafo y contiene más información contextual.
06/11/2021: Hemos modificado la palabra tokenización y pronto actualizaremos los últimos resultados. Agradecemos sinceramente a Tingtingma y Chandan Akiti
Peque-Nerd es un conjunto de datos de reconocimiento de entidad de grano a gran escala y de grano fino, que contiene 8 tipos de grano grueso, 66 tipos de grano fino, 188,200 oraciones, 491,711 entidades y 4,601,223 tokens . Se construyen tres tareas de referencia, una se supervisan: pocos (SUP) y las otras dos son pocos disparos: pocos (intra) y pocos (inter).
El esquema de pocos es:
Peque-Nerd se anota manualmente en función del contexto, por ejemplo, en la oración " Londres es el quinto álbum de la banda de rock británico ... ", la entidad nombrada London está etiquetada como Art-Music .
Ejecute el siguiente script para instalar las dependencias restantes,
pip install -r requirements.txtsupervised , los otros dos para la configuración de pocos disparos inter e intra . Cada uno contiene tres archivos train.txt , dev.txt , test.txt . Los conjuntos de datos supervised se dividen al azar. Los conjuntos de datos inter se dividen aleatoriamente dentro de tipo grueso, es decir, cada archivo contiene los 8 tipos gruesos pero diferentes tipos de grano fino. Los conjuntos de datos intra se dividen aleatoriamente por tipo grueso. Para obtener los tres conjuntos de datos de referencia de pocos, simplemente ejecute los data/download.sh con el parámetro supervised/inter/intra como se muestra a continuación
bash data/download.sh supervisedPara probar los datos por episodio, ejecute
bash data/download.sh episode-data
unzip -d data/ data/episode-data.zip Los datos se procesan previamente en los formularios de datos NER típicos como a continuación ( 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 estructura de nuestro proyecto es:
--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 Como se estableció en nuestro documento, diseñamos una estrategia de muestreo de disparos de K ~ 2k en nuestro trabajo, la implementación es SAT util/fewshotsampler.py .
Las redes prototípicas con Bert se implementan en model/proto.py .
NNSHOT con BERT se implementa en model/nnshot.py .
StructShot se realiza agregando un decodificador Viterbi adicional en util/framework.py .
Tenga en cuenta que el codificador Bert Bert que utilizamos para el modelo StructsHot no está previamente capacitado con la tarea NER
Ejecute train_demo.py . Los argumentos se presentan a continuación. Los parámetros predeterminados son para el modelo proto en el conjunto de datos inter modo.
-- 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 Para el hiperparámetro --tau en structshot, usamos 0.32 en la configuración de 1-shot, 0.318 para la configuración de 5 vías-5 y 0.434 para la configuración de 10 vías-5.
Tome el modelo structshot en el conjunto de datos inter por ejemplo, los exprimentos se pueden ejecutar de la siguiente manera.
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-vaya-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-Vaya-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.434Si usa pocos en su trabajo, cite nuestro documento:
@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 " ,
}El conjunto de datos de pocos ganadores se distribuye bajo la licencia CC BY-SA 4.0. El código se distribuye bajo la licencia Apache 2.0.
Si tiene alguna pregunta, no dude en contactar