T-Bner adalah alat Python untuk model bahasa Finetuning pada named-entity-acognition (NER) yang diimplementasikan di Pytorch, tersedia melalui PIP. Ini memiliki antarmuka yang mudah untuk model finetune dan menguji dataset lintas domain dan multibahasa. T-Ner saat ini mengintegrasikan cakupan tinggi dari kumpulan data NER yang tersedia untuk umum dan memungkinkan integrasi dataset khusus yang mudah. Semua model Finetuned dengan T-Ner dapat digunakan pada aplikasi web kami untuk visualisasi. Makalah kami yang menunjukkan T-On telah diterima untuk EACL 2021. Semua model dan dataset dibagikan melalui T-ner Huggingface Group.
Baru (September 2022): Kami merilis Dataset NER baru berdasarkan Twitter tweetner7 dan makalah diterima oleh AACL 2022 Main Conference! Kami merilis dataset bersama dengan model yang disesuaikan, dan lebih detail dapat ditemukan di halaman kertas, repositori dan dataset. Model Twitter NER juga telah diintegrasikan ke dalam tweetNLP, dan demo tersedia di sini.
Instal tner Via Pip untuk memulai!
pip install tner| Keterangan | Link |
|---|---|
| Model finetuning & evaluasi | |
| Prediksi model | |
| Alur kerja NER multibahasa |
Dataset NER berisi urutan token dan tag untuk setiap perpecahan (biasanya train / validation / test ),
{
'train' : {
'tokens' : [
[ '@paulwalk' , 'It' , "'s" , 'the' , 'view' , 'from' , 'where' , 'I' , "'m" , 'living' , 'for' , 'two' , 'weeks' , '.' , 'Empire' , 'State' , 'Building' , '=' , 'ESB' , '.' , 'Pretty' , 'bad' , 'storm' , 'here' , 'last' , 'evening' , '.' ],
[ 'From' , 'Green' , 'Newsfeed' , ':' , 'AHFA' , 'extends' , 'deadline' , 'for' , 'Sage' , 'Award' , 'to' , 'Nov' , '.' , '5' , 'http://tinyurl.com/24agj38' ], ...
],
'tags' : [
[ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 2 , 2 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ],
[ 0 , 0 , 0 , 0 , 3 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ], ...
]
},
'validation' : ...,
'test' : ...,
} dengan kamus untuk memetakan label ke indeksnya ( label2id ) seperti di bawah ini.
{ "O" : 0 , "B-ORG" : 1 , "B-MISC" : 2 , "B-PER" : 3 , "I-PER" : 4 , "B-LOC" : 5 , "I-ORG" : 6 , "I-MISC" : 7 , "I-LOC" : 8 }Berbagai dataset NER publik tersedia di Grup HuggingFace kami, yang dapat digunakan seperti di bawah ini (lihat kartu dataset untuk daftar dataset lengkap).
from tner import get_dataset
data , label2id = get_dataset ( dataset = "tner/wnut2017" )Pengguna dapat menentukan beberapa dataset untuk mendapatkan dataset yang digabungkan.
data , label2id = get_dataset ( dataset = [ "tner/conll2003" , "tner/ontonotes5" ])Dalam kumpulan data yang digabungkan, kami menggunakan set label terpadu untuk menyatukan label entitas. Idenya adalah untuk membagikan semua kumpulan data NER yang tersedia di permukaan pelukan dalam format terpadu, jadi beri tahu kami jika Anda ingin dataset NER apa pun ditambahkan di sana!
Untuk melampaui kumpulan data publik, pengguna dapat menggunakan kumpulan data mereka sendiri dengan memformatnya ke dalam format IOB yang dijelaskan dalam Conll 2003 Ner Shared Task Paper, di mana semua file data berisi satu kata per baris dengan garis kosong yang mewakili batas kalimat. Di akhir setiap baris ada tag yang menyatakan apakah kata saat ini ada di dalam entitas bernama atau tidak. Tag ini juga mengkodekan jenis entitas yang disebutkan. Berikut adalah contoh kalimat:
EU B-ORG
rejects O
German B-MISC
call O
to O
boycott O
British B-MISC
lamb O
. O
Kata-kata yang ditandai dengan O berada di luar entitas yang disebutkan dan tag I-XXX digunakan untuk kata-kata di dalam entitas bernama tipe xxx. Setiap kali dua entitas Type XXX langsung bersebelahan, kata pertama dari entitas kedua akan ditandai B-XXX untuk menunjukkan bahwa itu memulai entitas lain. Silakan lihat contoh data khusus. File -file khusus tersebut dapat dimuat dengan cara yang sama seperti dataset HuggingFace seperti di bawah ini.
from tner import get_dataset
data , label2id = get_dataset ( local_dataset = {
"train" : "examples/local_dataset_sample/train.txt" ,
"valid" : "examples/local_dataset_sample/train.txt" ,
"test" : "examples/local_dataset_sample/test.txt"
})Sama seperti dataset Huggingface, orang dapat menggabungkan dataset.
data , label2id = get_dataset ( local_dataset = [
{ "train" : "..." , "valid" : "..." , "test" : "..." },
{ "train" : "..." , "valid" : "..." , "test" : "..." }
]
) T-Ner saat ini telah berbagi lebih dari 100 model NER pada Grup HuggingFace, seperti yang ditunjukkan pada tabel di atas, yang melaporkan hanya model utama dan melihat Model_Card untuk daftar model lengkap. Semua model dapat digunakan dengan tner seperti di bawah ini.
from tner import TransformersNER
model = TransformersNER ( "tner/roberta-large-wnut2017" ) # provide model alias on huggingface
output = model . predict ([ "Jacob Collier is a Grammy awarded English artist from London" ]) # give a list of sentences (or tokenized sentence)
print ( output )
{
'prediction' : [[ 'B-person' , 'I-person' , 'O' , 'O' , 'O' , 'O' , 'O' , 'O' , 'O' , 'B-location' ]],
'probability' : [[ 0.9967652559280396 , 0.9994561076164246 , 0.9986955523490906 , 0.9947081804275513 , 0.6129112243652344 , 0.9984312653541565 , 0.9868122935295105 , 0.9983410835266113 , 0.9995284080505371 , 0.9838910698890686 ]],
'input' : [[ 'Jacob' , 'Collier' , 'is' , 'a' , 'Grammy' , 'awarded' , 'English' , 'artist' , 'from' , 'London' ]],
'entity_prediction' : [[
{ 'type' : 'person' , 'entity' : [ 'Jacob' , 'Collier' ], 'position' : [ 0 , 1 ], 'probability' : [ 0.9967652559280396 , 0.9994561076164246 ]},
{ 'type' : 'location' , 'entity' : [ 'London' ], 'position' : [ 9 ], 'probability' : [ 0.9838910698890686 ]}
]]
} model.predict mengambil daftar kalimat dan ukuran batch batch_size secara opsional, dan tokenisasi kalimat dengan ruang setengah atau simbol yang ditentukan oleh separator , yang dikembalikan sebagai input dalam objek outputnya. Secara opsional, pengguna dapat tokenisasi input sebelumnya dengan tokenizer apa pun (Spacy, NLTK, dll) dan prediksi akan mengikuti tokenisasi.
output = model . predict ([[ "Jacob Collier" , "is" , "a" , "Grammy awarded" , "English artist" , "from" , "London" ]])
print ( output )
{
'prediction' : [[ 'B-person' , 'O' , 'O' , 'O' , 'O' , 'O' , 'B-location' ]],
'probability' : [[ 0.9967652559280396 , 0.9986955523490906 , 0.9947081804275513 , 0.6129112243652344 , 0.9868122935295105 , 0.9995284080505371 , 0.9838910698890686 ]],
'input' : [[ 'Jacob Collier' , 'is' , 'a' , 'Grammy awarded' , 'English artist' , 'from' , 'London' ]],
'entity_prediction' : [[
{ 'type' : 'person' , 'entity' : [ 'Jacob Collier' ], 'position' : [ 0 ], 'probability' : [ 0.9967652559280396 ]},
{ 'type' : 'location' , 'entity' : [ 'London' ], 'position' : [ 6 ], 'probability' : [ 0.9838910698890686 ]}
]]
} Pos Pemeriksaan Model Lokal dapat ditentukan alih-alih Model Alias TransformersNER("path-to-checkpoint") . Script untuk memproduksi ulang model yang dirilis ada di sini.
Alat baris perintah berikut tersedia untuk prediksi model.
tner-predict [-h] -m MODEL
command line tool to test finetuned NER model
optional arguments:
-h, --help show this help message and exit
-m MODEL, --model MODEL
model alias of huggingface or local checkpointtner-predict -m " tner/roberta-large-wnut2017 " Untuk menginstal dependensi untuk menjalankan aplikasi web, tambahkan opsi saat instalasi.
pip install tner[app]Kemudian, klon repositori
git clone https://github.com/asahi417/tner
cd tnerdan luncurkan server.
uvicorn app:app --reload --log-level debug --host 0.0.0.0 --port 8000 Buka browser Anda http://0.0.0.0:8000 sekali siap. Anda dapat menentukan model untuk digunakan oleh variabel lingkungan NER_MODEL , yang ditetapkan sebagai tner/roberta-large-wnut2017 sebagai default. NER_MODEL dapat menjadi jalur ke Direktori Checkpoint Model Lokal Anda atau nama model di Transformers Model Hub.
Pengakuan Antarmuka aplikasi sangat terinspirasi oleh repositori ini.
T-Ner menyediakan API yang mudah untuk menjalankan fine-tuning model bahasa pada NER dengan pencarian parameter yang efisien seperti dijelaskan di atas. Ini terdiri dari 2 tahap: (i) menyempurnakan dengan setiap konfigurasi yang mungkin untuk zaman kecil dan menghitung metrik evaluasi (mikro F1 sebagai default) pada set validasi untuk semua model, dan (ii) mengambil model top K untuk melanjutkan penyempurnaan sampai L zaman. Model terbaik di tahap kedua akan terus menyempurnakan sampai metrik validasi berkurang.
Penyesuaian yang disempurnakan dengan pencarian parameter dua tahap ini dapat dicapai dalam beberapa baris dengan tner .
from tner import GridSearcher
searcher = GridSearcher (
checkpoint_dir = './ckpt_tner' ,
dataset = "tner/wnut2017" , # either of `dataset` (huggingface dataset) or `local_dataset` (custom dataset) should be given
model = "roberta-large" , # language model to fine-tune
epoch = 10 , # the total epoch (`L` in the figure)
epoch_partial = 5 , # the number of epoch at 1st stage (`M` in the figure)
n_max_config = 3 , # the number of models to pass to 2nd stage (`K` in the figure)
batch_size = 16 ,
gradient_accumulation_steps = [ 4 , 8 ],
crf = [ True , False ],
lr = [ 1e-4 , 1e-5 ],
weight_decay = [ 1e-7 ],
random_seed = [ 42 ],
lr_warmup_step_ratio = [ 0.1 ],
max_grad_norm = [ 10 ]
)
searcher . train ()Parameter berikut dapat disetel saat ini.
gradient_accumulation_steps : Jumlah akumulasi gradiencrf : Gunakan CRF di atas output embeddinglr : Tingkat Pembelajaranweight_decay : Koefisien untuk pembusukan berat badanrandom_seed : biji acaklr_warmup_step_ratio : rasio pemanasan linier tingkat pembelajaran, misalnya) Jika 0,3, laju pembelajaran akan menghangat secara linear hingga 30% dari total langkah (tanpa pembusukan)max_grad_norm : norma untuk kliping gradienLihat sumber untuk informasi lebih lanjut tentang setiap argumen.
Alat baris perintah berikut tersedia untuk fine-tuning.
tner-train-search [-h] -c CHECKPOINT_DIR [-d DATASET [DATASET ...]] [-l LOCAL_DATASET [LOCAL_DATASET ...]]
[--dataset-name DATASET_NAME [DATASET_NAME ...]] [-m MODEL] [-b BATCH_SIZE] [-e EPOCH] [--max-length MAX_LENGTH] [--use-auth-token]
[--dataset-split-train DATASET_SPLIT_TRAIN] [--dataset-split-valid DATASET_SPLIT_VALID] [--lr LR [LR ...]]
[--random-seed RANDOM_SEED [RANDOM_SEED ...]] [-g GRADIENT_ACCUMULATION_STEPS [GRADIENT_ACCUMULATION_STEPS ...]]
[--weight-decay WEIGHT_DECAY [WEIGHT_DECAY ...]] [--lr-warmup-step-ratio LR_WARMUP_STEP_RATIO [LR_WARMUP_STEP_RATIO ...]]
[--max-grad-norm MAX_GRAD_NORM [MAX_GRAD_NORM ...]] [--crf CRF [CRF ...]] [--optimizer-on-cpu] [--n-max-config N_MAX_CONFIG]
[--epoch-partial EPOCH_PARTIAL] [--max-length-eval MAX_LENGTH_EVAL]
Fine-tune transformers on NER dataset with Robust Parameter Search
optional arguments:
-h , --help show this help message and exit
-c CHECKPOINT_DIR, --checkpoint-dir CHECKPOINT_DIR
checkpoint directory
-d DATASET [DATASET ...], --dataset DATASET [DATASET ...]
dataset name (or a list of it) on huggingface tner organization eg. ' tner/conll2003 ' [ ' tner/conll2003 ' , ' tner/ontonotes5 ' ]] see
https://huggingface.co/datasets ? search = tner for full dataset list
-l LOCAL_DATASET [LOCAL_DATASET ...], --local-dataset LOCAL_DATASET [LOCAL_DATASET ...]
a dictionary (or a list) of paths to local BIO files eg.{ " train " : " examples/local_dataset_sample/train.txt " , " test " :
" examples/local_dataset_sample/test.txt " }
--dataset-name DATASET_NAME [DATASET_NAME ...]
[optional] data name of huggingface dataset (should be same length as the ` dataset ` )
-m MODEL, --model MODEL
model name of underlying language model (huggingface model)
-b BATCH_SIZE, --batch-size BATCH_SIZE
batch size
-e EPOCH, --epoch EPOCH
the number of epoch
--max-length MAX_LENGTH
max length of language model
--use-auth-token Huggingface transformers argument of ` use_auth_token `
--dataset-split-train DATASET_SPLIT_TRAIN
dataset split to be used for training ( ' train ' as default)
--dataset-split-valid DATASET_SPLIT_VALID
dataset split to be used for validation ( ' validation ' as default)
--lr LR [LR ...] learning rate
--random-seed RANDOM_SEED [RANDOM_SEED ...]
random seed
-g GRADIENT_ACCUMULATION_STEPS [GRADIENT_ACCUMULATION_STEPS ...], --gradient-accumulation-steps GRADIENT_ACCUMULATION_STEPS [GRADIENT_ACCUMULATION_STEPS ...]
the number of gradient accumulation
--weight-decay WEIGHT_DECAY [WEIGHT_DECAY ...]
coefficient of weight decay (set 0 for None)
--lr-warmup-step-ratio LR_WARMUP_STEP_RATIO [LR_WARMUP_STEP_RATIO ...]
linear warmup ratio of learning rate (no decay).eg) if it ' s 0.3, the learning rate will warmup linearly till 30% of the total step
(set 0 for None)
--max-grad-norm MAX_GRAD_NORM [MAX_GRAD_NORM ...]
norm for gradient clipping (set 0 for None)
--crf CRF [CRF ...] use CRF on top of output embedding (0 or 1)
--optimizer-on-cpu put optimizer on CPU to save memory of GPU
--n-max-config N_MAX_CONFIG
the number of configs to run 2nd phase search
--epoch-partial EPOCH_PARTIAL
the number of epoch for 1st phase search
--max-length-eval MAX_LENGTH_EVAL
max length of language model at evaluationtner-train-search -m " roberta-large " -c " ckpt " -d " tner/wnut2017 " -e 15 --epoch-partial 5 --n-max-config 3 -b 64 -g 1 2 --lr 1e-6 1e-5 --crf 0 1 --max-grad-norm 0 10 --weight-decay 0 1e-7 Evaluasi model NER dilakukan oleh model.evaluate Fungsi evaluasi yang mengambil dataset atau local_dataset sebagai dataset untuk dievaluasi.
from tner import TransformersNER
model = TransformersNER ( "tner/roberta-large-wnut2017" ) # provide model alias on huggingface
# huggingface dataset
metric = model . evaluate ( 'tner/wnut2017' , dataset_split = 'test' )
# local dataset
metric = model . evaluate ( local_dataset = { "test" : "examples/local_dataset_sample/test.txt" }, dataset_split = 'test' ) Contoh metric objek output dapat ditemukan di sini.
Untuk pemahaman yang lebih baik tentang akurasi di luar domain, kami menyediakan pipa prediksi rentang entitas, yang mengabaikan jenis entitas dan menghitung metrik hanya pada posisi entitas IOB (pelabelan urutan biner).
metric = model . evaluate ( datasets = 'tner/wnut2017' , dataset_split = 'test' , span_detection_mode = True )Alat baris perintah berikut tersedia untuk prediksi model.
tner-evaluate [-h] -m MODEL -e EXPORT [-d DATASET [DATASET ...]] [-l LOCAL_DATASET [LOCAL_DATASET ...]]
[--dataset-name DATASET_NAME [DATASET_NAME ...]] [--dataset-split DATASET_SPLIT] [--span-detection-mode] [--return-ci] [-b BATCH_SIZE]
Evaluate NER model
optional arguments:
-h , --help show this help message and exit
-m MODEL, --model MODEL
model alias of huggingface or local checkpoint
-e EXPORT, --export EXPORT
file to export the result
-d DATASET [DATASET ...], --dataset DATASET [DATASET ...]
dataset name (or a list of it) on huggingface tner organization eg. ' tner/conll2003 ' [ ' tner/conll2003 ' , ' tner/ontonotes5 ' ]] see
https://huggingface.co/datasets ? search = tner for full dataset list
-l LOCAL_DATASET [LOCAL_DATASET ...], --local-dataset LOCAL_DATASET [LOCAL_DATASET ...]
a dictionary (or a list) of paths to local BIO files eg.{ " train " : " examples/local_dataset_sample/train.txt " , " test " :
" examples/local_dataset_sample/test.txt " }
--dataset-name DATASET_NAME [DATASET_NAME ...]
[optional] data name of huggingface dataset (should be same length as the ` dataset ` )
--dataset-split DATASET_SPLIT
dataset split to be used for test ( ' test ' as default)
--span-detection-mode
return F1 of entity span detection (ignoring entity type error and cast as binary sequence classification as below)- NER : [ " O " ,
" B-PER " , " I-PER " , " O " , " B-LOC " , " O " , " B-ORG " ]- Entity-span detection: [ " O " , " B-ENT " , " I-ENT " , " O " , " B-ENT " , " O " , " B-ENT " ]
--return-ci return confidence interval by bootstrap
-b BATCH_SIZE, --batch-size BATCH_SIZE
batch sizetner-evaluate -m " tner/roberta-large-wnut2017 " -e " metric.json " -d " tner/conll2003 " -b " 32 " Jika Anda menggunakan salah satu sumber daya ini, silakan mengutip makalah berikut:
@inproceedings{ushio-camacho-collados-2021-ner,
title = "{T}-{NER}: An All-Round Python Library for Transformer-based Named Entity Recognition",
author = "Ushio, Asahi and
Camacho-Collados, Jose",
booktitle = "Proceedings of the 16th Conference of the European Chapter of the Association for Computational Linguistics: System Demonstrations",
month = apr,
year = "2021",
address = "Online",
publisher = "Association for Computational Linguistics",
url = "https://www.aclweb.org/anthology/2021.eacl-demos.7",
pages = "53--62",
abstract = "Language model (LM) pretraining has led to consistent improvements in many NLP downstream tasks, including named entity recognition (NER). In this paper, we present T-NER (Transformer-based Named Entity Recognition), a Python library for NER LM finetuning. In addition to its practical utility, T-NER facilitates the study and investigation of the cross-domain and cross-lingual generalization ability of LMs finetuned on NER. Our library also provides a web app where users can get model predictions interactively for arbitrary text, which facilitates qualitative model evaluation for non-expert programmers. We show the potential of the library by compiling nine public NER datasets into a unified format and evaluating the cross-domain and cross- lingual performance across the datasets. The results from our initial experiments show that in-domain performance is generally competitive across datasets. However, cross-domain generalization is challenging even with a large pretrained LM, which has nevertheless capacity to learn domain-specific features if fine- tuned on a combined dataset. To facilitate future research, we also release all our LM checkpoints via the Hugging Face model hub.",
}