Token Classification
Transformers
Safetensors
English
eurobert
html
content-extraction
web-scraping
boilerplate-removal
encoder
rag
custom_code
Instructions to use feyninc/pulpie-orange-base with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use feyninc/pulpie-orange-base with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("token-classification", model="feyninc/pulpie-orange-base", trust_remote_code=True)# Load model directly from transformers import AutoTokenizer, AutoModelForTokenClassification tokenizer = AutoTokenizer.from_pretrained("feyninc/pulpie-orange-base", trust_remote_code=True) model = AutoModelForTokenClassification.from_pretrained("feyninc/pulpie-orange-base", trust_remote_code=True, device_map="auto") - Notebooks
- Google Colab
- Kaggle
| license: apache-2.0 | |
| library_name: transformers | |
| pipeline_tag: token-classification | |
| tags: | |
| - html | |
| - content-extraction | |
| - web-scraping | |
| - boilerplate-removal | |
| - encoder | |
| - eurobert | |
| - rag | |
| base_model: EuroBERT/EuroBERT-610m | |
| language: | |
| - en | |
| metrics: | |
| - rouge | |
| <p align="center"> | |
| <img src="https://huggingface.co/feyninc/pulpie-orange-base/resolve/main/pulpie-orange.png" alt="Pulpie Orange" width="360"> | |
| </p> | |
| <h1 align="center">Pulpie Orange Base</h1> | |
| <p align="center"> | |
| <b>Pareto-optimal main-content extraction from HTML.</b><br> | |
| 610M-parameter encoder · 0.863 ROUGE-5 F1 on WebMainBench · the balanced Pulpie model. | |
| </p> | |
| <p align="center"> | |
| <a href="https://github.com/feyninc/pulpie">GitHub</a> · | |
| <a href="https://usefeyn.com/blog/pulpie-pareto-optimal-models-for-cleaning-the-web/">Blog</a> · | |
| <a href="https://pypi.org/project/pulpie/">PyPI</a> | |
| </p> | |
| --- | |
| **Pulpie Orange Base** extracts the main content from raw HTML, stripping navigation, ads, sidebars, and footers. It is an encoder that labels every HTML block as content or boilerplate in a single forward pass, so it approaches state-of-the-art extraction quality while running far faster and cheaper than autoregressive extractors. | |
| At 610M parameters it sits between [Orange Small](https://huggingface.co/feyninc/pulpie-orange-small) and [Orange Large](https://huggingface.co/feyninc/pulpie-orange-large), scoring 0.863 ROUGE-5 F1. For most use cases Orange Small offers a better speed/quality trade-off; choose Base when you want a little more headroom than Small without the cost of the 2.1B teacher. | |
| ## Usage | |
| The easiest way to use this model is through the [`pulpie`](https://pypi.org/project/pulpie/) package: | |
| ```bash | |
| pip install pulpie | |
| ``` | |
| ```python | |
| from pulpie import Extractor | |
| extractor = Extractor(model="orange-base") | |
| result = extractor.extract(html) | |
| print(result.markdown) # clean Markdown | |
| print(result.html) # clean HTML | |
| print(result.n_main, result.n_other) # blocks kept vs dropped | |
| ``` | |
| `Extractor` auto-detects CUDA, Apple MPS, then CPU. See the [GitHub README](https://github.com/feyninc/pulpie) for batch and multi-GPU usage. | |
| ## How it works | |
| Pulpie runs a four-stage pipeline: | |
| 1. **Simplify** — remove scripts, styles, and formatting noise; tag each block with a unique ID. | |
| 2. **Chunk** — pack blocks into sequences of up to 8,192 tokens separated by `<|sep|>` markers (~80% of pages fit in one chunk). | |
| 3. **Classify** — a single encoder forward pass labels every block (at its `<|sep|>` position) as content or boilerplate. | |
| 4. **Reconstruct** — return the kept blocks as HTML, or convert to Markdown. | |
| This model is a token-classification head over [EuroBERT-610m](https://huggingface.co/EuroBERT/EuroBERT-610m), distilled from the 2.1B [Pulpie Orange Large](https://huggingface.co/feyninc/pulpie-orange-large) teacher (KL-divergence 0.7 + hard-label cross-entropy 0.3, temperature 2.0). | |
| ## Benchmarks | |
| WebMainBench, English subset (6,647 pages), ROUGE-5 F1: | |
| | Model | Params | ROUGE-5 F1 | Throughput (L4) | | |
| |-------|--------|------------|-----------------| | |
| | [Pulpie Orange Large](https://huggingface.co/feyninc/pulpie-orange-large) | 2.1B | 0.873 | 1.3 pages/sec | | |
| | Dripper | 0.6B | 0.864 | 0.68 pages/sec | | |
| | **Pulpie Orange Base (this model)** | **610M** | **0.863** | **3.9 pages/sec** | | |
| | [Pulpie Orange Small](https://huggingface.co/feyninc/pulpie-orange-small) | 210M | 0.862 | 13.7 pages/sec | | |
| | magic-html | - | 0.700 | - | | |
| | Trafilatura | - | 0.619 | - | | |
| Full analysis in the [blog post](https://usefeyn.com/blog/pulpie-pareto-optimal-models-for-cleaning-the-web/). | |
| ## Model family | |
| | Model | Params | ROUGE-5 F1 | Use case | | |
| |-------|--------|------------|----------| | |
| | [pulpie-orange-small](https://huggingface.co/feyninc/pulpie-orange-small) | 210M | 0.862 | **Recommended** — best value, fastest | | |
| | [pulpie-orange-base](https://huggingface.co/feyninc/pulpie-orange-base) | 610M | 0.863 | Balanced | | |
| | [pulpie-orange-large](https://huggingface.co/feyninc/pulpie-orange-large) | 2.1B | 0.873 | Highest quality (teacher) | | |
| ## Acknowledgements | |
| Pulpie builds directly on the work of the MinerU-HTML and Dripper team (Ma et al., 2025). Their `simplify_html` preprocessing, block-level annotation scheme, and the WebMainBench benchmark are foundational to this work. Built on [EuroBERT](https://huggingface.co/EuroBERT) (Boizard et al., 2025). | |
| ## Citation | |
| ```bibtex | |
| @note{pulpie2026, | |
| title = {Pulpie: Pareto-Optimal Models for Cleaning the Web}, | |
| author = {Minhas, Bhavnick and Nigam, Shreyash and Feyn Research}, | |
| year = {2026}, | |
| venue = {Feyn Field Notes} | |
| } | |
| ``` | |
| Built by [Feyn](https://usefeyn.com). Model weights and the [pulpie](https://pypi.org/project/pulpie/) library are licensed under Apache 2.0. | |