Skip to main content

Evaluation script for named entity recognition systems based on F1 score.

Project description

https://travis-ci.org/jantrienes/nereval.svg?branch=master

Evaluation script for named entity recognition (NER) systems based on entity-level F1 score.

Definition

The metric as implemented here has been described by Nadeau and Sekine (2007) and was widely used as part of the Message Understanding Conferences (Grishman and Sundheim, 1996). It evaluates an NER system according to two axes: whether it is able to assign the right type to an entity, and whether it finds the exact entity boundaries. For both axes, the number of correct predictions (COR), the number of actual predictions (ACT) and the number of possible predictions (POS) are computed. From these statistics, precision and recall can be derived:

precision = COR/ACT
recall = COR/POS

The final score is the micro-averaged F1 measure of precision and recall of both type and boundary axes.

Installation

git clone https://github.com/jantrienes/nereval.git
cd nereval
pip install .

Usage

The script can either be used from within Python or from the command line when classification results have been written to a JSON file.

Usage from Command Line

Assume we have the following classification results in input.json:

[
  {
    "text": "CILINDRISCHE PLUG",
    "true": [
      {
        "text": "CILINDRISCHE PLUG",
        "type": "Productname",
        "start": 0
      }
    ],
    "predicted": [
      {
        "text": "CILINDRISCHE",
        "type": "Productname",
        "start": 0
      },
      {
        "text": "PLUG",
        "type": "Productname",
        "start": 13
      }
    ]
  }
]

Then the script can be executed as follows:

python nereval.py input.json
F1-score: 0.33

Usage from Python

Alternatively, the evaluation metric can be directly invoked from within python. Example:

import nereval
from nereval import Entity

# Ground-truth:
# CILINDRISCHE PLUG
# B_PROD       I_PROD
y_true = [
    Entity('CILINDRISCHE PLUG', 'Productname', 0)
]

# Prediction:
# CILINDRISCHE PLUG
# B_PROD       B_PROD
y_pred = [
    # correct type, wrong text
    Entity('CILINDRISCHE', 'Productname', 0),
    # correct type, wrong text
    Entity('PLUG', 'Productname', 13)
]

score = nereval.evaluate([y_true], [y_pred])
print('F1-score: %.2f' % score)
F1-score: 0.33

Note on Symmetry

The metric itself is not symmetric due to the inherent problem of word overlaps in NER. So evaluate(y_true, y_pred) != evaluate(y_pred, y_true). This comes apparent if we consider the following example (tagger uses an BIO scheme):

# Example 1:
Input:     CILINDRISCHE PLUG     DIN908  M10X1   Foo
Truth:     B_PROD       I_PROD   B_PROD  B_DIM   O
Predicted: B_PROD       B_PROD   B_PROD  B_PROD  B_PROD

Correct Text: 2
Correct Type: 2

# Example 2 (inversed):
Input:     CILINDRISCHE PLUG     DIN908  M10X1   Foo
Truth:     B_PROD       B_PROD   B_PROD  B_PROD  B_PROD
Predicted: B_PROD       I_PROD   B_PROD  B_DIM   O

Correct Text: 2
Correct Type: 3

Notes and References

Used in a student research project on natural language processing at University of Twente, Netherlands.

References

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

nereval-0.2.3.tar.gz (4.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

nereval-0.2.3-py2.py3-none-any.whl (6.9 kB view details)

Uploaded Python 2Python 3

File details

Details for the file nereval-0.2.3.tar.gz.

File metadata

  • Download URL: nereval-0.2.3.tar.gz
  • Upload date:
  • Size: 4.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for nereval-0.2.3.tar.gz
Algorithm Hash digest
SHA256 ad5f271e62e632eb5de0d0e1b1ce45710f3ce8383a32706f4871fdd6b4527317
MD5 0c9b1fd7629d06afd70abf3b6ce621d9
BLAKE2b-256 0aabc501e46a56d42d6aa387f3312972018047fa700b42a758b6f53aace49d1c

See more details on using hashes here.

File details

Details for the file nereval-0.2.3-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for nereval-0.2.3-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 9b29cea49d623fa6d0454305d31b9ad240c957b4ffaa288fe6f673e508893cd3
MD5 d26b33f69f9be5f0e1cb3d0cd4983db2
BLAKE2b-256 9b5dcfac32b02180b1e623fceb3b34c986528544a8cf6655c37157ca5a109539

See more details on using hashes here.

Supported by

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