Open-source project
snorkel-team/snorkel avatar
snorkel-team/snorkel

Snorkel: programmatic training data labeling with weak supervision

A system for quickly generating training data with weak supervision

6,008 stars858 forksPythonApache-2.0

At a glance

What is it?
Snorkel is a Python library for building training labels from labeling functions instead of hand annotation. It is Apache-2.0, maintained at a low level of activity, and the README states the team's effort now goes to the commercial Snorkel Flow platform.
Who is it for?
Adopt Snorkel if you already have heuristic rules, regexes, or existing model outputs that you can wrap as labeling functions and you want probabilistic training labels without paying for annotation. Do not adopt it if you need an actively developed library, first-class Windows support, or a human review interface, since the README states the team is now focused on Snorkel Flow and Windows testing is described as limited.
Can I use it commercially?
Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 2 days ago.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

What Snorkel replaces, and who it is aimed at

Hand labeling is the default way to produce a training set, and it scales with money and time rather than with code. Snorkel takes the opposite position: the README describes the project's founding bet as the idea that training data, not models or infrastructure, decides whether a machine learning project succeeds, and that the process of creating it can be given mathematical and systems structure. The library is aimed at engineers and researchers who can express domain knowledge as rules. A regular expression that catches invoice numbers, a heuristic that flags short reviews, an existing classifier whose output you half trust: each of these becomes a labeling function, and Snorkel aggregates their votes into probabilistic labels. The audience is therefore narrow in a useful way. If your problem has no writable heuristics, Snorkel has nothing to aggregate. If it has many, and they conflict, that conflict is the input the label model works on.

Labeling functions and the label model

The mechanism is voting under uncertainty. You write labeling functions that each return a label or abstain, which means a labeling function is allowed to cover only part of the dataset. Because the functions are noisy and correlated, their raw majority vote is a poor label. Snorkel's label model instead estimates each function's accuracy and correlation structure from the agreement and disagreement patterns across the whole set, then produces a probabilistic label per data point. The README frames the surrounding work as weak supervision modeling, data augmentation, multi-task learning, data slicing, and structuring. Those are the areas the project's publications cover, and the repository topics list matches them: labeling, data-augmentation, data-slicing, weak-supervision. The practical consequence is that the quality of the output depends on the diversity of the rules, not on their individual correctness. Ten functions that all encode the same heuristic give the model nothing to estimate from.

Installing Snorkel and the Python version constraint

The README states that Snorkel requires Python 3.11 or later and recommends pip: pip install snorkel. A conda route is also documented: conda install snorkel -c conda-forge. The conda section gives a worked example that creates an environment named snorkel-env with python=3.11, activates it, installs PyTorch with conda install pytorch==1.1.0 -c pytorch, then installs snorkel==0.9.0 -c conda-forge. Treat that block with care. It pins an old PyTorch and an old Snorkel version while the same README asks for Python 3.11, and the most recent release listed is v0.10.0 from February 2024, after v0.9.9 in July 2022 and v0.9.8 in November 2021. The example reads as a leftover from an earlier documentation pass rather than a tested recipe. For source installs and contributions the README points to CONTRIBUTING.md rather than repeating the steps. The README also carries a note for Windows users: Docker or the Linux subsystem is recommended, and testing on Windows is described as limited. That is a real deployment constraint, not a formality.

The maintenance signal you have to read before adopting

The announcement at the top of the README is the most important paragraph in the repository. It states that the Snorkel team is now focusing its efforts on Snorkel Flow, described as an end-to-end AI application development platform based on the core ideas behind Snorkel. The same text says the project started at Stanford in 2015 and that the team will be focusing its efforts on Snorkel Flow going forward. Read that as a scope statement rather than a shutdown: the repository is not archived, and the last push is dated 2026-06-08. But the release cadence shown is slow, with v0.10.0 in February 2024 following a gap of roughly eighteen months from v0.9.9. For a library you plan to build a labeling pipeline on, that gap matters more than any feature list. You are adopting a research-derived codebase whose upstream attention has moved to a commercial product. The Apache-2.0 licence means the code remains usable and forkable under its terms, which is the practical mitigation. It does not mean anyone is obliged to fix your bug.

Where Snorkel is the wrong tool

The clearest failure case is a project with no writable heuristics. Snorkel does not label data for you; it reconciles rules you supply. If your task is image segmentation of medical scans and your only knowledge is tacit, you will spend more time inventing weak signals than you would spend annotating a few thousand examples. A second case is small, clean datasets. The label model needs enough coverage and disagreement to estimate accuracies, and a few hundred rows with two overlapping rules gives it very little to work with. A third is anything that needs a human in the loop during labeling. Snorkel is a library, not an annotation interface; there is no review queue, no annotator management, and no inter-annotator agreement tooling in what the README describes. A fourth is a hard Windows requirement, given the stated limited testing. None of these are defects in the design. They are boundaries of the problem the library was built to solve.

How it differs from Label Studio and from fine-tuning

Label Studio takes the opposite starting point: it is an annotation tool, and its value is the interface, task assignment, and export formats for humans producing labels. Snorkel assumes the labels come from code and that the interesting work is estimating how much to trust each source. If your bottleneck is expert time rather than rule-writing, Label Studio addresses the bottleneck and Snorkel does not. The comparison with fine-tuning a pretrained model is different again. Fine-tuning substitutes a learned function for your rules and requires labels to train on, so it usually sits downstream of Snorkel rather than beside it: the README's own framing of the project treats weak supervision as the way to get those labels in the first place. A third reference point is plain majority vote over the same rules. That is the baseline Snorkel's label model is meant to beat, and it costs nothing to compute, so it is worth running both on your data before deciding the extra machinery earns its place.

Licence terms and what to verify before you commit

Snorkel is released under Apache-2.0, the identifier shown in the README badge and in the repository metadata. That is a permissive licence: it allows commercial use and modification, and it includes an explicit patent grant, which matters if you are folding the library into a product. It also carries attribution and notice requirements, and it does not grant trademark rights, so the Snorkel name is not yours to use in branding. This is a description of the licence text, not legal advice; check the terms against your own distribution model. The verification list that follows from the material is short. Confirm your interpreter is Python 3.11 or later. Confirm that the conda example's pinned pytorch==1.1.0 and snorkel==0.9.0 are not what you actually want, since the current release listed is v0.10.0. Confirm your labeling functions produce genuine disagreement before you rely on the label model. And read the announcement paragraph in full, because it tells you where to expect future work to appear.

Editorial conclusion

Adopt Snorkel if you already have heuristic rules, regexes, or existing model outputs that you can wrap as labeling functions and you want probabilistic training labels without paying for annotation. Do not adopt it if you need an actively developed library, first-class Windows support, or a human review interface, since the README states the team is now focused on Snorkel Flow and Windows testing is described as limited. Before committing, verify that your Python version satisfies the stated 3.11 or later requirement, that your rules actually disagree often enough for the label model to estimate accuracies, and that the v0.10.0 release from February 2024 covers the APIs your pipeline needs.

Official sources

  1. License: Apache-2.0
  2. Project website
  3. README
  4. Releases
  5. snorkel-team/snorkel on GitHub
Community notes

Community notes