Unofficial implementation of InstructionNER
Project description
InstructionNER: A Multi-Task Instruction-Based Generative Framework for Few-shot NER
Unofficial implementation of InstructionNER.
Requirements
Python >=3.8
Installation
pip install instruction-ner
(Alternative via requirements)
pip install -r requirements/requirements.in # for training purposes
pip install -r requirements/requirements_test.in # for tests
pip install -r requirements/requirements_dev.in # for inference only
Data Preparation
In order to make a unified training interface, you can convert your raw input data (supported dataset formats: conll, spacy, mit) with the following script:
instruction_ner-prepare-data \
--path_to_file 'data/conll2003/train.txt' \
--dataset_type 'conll2003' \
--output_folder 'data/conll2003' \
This script converts every dataset to a list of sentences. Every sentence is like this:
{
"context": "SOCCER - JAPAN GET LUCKY WIN , CHINA IN SURPRISE DEFEAT .",
"entity_values": {
"LOC": [
"JAPAN"
],
"PER": [
"CHINA"
]
},
"entity_spans": [
{
"start": 9,
"end": 14,
"label": "LOC"
},
{
"start": 31,
"end": 36,
"label": "PER"
}
]
}
Training
Script for training T5 model:
instruction_ner-train \
--path_to_instructions 'instructions.json' \
--path_to_options 'options.json' \
--log_dir 'runs/test_run' \
--eval_every_n_batches 200 \
--pred_every_n_batches 200 \
--path_to_model_config 'config.yaml' \
--path_to_model_save 'runs/model/' \
Arguments:
- --path_to_instructions - file with instruction prompts
- --path_to_options - file with mapping dataset to its entities
- --log_dir - where to log tensorboard
- --eval_every_n_batches - do evaluation every n batches
- --pred_every_n_batches - write n sample prediction every n batches
- --path_to_model_config - path to all necessary information for model
- --path_to_model_save - where to save model
Evaluation
Script for evaluation of the trained model:
instruction_ner-evaluate \
--model_path_or_name 'olgaduchovny/t5-base-qa-ner-conll' \
--path_to_model_config 'config.yaml' \
--path_to_instructions 'instructions.json' \
--path_to_options 'options.json' \
Arguments:
- --model_path_or_name - path to trained model or HF model name
- --path_to_model_config - path to all necessary information for model
- --path_to_instructions - file with instruction prompts
- --path_to_options - file with mapping dataset to its entities
Evaluation Results
| Dataset | Precision | Recall | F1-Score (weighted) |
|---|---|---|---|
| CONLL-2003 | 0.862 | 0.843 | 0.852 |
| MIT MOVIE | 0.792 | 0.845 | 0.809 |
| MIT REST | 0.766 | 0.771 | 0.768 |
Prediction Sample
Sentence: The protest , which attracted several thousand supporters , coincided with the 18th anniversary of Spain 's constitution .
Instruction: please extract entities and their types from the input sentence, all entity types are in options
Options: ORG, PER, LOC
Prediction (raw text): Spain is a LOC.
Inference
Models
Code
from instruction_ner.model import Model
model = Model(
model_path_or_name="olgaduchovny/t5-base-ner-conll",
tokenizer_path_or_name="olgaduchovny/t5-base-ner-conll"
)
options = ["LOC", "PER", "ORG", "MISC"]
instruction = "please extract entities and their types from the input sentence, " \
"all entity types are in options"
text = "My name is Olga. I am 24 years old. I live in Moscow and work at Sber AI Center as a Senior NLP Data Scientist." \
"This is my reporitory to test generative NER problem with T5 model."
generation_kwargs = {
"num_beams": 2,
"max_length": 128
}
pred_text, pred_spans = model.predict(
text=text,
generation_kwargs=generation_kwargs,
instruction=instruction,
options=options
)
>>> ('Olga is a PER, Moscow is a LOC, Sber AI Center is an ORG, NLP is a MISC.',
[(11, 15, 'PER'), (46, 52, 'LOC'), (65, 79, 'ORG'), (92, 95, 'MISC')])
Citation
@article{wang2022instructionner,
title={Instructionner: A multi-task instruction-based generative framework for few-shot ner},
author={Wang, Liwen and Li, Rumei and Yan, Yang and Yan, Yuanmeng and Wang, Sirui and Wu, Wei and Xu, Weiran},
journal={arXiv preprint arXiv:2203.03903},
year={2022}
}
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file instruction_ner-0.1.6.tar.gz.
File metadata
- Download URL: instruction_ner-0.1.6.tar.gz
- Upload date:
- Size: 25.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.16
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a1f0736605e9e1c322a6f5a23b5222052a1aea48f6f8f21bab4e7458cc30409d
|
|
| MD5 |
b8f327afa1128b097e739d3394a0775f
|
|
| BLAKE2b-256 |
eaba9622e925618d2037bb8f7cff2333fd53495edeafb80e287b9a0737a8653b
|
File details
Details for the file instruction_ner-0.1.6-py3-none-any.whl.
File metadata
- Download URL: instruction_ner-0.1.6-py3-none-any.whl
- Upload date:
- Size: 30.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.16
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fb966a762d480cafc82a3ca9078973a2ad0fa84bd996334b3c7b1403bcaf1500
|
|
| MD5 |
ef461e6a8adcde5fba4bd8f17bea6929
|
|
| BLAKE2b-256 |
1113cb4ef6217edaae0c0a7913569d0c0702b7971af4c687fb991d3dffe15ff6
|