Features

Prodigy is a machine teaching tool so efficient that a single data scientist can create end-to-end prototypes for new funtionality without commissioning external annotations, and with a smooth path to production. Whether you're working on entity recognition, intent detection or image classification, Prodigy can help you train and evaluate your models faster.

Model state REST API Web app Command-line interface Data stream Database Recipe

No cloud, no lock-in

Prodigy puts the model in the loop, so that it can actively participate in the training process and learns as you go. The model uses what it already knows to figure out what to ask you next, and is updated with the answers you provide. There's no complicated configuration system to work with: you just write a Python function, that returns the components as a dictionary.

Stay productive with a modern web application

Prodigy's web app lets you annotate text, entities, classification and images straight from your browser – even on mobile devices. Its modern UI keeps you focused and only asks you for one binary decision at a time. As you click or swipe through the examples, annotations are sent back to Prodigy via a REST API. Prodigy can update your model in real-time and choose the most important questions to ask next.

Screenshot of the Prodigy web application

Load in data from any format

Prodigy supports the most common file formats out-of-the-box. You can also write custom loader scripts to stream in any format. If you can load it in Python, you can use it in Prodigy.

Choice of storage back-ends

You can use your favourite database to keep a copy of all annotations you've collected. Either connect to one of the built-in options, or integrate your own.

Plug in your own models

Custom recipes let you integrate machine learning models using any framework of your choice. Built-in NLP recipes provide seamless spaCy integration.

@prodigy.recipe('custom-recipe')
def custom_recipe(dataset, source):
    stream = JSONL(source)
    model = load_your_model()
    return {
        'dataset': dataset,
        'stream': prefer_uncertain(model(stream)),
        'update': model.update,
        'view_id': 'ner'
    }

Use a built-in annotation recipe or write your own

Prodigy puts the model in the loop, so that it can actively participate in the training process and learns as you go. The model uses what it already knows to figure out what to ask you next, and is updated with the answers you provide. There's no complicated configuration system to work with: you just write a Python function, that returns the components as a dictionary. Prodigy comes with a variety of built-in recipes that can be chained together to build complex systems.

Annotation interfaces

Choose from a variety of user interfaces to present your annotation tasks. Create custom HTML views for even more flexibility. To see Prodigy's interfaces in action, check out the live demo.

MacBook
Annotate plain text
First look at the new MacBook Pro product
Annotate and correct named entities
First adj look noun at adp the det new adj MacBook propn Pro propn
Annotate and correct part-of-speech tags
First look pobjat the new MacBook
Annotate syntactic dependencies and semantic relations
Technology
First look at the new MacBook Pro
Annotate labelled text or images
 laptop 
Annotate images, bounding boxes and image segments
Select one or more answers or pick the odd one out
Technology
Technologie
Technik
Compare two annotations
Is it time to swap your Mac for a Windows computerlaptop?
Compare texts with a visual diff
#Quarter 1Quarter 2
113,432.0012,401.00
25011.001290.00
320.5099.00
Annotate any HTML content
Embed dynamic content
scikit