|
--- |
|
language: |
|
- de |
|
- en |
|
- es |
|
- fr |
|
- it |
|
- nl |
|
- pl |
|
- pt |
|
- ru |
|
- zh |
|
license: cc-by-nc-sa-4.0 |
|
tags: |
|
- generated_from_trainer |
|
- ner |
|
- named-entity-recognition |
|
- span-marker |
|
datasets: |
|
- Babelscape/multinerd |
|
metrics: |
|
- precision |
|
- recall |
|
- f1 |
|
pipeline_tag: token-classification |
|
widget: |
|
- text: amelia earthart flog mit ihrer einmotorigen lockheed vega 5b über den atlantik |
|
nach paris. |
|
example_title: German |
|
- text: amelia earhart flew her single engine lockheed vega 5b across the atlantic |
|
to paris. |
|
example_title: English |
|
- text: amelia earthart voló su lockheed vega 5b monomotor a través del océano atlántico |
|
hasta parís. |
|
example_title: Spanish |
|
- text: amelia earthart a fait voler son monomoteur lockheed vega 5b à travers l'ocean |
|
atlantique jusqu'à paris. |
|
example_title: French |
|
- text: amelia earhart ha volato con il suo monomotore lockheed vega 5b attraverso |
|
l'atlantico fino a parigi. |
|
example_title: Italian |
|
- text: amelia earthart vloog met haar één-motorige lockheed vega 5b over de atlantische |
|
oceaan naar parijs. |
|
example_title: Dutch |
|
- text: amelia earthart przeleciała swoim jednosilnikowym samolotem lockheed vega |
|
5b przez ocean atlantycki do paryża. |
|
example_title: Polish |
|
- text: amelia earhart voou em seu monomotor lockheed vega 5b através do atlântico |
|
para paris. |
|
example_title: Portuguese |
|
- text: амелия эртхарт перелетела на своем одномоторном самолете lockheed vega 5b |
|
через атлантический океан в париж. |
|
example_title: Russian |
|
- text: amelia earthart flaug eins hreyfils lockheed vega 5b yfir atlantshafið til |
|
parísar. |
|
example_title: Icelandic |
|
- text: η amelia earthart πέταξε το μονοκινητήριο lockheed vega 5b της πέρα από |
|
τον ατλαντικό ωκεανό στο παρίσι. |
|
example_title: Greek |
|
- text: amelia earhartová přeletěla se svým jednomotorovým lockheed vega 5b přes atlantik |
|
do paříže. |
|
example_title: Czech |
|
- text: amelia earhart lensi yksimoottorisella lockheed vega 5b:llä atlantin yli pariisiin. |
|
example_title: Finnish |
|
- text: amelia earhart fløj med sin enmotoriske lockheed vega 5b over atlanten til |
|
paris. |
|
example_title: Danish |
|
- text: amelia earhart flög sin enmotoriga lockheed vega 5b över atlanten till paris. |
|
example_title: Swedish |
|
- text: amelia earhart fløy sin enmotoriske lockheed vega 5b over atlanterhavet til |
|
paris. |
|
example_title: Norwegian |
|
- text: amelia earhart și-a zburat cu un singur motor lockheed vega 5b peste atlantic |
|
până la paris. |
|
example_title: Romanian |
|
- text: amelia earhart menerbangkan mesin tunggal lockheed vega 5b melintasi atlantik |
|
ke paris. |
|
example_title: Indonesian |
|
- text: амелія эрхарт пераляцела на сваім аднаматорным lockheed vega 5b праз атлантыку |
|
ў парыж. |
|
example_title: Belarusian |
|
- text: амелія ергарт перелетіла на своєму одномоторному літаку lockheed vega 5b через |
|
атлантику до парижа. |
|
example_title: Ukrainian |
|
- text: amelia earhart preletjela je svojim jednomotornim zrakoplovom lockheed vega |
|
5b preko atlantika do pariza. |
|
example_title: Croatian |
|
- text: amelia earhart lendas oma ühemootoriga lockheed vega 5b üle atlandi ookeani |
|
pariisi. |
|
example_title: Estonian |
|
base_model: bert-base-multilingual-uncased |
|
model-index: |
|
- name: span-marker-bert-base-multilingual-uncased-multinerd |
|
results: |
|
- task: |
|
type: token-classification |
|
name: Named Entity Recognition |
|
dataset: |
|
name: MultiNERD |
|
type: Babelscape/multinerd |
|
split: test |
|
revision: 2814b78e7af4b5a1f1886fe7ad49632de4d9dd25 |
|
metrics: |
|
- type: f1 |
|
value: 0.9187 |
|
name: F1 |
|
- type: precision |
|
value: 0.9202 |
|
name: Precision |
|
- type: recall |
|
value: 0.9172 |
|
name: Recall |
|
--- |
|
|
|
<!-- This model card has been generated automatically according to the information the Trainer had access to. You |
|
should probably proofread and complete it, then remove this comment. --> |
|
|
|
# span-marker-bert-base-multilingual-uncased-multinerd |
|
|
|
This model is a fine-tuned version of [bert-base-multilingual-uncased](https://huggingface.co/bert-base-multilingual-uncased) on an [Babelscape/multinerd](https://huggingface.co/datasets/Babelscape/multinerd) dataset. |
|
|
|
Is your data always capitalized correctly? Then consider using the cased variant of this model instead for better performance: |
|
[lxyuan/span-marker-bert-base-multilingual-cased-multinerd](https://huggingface.co/lxyuan/span-marker-bert-base-multilingual-cased-multinerd). |
|
|
|
This model achieves the following results on the evaluation set: |
|
- Loss: 0.0054 |
|
- Overall Precision: 0.9275 |
|
- Overall Recall: 0.9147 |
|
- Overall F1: 0.9210 |
|
- Overall Accuracy: 0.9842 |
|
|
|
Test set results: |
|
|
|
- test_loss: 0.0058621917851269245, |
|
- test_overall_accuracy: 0.9831472809849865, |
|
- test_overall_f1: 0.9187844693592546, |
|
- test_overall_precision: 0.9202802342397876, |
|
- test_overall_recall: 0.9172935588307115, |
|
- test_runtime: 2716.7472, |
|
- test_samples_per_second: 149.141, |
|
- test_steps_per_second: 4.661, |
|
|
|
Note: |
|
This is a replication of Tom's work. In this work, we used slightly different hyperparameters: `epochs=3` and `gradient_accumulation_steps=2`. |
|
We also switched to the uncased [bert model](https://huggingface.co/bert-base-multilingual-uncased) to see if an uncased encoder model would perform better for commonly lowercased entities like, such as food. Please check the discussion [here](https://huggingface.co/lxyuan/span-marker-bert-base-multilingual-cased-multinerd/discussions/1). |
|
Refer to the official [model page](https://huggingface.co/tomaarsen/span-marker-mbert-base-multinerd) to review their results and training script. |
|
|
|
## Results: |
|
|
|
| **Language** | **Precision** | **Recall** | **F1** | |
|
|--------------|---------------|------------|-----------| |
|
| **all** | 92.03 | 91.73 | **91.88** | |
|
| **de** | 94.96 | 94.87 | **94.91** | |
|
| **en** | 93.69 | 93.75 | **93.72** | |
|
| **es** | 91.19 | 90.69 | **90.94** | |
|
| **fr** | 91.36 | 90.74 | **91.05** | |
|
| **it** | 90.51 | 92.57 | **91.53** | |
|
| **nl** | 93.23 | 92.13 | **92.67** | |
|
| **pl** | 92.17 | 91.59 | **91.88** | |
|
| **pt** | 92.70 | 91.59 | **92.14** | |
|
| **ru** | 92.31 | 92.36 | **92.34** | |
|
| **zh** | 88.91 | 87.53 | **88.22** | |
|
|
|
Below is a combined table that compares the results of the cased and uncased models for each language: |
|
|
|
| **Language** | **Metric** | **Cased** | **Uncased** | |
|
|--------------|--------------|-----------|-------------| |
|
| **all** | Precision | 92.42 | 92.03 | |
|
| | Recall | 92.81 | 91.73 | |
|
| | F1 | **92.61** | 91.88 | |
|
| **de** | Precision | 95.03 | 94.96 | |
|
| | Recall | 95.07 | 94.87 | |
|
| | F1 | **95.05** | 94.91 | |
|
| **en** | Precision | 95.00 | 93.69 | |
|
| | Recall | 95.40 | 93.75 | |
|
| | F1 | **95.20** | 93.72 | |
|
| **es** | Precision | 92.05 | 91.19 | |
|
| | Recall | 91.37 | 90.69 | |
|
| | F1 | **91.71** | 90.94 | |
|
| **fr** | Precision | 92.37 | 91.36 | |
|
| | Recall | 91.41 | 90.74 | |
|
| | F1 | **91.89** | 91.05 | |
|
| **it** | Precision | 91.45 | 90.51 | |
|
| | Recall | 93.15 | 92.57 | |
|
| | F1 | **92.29** | 91.53 | |
|
| **nl** | Precision | 93.85 | 93.23 | |
|
| | Recall | 92.98 | 92.13 | |
|
| | F1 | **93.41** | 92.67 | |
|
| **pl** | Precision | 93.13 | 92.17 | |
|
| | Recall | 92.66 | 91.59 | |
|
| | F1 | **92.89** | 91.88 | |
|
| **pt** | Precision | 93.60 | 92.70 | |
|
| | Recall | 92.50 | 91.59 | |
|
| | F1 | **93.05** | 92.14 | |
|
| **ru** | Precision | 93.25 | 92.31 | |
|
| | Recall | 93.32 | 92.36 | |
|
| | F1 | **93.29** | 92.34 | |
|
| **zh** | Precision | 89.47 | 88.91 | |
|
| | Recall | 88.40 | 87.53 | |
|
| | F1 | **88.93** | 88.22 | |
|
|
|
Short discussion: |
|
Upon examining the results, one might conclude that the cased version of the model is better than the uncased version, |
|
as it outperforms the latter across all languages. However, I recommend that users test both models on their specific |
|
datasets (or domains) to determine which one actually delivers better performance. My reasoning for this suggestion |
|
stems from a brief comparison I conducted on the FOOD (food) entities. I found that both cased and uncased models are |
|
sensitive to the full stop punctuation mark. We direct readers to the section: Quick Comparison on FOOD Entities. |
|
|
|
|
|
## Label set |
|
|
|
| Class | Description | Examples | |
|
|-------|-------------|----------| |
|
| **PER (person)** | People | Ray Charles, Jessica Alba, Leonardo DiCaprio, Roger Federer, Anna Massey. | |
|
| **ORG (organization)** | Associations, companies, agencies, institutions, nationalities and religious or political groups | University of Edinburgh, San Francisco Giants, Google, Democratic Party. | |
|
| **LOC (location)** | Physical locations (e.g. mountains, bodies of water), geopolitical entities (e.g. cities, states), and facilities (e.g. bridges, buildings, airports). | Rome, Lake Paiku, Chrysler Building, Mount Rushmore, Mississippi River. | |
|
| **ANIM (animal)** | Breeds of dogs, cats and other animals, including their scientific names. | Maine Coon, African Wild Dog, Great White Shark, New Zealand Bellbird. | |
|
| **BIO (biological)** | Genus of fungus, bacteria and protoctists, families of viruses, and other biological entities. | Herpes Simplex Virus, Escherichia Coli, Salmonella, Bacillus Anthracis. | |
|
| **CEL (celestial)** | Planets, stars, asteroids, comets, nebulae, galaxies and other astronomical objects. | Sun, Neptune, Asteroid 187 Lamberta, Proxima Centauri, V838 Monocerotis. | |
|
| **DIS (disease)** | Physical, mental, infectious, non-infectious, deficiency, inherited, degenerative, social and self-inflicted diseases. | Alzheimer’s Disease, Cystic Fibrosis, Dilated Cardiomyopathy, Arthritis. | |
|
| **EVE (event)** | Sport events, battles, wars and other events. | American Civil War, 2003 Wimbledon Championships, Cannes Film Festival. | |
|
| **FOOD (food)** | Foods and drinks. | Carbonara, Sangiovese, Cheddar Beer Fondue, Pizza Margherita. | |
|
| **INST (instrument)** | Technological instruments, mechanical instruments, musical instruments, and other tools. | Spitzer Space Telescope, Commodore 64, Skype, Apple Watch, Fender Stratocaster. | |
|
| **MEDIA (media)** | Titles of films, books, magazines, songs and albums, fictional characters and languages. | Forbes, American Psycho, Kiss Me Once, Twin Peaks, Disney Adventures. | |
|
| **PLANT (plant)** | Types of trees, flowers, and other plants, including their scientific names. | Salix, Quercus Petraea, Douglas Fir, Forsythia, Artemisia Maritima. | |
|
| **MYTH (mythological)** | Mythological and religious entities. | Apollo, Persephone, Aphrodite, Saint Peter, Pope Gregory I, Hercules. | |
|
| **TIME (time)** | Specific and well-defined time intervals, such as eras, historical periods, centuries, years and important days. No months and days of the week. | Renaissance, Middle Ages, Christmas, Great Depression, 17th Century, 2012. | |
|
| **VEHI (vehicle)** | Cars, motorcycles and other vehicles. | Ferrari Testarossa, Suzuki Jimny, Honda CR-X, Boeing 747, Fairey Fulmar. | |
|
|
|
|
|
## Inference Example |
|
|
|
```python |
|
# install span_marker |
|
(env)$ pip install span_marker |
|
|
|
|
|
from span_marker import SpanMarkerModel |
|
|
|
model = SpanMarkerModel.from_pretrained("lxyuan/span-marker-bert-base-multilingual-uncased-multinerd") |
|
|
|
description = "Singapore is renowned for its hawker centers offering dishes \ |
|
like Hainanese chicken rice and laksa, while Malaysia boasts dishes such as \ |
|
nasi lemak and rendang, reflecting its rich culinary heritage." |
|
|
|
entities = model.predict(description) |
|
|
|
entities |
|
>>> |
|
[ |
|
{'span': 'Singapore', 'label': 'LOC', 'score': 0.9999247789382935, 'char_start_index': 0, 'char_end_index': 9}, |
|
{'span': 'laksa', 'label': 'FOOD', 'score': 0.794235348701477, 'char_start_index': 93, 'char_end_index': 98}, |
|
{'span': 'Malaysia', 'label': 'LOC', 'score': 0.9999157190322876, 'char_start_index': 106, 'char_end_index': 114} |
|
] |
|
|
|
# missed: Hainanese chicken rice as FOOD |
|
# missed: nasi lemak as FOOD |
|
# missed: rendang as FOOD |
|
|
|
# note: Unfortunately, this uncased version still fails to pick up those commonly lowercased food entities and even misses out on the capitalized `Hainanese chicken rice` entity. |
|
``` |
|
|
|
#### Quick test on Chinese |
|
```python |
|
from span_marker import SpanMarkerModel |
|
|
|
model = SpanMarkerModel.from_pretrained("lxyuan/span-marker-bert-base-multilingual-uncased-multinerd") |
|
|
|
# translate to chinese |
|
description = "Singapore is renowned for its hawker centers offering dishes \ |
|
like Hainanese chicken rice and laksa, while Malaysia boasts dishes such as \ |
|
nasi lemak and rendang, reflecting its rich culinary heritage." |
|
|
|
zh_description = "新加坡因其小贩中心提供海南鸡饭和叻沙等菜肴而闻名, 而马来西亚则拥有椰浆饭和仁当等菜肴,反映了其丰富的烹饪传统." |
|
|
|
entities = model.predict(zh_description) |
|
|
|
entities |
|
>>> |
|
[ |
|
{'span': '新加坡', 'label': 'LOC', 'score': 0.8477746248245239, 'char_start_index': 0, 'char_end_index': 3}, |
|
{'span': '马来西亚', 'label': 'LOC', 'score': 0.7525337934494019, 'char_start_index': 27, 'char_end_index': 31} |
|
] |
|
|
|
# It only managed to capture two countries: Singapore and Malaysia. |
|
# All other entities were missed out. |
|
# Same prediction as the [uncased model](https://huggingface.co/lxyuan/span-marker-bert-base-multilingual-cased-multinerd) |
|
``` |
|
|
|
### Quick Comparison on FOOD Entities |
|
|
|
In this quick comparison, we found that a full stop punctuation mark seems to help the uncased model identify food entities, |
|
regardless of whether they are capitalized or in uppercase. In contrast, the cased model doesn't respond well to full stops, |
|
and adding them would lower the prediction score. |
|
|
|
```python |
|
from span_marker import SpanMarkerModel |
|
|
|
cased_model = SpanMarkerModel.from_pretrained("lxyuan/span-marker-bert-base-multilingual-cased-multinerd") |
|
uncased_model = SpanMarkerModel.from_pretrained("lxyuan/span-marker-bert-base-multilingual-uncased-multinerd") |
|
|
|
# no full stop mark |
|
uncased_model.predict("i love fried chicken and korea bbq") |
|
>>> [] |
|
|
|
uncased_model.predict("i love fried chicken and korea BBQ") # Uppercase BBQ only |
|
>>> [] |
|
|
|
uncased_model.predict("i love fried chicken and Korea BBQ") # Capitalize korea and uppercase BBQ |
|
>>> [] |
|
|
|
# add full stop to get better result |
|
uncased_model.predict("i love fried chicken and korea bbq.") |
|
>>> [ |
|
{'span': 'fried chicken', 'label': 'FOOD', 'score': 0.6531468629837036, 'char_start_index': 7, 'char_end_index': 20}, |
|
{'span': 'korea bbq', 'label': 'FOOD', 'score': 0.9738698601722717, 'char_start_index': 25,'char_end_index': 34} |
|
] |
|
|
|
uncased_model.predict("i love fried chicken and korea BBQ.") |
|
>>> [ |
|
{'span': 'fried chicken', 'label': 'FOOD', 'score': 0.6531468629837036, 'char_start_index': 7, 'char_end_index': 20}, |
|
{'span': 'korea BBQ', 'label': 'FOOD', 'score': 0.9738698601722717, 'char_start_index': 25, 'char_end_index': 34} |
|
] |
|
|
|
uncased_model.predict("i love fried chicken and Korea BBQ.") |
|
>>> [ |
|
{'span': 'fried chicken', 'label': 'FOOD', 'score': 0.6531468629837036, 'char_start_index': 7, 'char_end_index': 20}, |
|
{'span': 'Korea BBQ', 'label': 'FOOD', 'score': 0.9738698601722717, 'char_start_index': 25, 'char_end_index': 34} |
|
] |
|
|
|
|
|
|
|
# no full stop mark |
|
cased_model.predict("i love fried chicken and korea bbq") |
|
>>> [ |
|
{'span': 'korea bbq', 'label': 'FOOD', 'score': 0.5054221749305725, 'char_start_index': 25, 'char_end_index': 34} |
|
] |
|
|
|
cased_model.predict("i love fried chicken and korea BBQ") |
|
>>> [ |
|
{'span': 'korea BBQ', 'label': 'FOOD', 'score': 0.6987857222557068, 'char_start_index': 25, 'char_end_index': 34} |
|
] |
|
|
|
cased_model.predict("i love fried chicken and Korea BBQ") |
|
>>> [ |
|
{'span': 'Korea BBQ', 'label': 'FOOD', 'score': 0.9755308032035828, 'char_start_index': 25, 'char_end_index': 34} |
|
] |
|
|
|
# add a fullstop mark hurt the cased model prediction score a little bit |
|
cased_model.predict("i love fried chicken and korea bbq.") |
|
>>> [] |
|
|
|
cased_model.predict("i love fried chicken and korea BBQ.") |
|
>>> [ |
|
{'span': 'korea BBQ', 'label': 'FOOD', 'score': 0.5078140497207642, 'char_start_index': 25, 'char_end_index': 34} |
|
] |
|
|
|
cased_model.predict("i love fried chicken and Korea BBQ.") |
|
>>> [ |
|
{'span': 'Korea BBQ', 'label': 'FOOD', 'score': 0.895089328289032, 'char_start_index': 25, 'char_end_index': 34} |
|
] |
|
|
|
``` |
|
|
|
## Training procedure |
|
|
|
One can reproduce the result running this [script](https://huggingface.co/tomaarsen/span-marker-mbert-base-multinerd/blob/main/train.py) |
|
|
|
|
|
### Training hyperparameters |
|
|
|
The following hyperparameters were used during training: |
|
- learning_rate: 5e-05 |
|
- train_batch_size: 32 |
|
- eval_batch_size: 32 |
|
- seed: 42 |
|
- gradient_accumulation_steps: 2 |
|
- total_train_batch_size: 64 |
|
- optimizer: Adam with betas=(0.9,0.999) and epsilon=1e-08 |
|
- lr_scheduler_type: linear |
|
- lr_scheduler_warmup_ratio: 0.1 |
|
- num_epochs: 3 |
|
|
|
### Training results |
|
|
|
| Training Loss | Epoch | Step | Validation Loss | Overall Precision | Overall Recall | Overall F1 | Overall Accuracy | |
|
|:-------------:|:-----:|:------:|:---------------:|:-----------------:|:--------------:|:----------:|:----------------:| |
|
| 0.0157 | 1.0 | 50369 | 0.0048 | 0.9143 | 0.8986 | 0.9064 | 0.9807 | |
|
| 0.003 | 2.0 | 100738 | 0.0047 | 0.9237 | 0.9126 | 0.9181 | 0.9835 | |
|
| 0.0017 | 3.0 | 151107 | 0.0054 | 0.9275 | 0.9147 | 0.9210 | 0.9842 | |
|
|
|
|
|
### Framework versions |
|
|
|
- Transformers 4.30.2 |
|
- Pytorch 2.0.1+cu117 |
|
- Datasets 2.14.3 |
|
- Tokenizers 0.13.3 |