Convert Figma logo to code with AI

sebastianruder logoNLP-progress

Repository to track the progress in Natural Language Processing (NLP), including the datasets and the current state-of-the-art for the most common NLP tasks.

22,742
3,622
22,742
38

Top Related Projects

🤗 Transformers: State-of-the-art Machine Learning for Pytorch, TensorFlow, and JAX.

30,447

💫 Industrial-strength Natural Language Processing (NLP) in Python

30,331

Facebook AI Research Sequence-to-Sequence Toolkit written in Python.

11,750

An open-source NLP research library, built on PyTorch.

13,877

A very simple framework for state-of-the-art Natural Language Processing (NLP)

Quick Overview

NLP-progress is a GitHub repository that tracks the progress in Natural Language Processing (NLP), including state-of-the-art (SOTA) results for various NLP tasks. It serves as a comprehensive resource for researchers and practitioners to stay updated on the latest advancements in the field.

Pros

  • Provides a centralized location for tracking SOTA results across numerous NLP tasks
  • Regularly updated with contributions from the community
  • Includes links to papers, code implementations, and datasets for each task
  • Offers a standardized format for presenting results, making comparisons easier

Cons

  • May not always reflect the absolute latest results due to the fast-paced nature of NLP research
  • Relies on community contributions, which can lead to inconsistencies in coverage across different tasks
  • Does not provide in-depth analysis or comparisons of different approaches
  • Some tasks or subtasks may be underrepresented or missing

Note: As this is not a code library, the code example and quick start sections have been omitted.

Competitor Comparisons

🤗 Transformers: State-of-the-art Machine Learning for Pytorch, TensorFlow, and JAX.

Pros of transformers

  • Provides ready-to-use implementations of state-of-the-art NLP models
  • Offers a unified API for various NLP tasks and model architectures
  • Includes extensive documentation and examples for easy integration

Cons of transformers

  • Focuses primarily on transformer-based models, limiting coverage of other architectures
  • May have a steeper learning curve for beginners due to its comprehensive nature
  • Requires more computational resources to run and experiment with models

Code comparison

NLP-progress typically provides dataset information and benchmark results:

dataset = load_dataset("squad")
results = evaluate_model(model, dataset)
print(f"F1 Score: {results['f1']}")

transformers offers direct model implementation and usage:

from transformers import AutoModelForQuestionAnswering, AutoTokenizer

model = AutoModelForQuestionAnswering.from_pretrained("bert-base-uncased")
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
inputs = tokenizer("What is NLP?", "NLP stands for Natural Language Processing.", return_tensors="pt")
outputs = model(**inputs)
30,447

💫 Industrial-strength Natural Language Processing (NLP) in Python

Pros of spaCy

  • Ready-to-use library with pre-trained models for various NLP tasks
  • Efficient and optimized for production environments
  • Extensive documentation and community support

Cons of spaCy

  • Limited to specific NLP tasks and languages
  • Less flexibility for customization compared to a comprehensive progress tracker
  • Requires installation and setup for use

Code Comparison

spaCy:

import spacy

nlp = spacy.load("en_core_web_sm")
doc = nlp("Apple is looking at buying U.K. startup for $1 billion")
for ent in doc.ents:
    print(ent.text, ent.label_)

NLP-progress:

### Named Entity Recognition

| Model           | F1  | Dataset |
|-----------------|-----|---------|
| Flair embeddings | 93.09 | CoNLL-2003 |
| BERT-Large | 92.8 | CoNLL-2003 |

Summary

spaCy is a practical NLP library for immediate implementation, while NLP-progress serves as a comprehensive tracker of state-of-the-art models across various NLP tasks. spaCy offers ready-to-use functionality but may be limited in scope, whereas NLP-progress provides a broader overview of advancements in the field without direct implementation.

30,331

Facebook AI Research Sequence-to-Sequence Toolkit written in Python.

Pros of fairseq

  • Provides a complete toolkit for training custom models
  • Offers pre-trained models and scripts for easy implementation
  • Actively maintained by Facebook AI Research team

Cons of fairseq

  • Steeper learning curve for beginners
  • Focused primarily on sequence modeling tasks
  • Requires more computational resources for training

Code comparison

NLP-progress:

# Machine Translation

## English-French

| Model | BLEU | Paper / Source | Code |
| --- | --- | --- | --- |
| Transformer Big + BT | 45.6 | [Edunov et al. (2018)](https://arxiv.org/abs/1808.09381) | [fairseq](https://github.com/pytorch/fairseq) |

fairseq:

from fairseq.models.transformer import TransformerModel
en2de = TransformerModel.from_pretrained(
    '/path/to/checkpoints',
    checkpoint_file='checkpoint_best.pt',
    data_name_or_path='data-bin/wmt16_en_de_bpe32k'
)
en2de.translate('Hello world!')

NLP-progress serves as a comprehensive repository tracking the progress in Natural Language Processing, providing a curated list of state-of-the-art results for various NLP tasks. It's an excellent resource for researchers and practitioners to stay updated on the latest advancements.

fairseq, on the other hand, is a powerful sequence modeling toolkit that allows users to train custom models and utilize pre-trained ones. It's more hands-on and practical for those looking to implement and experiment with different NLP models.

11,750

An open-source NLP research library, built on PyTorch.

Pros of AllenNLP

  • Comprehensive NLP toolkit with ready-to-use models and components
  • Extensive documentation and tutorials for easy adoption
  • Active development and regular updates from the Allen Institute for AI

Cons of AllenNLP

  • Focused on implementation rather than tracking state-of-the-art progress
  • Steeper learning curve for beginners due to its comprehensive nature
  • Limited to PyTorch as the underlying framework

Code Comparison

AllenNLP example:

from allennlp.predictors.predictor import Predictor
predictor = Predictor.from_path("https://storage.googleapis.com/allennlp-public-models/bert-base-srl-2020.03.24.tar.gz")
predictor.predict(
  sentence="Did Uriah honestly think he could beat the game in under three hours?"
)

NLP-progress doesn't provide code examples as it's primarily a curated list of state-of-the-art results and papers for various NLP tasks.

Summary

AllenNLP is a powerful toolkit for implementing NLP models, while NLP-progress serves as a comprehensive resource for tracking advancements in the field. AllenNLP offers practical tools and implementations, whereas NLP-progress provides a broader overview of the latest research and benchmarks across various NLP tasks.

13,877

A very simple framework for state-of-the-art Natural Language Processing (NLP)

Pros of flair

  • Provides a complete NLP framework with pre-trained models
  • Offers easy-to-use APIs for various NLP tasks
  • Includes built-in support for multiple languages

Cons of flair

  • Limited to specific NLP tasks and models
  • May not cover as wide a range of NLP topics as NLP-progress
  • Requires more setup and dependencies for use

Code Comparison

NLP-progress is primarily a documentation repository, so it doesn't contain executable code. However, flair provides practical code examples:

from flair.data import Sentence
from flair.models import SequenceTagger

# Load tagger and create sentence
tagger = SequenceTagger.load('ner')
sentence = Sentence('George Washington went to Washington.')

# Predict NER tags
tagger.predict(sentence)

# Print predicted NER tags
print(sentence.to_tagged_string())

Summary

While NLP-progress serves as a comprehensive resource for tracking advancements in NLP tasks, flair offers a practical framework for implementing NLP solutions. NLP-progress is ideal for researchers and those seeking an overview of the field, while flair is better suited for developers looking to integrate NLP capabilities into their projects quickly.

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

Tracking Progress in Natural Language Processing

Table of contents

English

Vietnamese

Hindi

Chinese

For more tasks, datasets and results in Chinese, check out the Chinese NLP website.

French

Russian

Spanish

Portuguese

Korean

Nepali

Bengali

Persian

Turkish

German

Arabic

This document aims to track the progress in Natural Language Processing (NLP) and give an overview of the state-of-the-art (SOTA) across the most common NLP tasks and their corresponding datasets.

It aims to cover both traditional and core NLP tasks such as dependency parsing and part-of-speech tagging as well as more recent ones such as reading comprehension and natural language inference. The main objective is to provide the reader with a quick overview of benchmark datasets and the state-of-the-art for their task of interest, which serves as a stepping stone for further research. To this end, if there is a place where results for a task are already published and regularly maintained, such as a public leaderboard, the reader will be pointed there.

If you want to find this document again in the future, just go to nlpprogress.com or nlpsota.com in your browser.

Contributing

Guidelines

Results   Results reported in published papers are preferred; an exception may be made for influential preprints.

Datasets   Datasets should have been used for evaluation in at least one published paper besides the one that introduced the dataset.

Code   We recommend to add a link to an implementation if available. You can add a Code column (see below) to the table if it does not exist. In the Code column, indicate an official implementation with Official. If an unofficial implementation is available, use Link (see below). If no implementation is available, you can leave the cell empty.

Adding a new result

If you would like to add a new result, you can just click on the small edit button in the top-right corner of the file for the respective task (see below).

Click on the edit button to add a file

This allows you to edit the file in Markdown. Simply add a row to the corresponding table in the same format. Make sure that the table stays sorted (with the best result on top). After you've made your change, make sure that the table still looks ok by clicking on the "Preview changes" tab at the top of the page. If everything looks good, go to the bottom of the page, where you see the below form.

Fill out the file change information

Add a name for your proposed change, an optional description, indicate that you would like to "Create a new branch for this commit and start a pull request", and click on "Propose file change".

Adding a new dataset or task

For adding a new dataset or task, you can also follow the steps above. Alternatively, you can fork the repository. In both cases, follow the steps below:

  1. If your task is completely new, create a new file and link to it in the table of contents above.
  2. If not, add your task or dataset to the respective section of the corresponding file (in alphabetical order).
  3. Briefly describe the dataset/task and include relevant references.
  4. Describe the evaluation setting and evaluation metric.
  5. Show how an annotated example of the dataset/task looks like.
  6. Add a download link if available.
  7. Copy the below table and fill in at least two results (including the state-of-the-art) for your dataset/task (change Score to the metric of your dataset). If your dataset/task has multiple metrics, add them to the right of Score.
  8. Submit your change as a pull request.
ModelScorePaper / SourceCode

Wish list

These are tasks and datasets that are still missing:

  • Bilingual dictionary induction
  • Discourse parsing
  • Keyphrase extraction
  • Knowledge base population (KBP)
  • More dialogue tasks
  • Semi-supervised learning
  • Frame-semantic parsing (FrameNet full-sentence analysis)

Exporting into a structured format

You can extract all the data into a structured, machine-readable JSON format with parsed tasks, descriptions and SOTA tables.

The instructions are in structured/README.md.

Instructions for building the site locally

Instructions for building the website locally using Jekyll can be found here.