Skip to main content

Unofficial implementation of InstructionNER

Project description

InstructionNER: A Multi-Task Instruction-Based Generative Framework for Few-shot NER

python 3.8 license pypi version pypi downloads

tests codecov

Unofficial implementation of InstructionNER.

Screenshot

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

t5-base-ner-conll

t5-base-ner-mit-restaurant

t5-base-ner-mit-movie

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


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)

Uploaded Source

Built Distribution

instruction_ner-0.1.6-py3-none-any.whl (30.9 kB view details)

Uploaded Python 3

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

Hashes for instruction_ner-0.1.6.tar.gz
Algorithm Hash digest
SHA256 a1f0736605e9e1c322a6f5a23b5222052a1aea48f6f8f21bab4e7458cc30409d
MD5 b8f327afa1128b097e739d3394a0775f
BLAKE2b-256 eaba9622e925618d2037bb8f7cff2333fd53495edeafb80e287b9a0737a8653b

See more details on using hashes here.

File details

Details for the file instruction_ner-0.1.6-py3-none-any.whl.

File metadata

File hashes

Hashes for instruction_ner-0.1.6-py3-none-any.whl
Algorithm Hash digest
SHA256 fb966a762d480cafc82a3ca9078973a2ad0fa84bd996334b3c7b1403bcaf1500
MD5 ef461e6a8adcde5fba4bd8f17bea6929
BLAKE2b-256 1113cb4ef6217edaae0c0a7913569d0c0702b7971af4c687fb991d3dffe15ff6

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page