이것은 ACL-IJCNLP 2021 용지의 소스 코드 입니다 . 소수의 웹 사이트를 확인하십시오.
*********************************** UPDATES *****************************************
09/03/2022 : Bert Tagger를 사용하여 감독 훈련을위한 교육 스크립트를 추가했습니다. bash data/download.sh supervised 데이터를 다운로드 한 다음 bash run_supervised.sh 실행하십시오.
01/09/2021 : 우리는 Arxiv에서 몇 안정의 감독 된 설정 결과를 수정했습니다. Pedromlf의 도움에 감사드립니다.
19/08/2021 : 중요합니까? 발표 된 에피소드 데이터와 함께 교육 스크립트를 업데이트했습니다. train_demo.py 실행할 때 --use_sampled_data 추가하여 릴리스 된 에피소드 데이터를 훈련하고 테스트 할 때 간단히 추가하십시오.
02/06/2021 : 교육을 단순화하기 위해 에피소드로 샘플링 된 데이터를 발표했습니다. 다운로드하려면 여기를 클릭하십시오. 파일의 이름은 {train/dev/test}_{N}_{K}.jsonl 과 같은 이름입니다. 우리는 각각 기차, Dev, Test를위한 20000, 1000, 5000 에피소드를 샘플링했습니다.
26/05/2021 : 현재 소수의 소수 (SUP)는 문장 수준입니다. 우리는 곧 단락 수준이며 더 많은 맥락 정보를 포함하는 몇 개의 NERD (SUP) 1.1을 출시 할 것입니다.
11/06/2021 : 우리는 Tokenization이라는 단어를 수정했으며 곧 최신 결과를 업데이트 할 것입니다. 우리는 Tingtingma와 Chandan Akiti에게 진심으로 감사합니다
소수의 사람은 8 개의 거친 입자 유형, 66 개의 세밀한 유형, 188,200 문장, 491,711 개 엔티티 및 4,601,223 개의 토큰을 포함하는 대규모의 세밀한 수동으로 주석이 달린 지명 된 엔티티 인식 데이터 세트입니다. 세 가지 벤치 마크 작업이 구축되고, 하나는 감독됩니다.
소수의 스키마는 다음과 같습니다.
예 Art-Music 들어, 문맥에서 " London 은 영국 록 밴드의 다섯 번째 앨범…
나머지 종속성을 설치하려면 다음 스크립트를 실행하십시오.
pip install -r requirements.txtsupervised 용이고, 다른 하나는 몇 샷 설정 inter 와 intra 위한 것입니다. 각각에는 3 개의 파일이 포함되어 있습니다. train.txt , dev.txt , test.txt 포함되어 있습니다. supervised 데이터 세트는 무작위로 분할됩니다. inter 데이터 세트는 거친 유형 내에서 무작위로 분할되며, 즉 각 파일에는 8 가지 거친 유형이 모두 포함되어 있지만 세분화 된 유형이 다릅니다. intra 데이터 세트는 무작위로 거친 유형으로 분리됩니다. 소수의 벤치 마크 데이터 세트를 얻으려면 Bash 파일 data/download.sh 실행하십시오 supervised/inter/intra
bash data/download.sh supervised에피소드로 데이터를 샘플링하려면 실행하십시오
bash data/download.sh episode-data
unzip -d data/ data/episode-data.zip 데이터는 다음과 같이 일반적인 NER 데이터 형태로 사전 처리됩니다 ( 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
. O프로젝트의 구조는 다음과 같습니다.
--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 논문에서 설정된 바와 같이, 우리는 우리의 작업에서 n way k ~ 2k 샷 샘플링 전략을 설계하며, 구현은 sat util/fewshotsampler.py 입니다.
Bert가있는 프로토 타입 그물은 model/proto.py 에서 구현됩니다.
Bert와 Nnshot은 model/nnshot.py 에서 구현됩니다.
Structshot은 util/framework.py 에 여분의 Viterbi 디코더를 추가하여 실현됩니다.
Structshot 모델에 사용한 백본 버트 인코더는 NER 작업으로 미리 훈련되지 않습니다.
train_demo.py 실행하십시오. 인수는 아래에 나와 있습니다. 기본 매개 변수는 inter 모드 데이터 세트의 proto 모델에 대한 것입니다.
-- 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 하이퍼 파라미터 --tau 타우에서 Structshot의 경우 1- 샷 설정에서 0.32 , 5-way-5-샷 설정의 경우 0.318 , 10-way-5-샷 설정의 경우 0.434 사용합니다.
inter 데이터 세트에서 structshot 모델을 사용하여 expriments를 다음과 같이 실행할 수 있습니다.
5-way-1 ~ 5- 샷
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- 샷
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- 샷
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- 샷
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.434작업에서 몇 안되는 사람을 사용하는 경우, 우리 논문을 인용하십시오.
@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 " ,
}CC By-SA 4.0 라이센스에 따라 몇 가지 데이터 세트가 배포됩니다. 코드는 Apache 2.0 라이센스에 따라 배포됩니다.
궁금한 점이 있으면 언제든지 연락하십시오