The dataset card says to keep documents scoring 3 or more. That number is a rounded integer, the rounding is half-to-even, and the score it rounds was produced in bfloat16 on at most 510 tokens of text. Move the cut and watch what that costs.
Interactive front-end over the frozen v1.0 audit dataset: 84,005,795 documents, 94 Common Crawl snapshots, 233 distinct score values · paper: DOI 10.5281/zenodo.21740081 · code & data · NM AI Research, ORCID 0009-0003-4213-7769 · CC BY 4.0
The slider steps through every score that occurs in the sample, and there are only 233 of them, with nothing in between, because the model ran in bfloat16. The shipped filter admits a document when its rounded score reaches 3, which on this grid means a raw score strictly above 2.5. The rounding rule changes the answer at one place only: documents sitting exactly on the cut, which matters at 2.5 and 4.5 and nowhere else.
Hover a bar for the exact grid value.
Rounding half-to-even sends 2.5 down to 2 and 4.5 down to 4. Rounding half-up sends them to 3 and 5. Only the first of those changes what enters the corpus, and the shipped filter uses the rule that cuts. Switch the rule above and this cohort appears and disappears.
The score is produced from at most 510 content tokens, and web documents have been getting longer. The share of documents that were truncated before scoring therefore rises across the crawl series, which means the blind spot is widening on its own, with no change to the filter.
Hover a point for the snapshot.
The rounding result needs none of the downloads and none of this page. Read src/run_edu_bert.py in the classifier repository, then run one line of NumPy against any FineWeb-Edu shard. The button below runs the same identity in your browser against the 233 grid values embedded in this page, weighted by how many documents sit on each.
(np.round(np.clip(df.score, 0, 5)).astype(int) == df.int_score).all() # True (np.floor(np.clip(df.score, 0, 5) + 0.5).astype(int) == df.int_score).all() # False
not run yet
The first line is the rounding NumPy performs and the one the classifier's own inference script uses. The second is the rounding most readers assume. They disagree about two grid points, and one of those two sits on the admission boundary.
What this is. A front-end over the frozen dataset behind What actually admits a document to FineWeb-Edu. Every figure on this page is computed in the browser from two small tables shipped inside the file: the 233-point score grid with document and token counts, and the per-snapshot truncation series. Nothing is fetched at runtime, so the page works offline and cannot drift from the record.
Sample. One random shard from each Common Crawl dump in HuggingFaceFW/fineweb-edu-score-2, seeded and pinned before download. The 16 dumps covering 2024 and 2025 partition documents across shards by score, so a single shard from them is not a random sample; they are excluded from the headline, leaving 94 dumps and 84,005,795 documents spanning 2013 to 2023.
Guardrails. fineweb-edu-score-2 retains int_score >= 2 only, so the grid starts at a raw 1.5 and nothing here speaks to documents below it; the 975,821 documents at exactly 1.5 are a floor, not a full count. Retention percentages on this page are shares of that already-filtered population, not of raw Common Crawl. Truncation is measured on a clustered sample of 188,000 documents, 2,000 per snapshot, so its intervals are floors. The second truncation series holds score constant at exactly 2.0 to remove composition effects, and it includes the score-partitioned 2024 and 2025 dumps, which is defensible only because score is fixed; those snapshots are drawn as hollow points for that reason.
What this does not claim. No downstream model was trained or evaluated here, so nothing on this page says the corpus is worse for any of it. The finding is that a filter described in one line makes three decisions the line does not mention, and the largest of them admits most of what the corpus contains.
Disclosure. No third party reviewed, funded or directed this work. The analysis was carried out with the assistance of Claude, a model made by Anthropic, which competes with the organisations that produce and publish these corpora.
Reproducibility. The embedded tables are regenerated from full_scores.parquet and the analysis outputs by build_tool.py. The full pipeline, the pinned shard manifest and the write-up are in the Zenodo record and the GitHub repository. Change the data, run the build, the page moves. · More from NM AI Research