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
instruction_ner-0.1.6.tar.gz
(25.9 kB
view details)
Built Distribution
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 |