Вы когда-нибудь пытались вытащить из HTML-страницы чистый текст, не собирая при этом весь мусор, который веб-дизайнеры любят прятать в сотнях вложенных div'ов? Я — да. И каждый раз это превращается в квест: написать регулярок, вспомнить про <script> и <style>, натравить BeautifulSoup… А потом получить кашу из навигации, футеров и рекламы, которая весит больше, чем сама статья.
Сейчас есть много инструментов для очистки HTML — от классического Readability до тяжёлых нейросетей на BERT. Но первые часто ошибаются на нестандартных страницах, а вторые требуют GPU и памяти, которых у вас может не быть. Особенно если вы работаете на грани — парсите тысячи страниц на слабом сервере или в браузере через WebAssembly.
И вот на сцене появляется Pulpie Orange Small — модель, которая решает именно эту проблему. Она крошечная (около 10–20 МБ), но показывает качество, близкое к крупным моделям. За счёт чего? За счёт Pareto-оптимального трейд-оффа между размером и точностью. Разработчики не стали пихать всё подряд, а сосредоточились на том, что действительно нужно: отличать основной контент от мусора.
Спойлер: если вы тащите текст для RAG-пайплайна или для фида новостей — это может быть ваш новый любимый инструмент. Но обо всём по порядку.
Кто ты, Pulpie Orange Small?
Pulpie Orange Small — это encoder-only трансформер, обученный на датасетах веб-страниц с разметкой, какие элементы являются контентом. В отличие от htmLLM-50M, которая пытается понимать HTML+CSS целиком, Pulpie заточена ровно под одну задачу: выделить основное текстовое содержимое и выбросить всё лишнее.
Модель принимает на вход HTML (в виде токенов тэгов и текста) и для каждого элемента (или последовательности токенов) выдаёт бинарную метку: контент или не контент. Затем вы просто собираете все элементы с меткой «контент» в один чистый текст. Вуаля.
Размер модели — всего ~15 МБ (float16). Это значит, что она запускается на CPU с приемлемой скоростью: страница средней сложности (100–200 КБ HTML) обрабатывается за 100–200 мс на современном процессоре. На GPU — практически мгновенно.
Сравнение с классическими подходами
Давайте честно: чем Pulpie лучше старых добрых эвристик? Сравним популярные инструменты.
| Инструмент | Тип | Точность | Скорость | Размер |
|---|---|---|---|---|
| Readability (Mozilla) | Эвристика | ~70% на мусорных страницах | Очень быстро | — |
| trafilatura | Эвристика + ML | ~80% | Быстро | маленький |
| goose3 | Эвристика | ~65% | Средне | — |
| Pulpie Orange Small | Transformer (ML) | ~90%+ | 100-200 мс/страница (CPU) | ~15 МБ |
| BERT-based (например, LayoutLM) | Transformer (большой) | ~95% | Медленно без GPU | >400 МБ |
Как видите, Pulpie бьёт эвристики по точности, но при этом остаётся лёгкой. Да, BERT-модели чуть точнее, но они тяжелее в десятки раз. Если у вас нет GPU или вы обрабатываете поток страниц — вот где Pulpie раскрывается.
Как с этим работать? Код? Живи!
Модель поставляется в формате ONNX или PyTorch. Есть готовый препроцессор, который токенизирует HTML в нужный формат. Никакой возни с регулярками — просто загрузили модель, скормили HTML, получили массив вероятностей, отфильтровали.
Вот как это выглядит на Python (упрощённо):
from pulp import PulpieOrangeSmall
import requests
model = PulpieOrangeSmall.from_pretrained("pulpie/orange-small")
# Берём страницу
html = requests.get("https://example.com/article").text
# Извлекаем контент
result = model.extract(html, threshold=0.5)
print(result.clean_text)
# >> "Заголовок статьи... Текст статьи..."
Метод extract под капотом токенизирует HTML, прогоняет через модель, собирает токены с вероятностью выше порога и возвращает чистый текст. Порог можно регулировать: выше — меньше шума, но возможны пропуски контента, ниже — больше чувствительность.
Важно: модель ожидает HTML, а не разобранный DOM. Поэтому не нужно заранее удалять скрипты и стили — она сама разберётся. Но предварительно можно сжать HTML, удалив комментарии и лишние пробелы, чтобы ускорить обработку.
Где это пригодится в реальной жизни?
Встраивание извлечённого контента в RAG-системы — классика. Вы парсите сайты, получаете чистый текст, отправляете в эмбеддер (например, Microsoft Harrier-OSS или сверхмалые эмбеддинги). Pulpie Orange Small здесь — идеальный первый этап, потому что она не жрёт ресурсы.
Другой сценарий — автоматизация браузера. Мы уже обсуждали, как compact DOM экономит токены. Pulpie может дополнительно очистить DOM от мусора перед тем, как отдать его LLM — ещё меньше токенов, выше точность.
Или, к примеру, вы строите персональный AI-фильтр для новостей. Сначала Pulpie вытаскивает чистый текст, потом модель классифицирует его на важный/мусор. Профит.
Если же вам нужно извлечь структурированные данные (типа название статьи, дата, автор) — SDF Protocol сделает это лучше, но Pulpie сперва обеспечит чистый текст для его препроцессора.
Кому модель не подойдёт?
Не ждите чудес на страницах с тяжёлыми таблицами, сложной вёрсткой на Canvas или если контент спрятан внутри JavaScript после рендера — модель не умеет выполнять JS. Для таких случаев нужно сочетание с TextWeb или другими методами рендеринга.
Также модель не предназначена для извлечения метаданных — она просто говорит: «это текст статьи» или «это мусор». Если нужен автор, дата — дообучайте или используйте парсер.
Итог: стоит ли пробовать?
Pulpie Orange Small — это тот случай, когда «маленький, да удаленький» работает. Если вы устали от костылей с BeautifulSoup и хотите один раз настроить ML-пайплайн, который не требует GPU и даёт 90%+ точности — это ваш выбор. Она отлично вписывается в стек современных веб-парсеров и RAG-систем, особенно когда каждая секунда и каждый мегабайт на счету.
Попробуйте. Возможно, именно она станет тем самым зелёным апельсином, который вы искали.