これは、 ACL-IJCNLP 2021ペーパーのソースコードです。少数のnerdのウェブサイトをご覧ください。
*********************************更新*************************************
09/03/2022:Bert Taggerを使用して、監視されたトレーニング用のトレーニングスクリプトを追加しました。 bash data/download.sh supervisedデータをダウンロードしてから、 bash run_supervised.shを実行します。
01/09/2021:Pedromlfの助けを借りて、Arxivでの少数の少数の設定の結果を変更しました。
19/08/2021:重要ですか?リリースされたエピソードデータに伴う場合、トレーニングスクリプトを更新しました。 train_demo.pyを実行するときに--use_sampled_dataを追加するだけで、リリースされたエピソードデータをトレーニングおよびテストします。
02/06/2021:トレーニングを簡素化するために、エピソードでサンプリングされたデータをリリースしました。ダウンロードするにはここをクリックしてください。ファイルには次の名前が付けられています。 {train/dev/test}_{N}_{K}.jsonl 。それぞれ20000、1000、5000エピソードをサンプリングしました。
26/05/2021:現在の数え切れないほどの数字(SUP)は文レベルです。まもなく数字(SUP)1.1をリリースします。これは段落レベルであり、より多くのコンテキスト情報を含みます。
11/06/2021:トークン化という言葉を変更しました。最新の結果をまもなく更新します。私たちは心からチンティンティンマとチャンダン・アキティに感謝します
少数の標識は、8つの粗粒のタイプ、66の細かい型、188,200文、491,711エンティティ、4,601,223トークンを含む、大規模で微細な手動で注釈付きの名前付きエンティティ認識データセットです。 3つのベンチマークタスクが構築されています。1つは監視されています。1つは少数(SUP)と他の2つは少ないショットです。
少数のわずかなスキーマは次のとおりです。
少数のわいせは、コンテキストに基づいて手動で注釈が付けられています。たとえば、「ロンドンはイギリスのロックバンドによる5枚目のアルバム… 」という文章では、 Londonという名前はArt-Musicとラベル付けされています。
次のスクリプトを実行して、残りの依存関係をインストールします。
pip install -r requirements.txtsupervised設定のための1つ、他の2つは少数のショット設定interとintra 。それぞれに3つのファイルtrain.txt 、 dev.txt 、 test.txtが含まれています。 supervisedデータセットはランダムに分割されます。 interデータセットは粗いタイプ内でランダムに分割されます。つまり、各ファイルには8つの粗いタイプすべてが含まれていますが、さまざまな細粒タイプが含まれています。データintra 、粗いタイプによってランダムに分割されます。少数のわずかなベンチマークデータセットを取得するには、以下のようにパラメーターsupervised/inter/intraを使用して、bash file data/download.shを実行するだけです。
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ウェイk〜2Kショットサンプリング戦略を設計します、実装はsat util/fewshotsampler.pyです。
BERTを使用したプロトタイプのネットは、 model/proto.pyに実装されています。
nnshot with bertは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 HyperParameterの場合--tauは、1ショット設定で0.32ウェイ5ショット設定で0.318ウェイ5ショット設定で0.434使用します。
たとえば、 inter Datasetでstructshotモデルを取ります。たとえば、次のように実行できます。
5ウェイ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ウェイ-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ウェイ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ウェイ-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あなたがあなたの仕事で少数のnectを使用する場合、私たちの論文を引用してください:
@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 " ,
}少ないNERDデータセットは、CC BY-SA 4.0ライセンスの下で配布されます。コードは、Apache 2.0ライセンスの下で配布されます。
ご質問がある場合は、お気軽にお問い合わせください