Este é o código-fonte do documento ACL-IJCNLP 2021: Few-Enerd: Alguns dados de reconhecimento de entidade nomeados . Confira o site da Few -nerd.
***************************************
03/03/2022: Adicionamos o script de treinamento para treinamento supervisionado usando o Bert Tagger. Run bash data/download.sh supervised para baixar os dados e, em seguida, execute bash run_supervised.sh .
01/09/2021: Modificamos os resultados da configuração supervisionada de poucos nerds no ARXIV, obrigado pela ajuda do Pedromlf.
19/08/2021: IMPORTANTE? Ao acompanhar os dados do episódio lançados, atualizamos o script de treinamento. Basta adicionar --use_sampled_data ao executar train_demo.py para treinar e testar os dados do episódio lançados.
06/06/2021: Para simplificar o treinamento, lançamos os dados amostrados por episódio. Clique aqui para baixar. Os arquivos são nomeados: {train/dev/test}_{N}_{K}.jsonl . Amostramos 20000, 1000, 5000 episódios para trem, desenvolvimento, teste, respectivamente.
26/05/2021: O atual dos poucos (SUP) é o nível de sentença. Em breve, lançaremos os poucos nerds (SUP) 1.1, que é o nível do parágrafo e contém informações mais contextuais.
11/06/2021: modificamos a palavra tokenização e em breve atualizaremos os resultados mais recentes. Agradecemos sinceramente a Tingtingma e Chandan Akiti
Few -nerd é um conjunto de dados de reconhecimento de entidade nomeado manualmente em larga escala e granulação fina, que contém 8 tipos de grão grosso, 66 tipos de granulação fina, 188.200 frases, 491.711 entidades e 4.601.223 tokens . Três tarefas de benchmark são construídas, uma é supervisionada: poucos nerds (SUP) e os outros dois são poucos anos: poucos nerds (intra) e poucos nerds (inter).
O esquema de poucos nerds é:
Few -nerd é anotado manualmente com base no contexto, por exemplo, na frase " Londres é o quinto álbum da banda de rock britânica… ", a entidade nomeada London é rotulada como Art-Music .
Execute o script a seguir para instalar as dependências restantes,
pip install -r requirements.txtsupervised , os outros dois para configuração de poucos tiro inter e intra . Cada um contém três arquivos train.txt , dev.txt , test.txt . Os conjuntos de dados supervised são divididos aleatoriamente. Os conjuntos de dados inter são divididos aleatoriamente dentro do tipo grosso, ou seja, cada arquivo contém todos os 8 tipos grossos, mas diferentes tipos de grão fino. Os conjuntos de dados intra são divididos aleatoriamente por tipo grosso. Para obter os três conjuntos de dados de referência de poucos nerds, basta executar os data/download.sh com parâmetro supervised/inter/intra como abaixo
bash data/download.sh supervisedPara obter os dados amostrados por episódio, execute
bash data/download.sh episode-data
unzip -d data/ data/episode-data.zip Os dados são pré-processados nos formulários de dados NER típicos como abaixo ( 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
. OA estrutura do nosso projeto é:
--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 Conforme estabelecido em nosso artigo, projetamos uma estratégia de amostragem de tiro em n ~ 2k em nosso trabalho, a implementação é SAT util/fewshotsampler.py .
As redes prototípicas com BERT são implementadas no model/proto.py .
Nnshot com Bert é implementado no model/nnshot.py .
O StructShot é realizado adicionando um decodificador Viterbi extra no util/framework.py .
Observe que o codificador de backbone bert que usamos para o modelo de structshot não é pré-treinado com tarefa NER
Run train_demo.py . Os argumentos são apresentados abaixo. Os parâmetros padrão são para modelo proto no conjunto de dados do modo 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 Para hiperparameter --tau em structshot, usamos 0.32 em configuração de 1 tiro, 0.318 para configuração de 5 vias-5 e 0.434 para configuração de 10 vias-5.
Veja o modelo structshot no conjunto de dados inter , por exemplo, os expresso podem ser executados da seguinte forma.
5-Way-1 ~ 5-tiros
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 tiros
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.3210way-5 ~ 10 tiros
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.434Se você usar poucos nerds em seu trabalho, cite nosso papel:
@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 " ,
}O conjunto de dados de poucos energia é distribuído pela licença CC BY-SA 4.0. O código é distribuído sob a licença Apache 2.0.
Se você tiver alguma dúvida, sinta -se à vontade para entrar em contato