Игорь Градов
Игорь Градов
6 мин
ai

Обработка данных нейросети: как собрать чистый датасет из 15 трлн токенов веба

Сборка чистого датасета начинается с фильтрации, и большинство разработчиков спотыкаются именно здесь: не на архитектуре модели, а на мусоре в обучающих данных (training data), которые эту модель кормят.

Обработка данных нейросети: как собрать чистый датасет из 15 трлн токенов веба

Ниже разберём, как на практике отфильтровать веб-контент, убрать дубликаты и подготовить корпус текстов для дообучения (fine-tuning, обучение модели на ваших примерах под узкую задачу), взяв за основу открытый датасет FineWeb и реальный код на Python.

Почему это важно

Качество обучающих данных определяет потолок любой нейросети: если подать модели спам, дубли и шаблонные страницы, она выучит именно их. Обработка данных для нейросети на этапе фильтрации экономит недели дообучения и тысячи рублей на вычислениях.

FineWeb от HuggingFace содержит 15 триллионов токенов (токен, минимальная единица текста для модели, примерно три четверти слова) веб-текстов на английском. Корпус уже прошёл фильтрацию, но его пайплайн (цепочка обработки) полностью открыт. Это значит, что каждый шаг можно воспроизвести на своих данных, в том числе русскоязычных. Именно это мы и сделаем: возьмём код из практического руководства MarkTechPost и разберём, что каждый фильтр ловит и почему он нужен при обработке данных для нейросети.

Что понадобится

  • Python 3.9+ и менеджер пакетов pip
  • Библиотеки: datasets (стриминг данных с HuggingFace), datasketch (поиск дубликатов), tiktoken (токенизатор GPT-2), pandas, matplotlib
  • Доступ в интернет для стриминга датасета (скачивать весь корпус не нужно)
  • Примерно 30 минут на прохождение всех шагов
  • Базовое знание Python на уровне «могу запустить скрипт в Jupyter-ноутбуке»

Пошаговая инструкция

1. Установите зависимости и настройте окружение

Одной командой ставим всё необходимое:

import subprocess, sys
def pip(*pkgs):
    subprocess.run([sys.executable, "-m", "pip", "install", "-q", *pkgs], check=True)
pip("datasets>=2.19", "datasketch", "tiktoken", "pandas", "matplotlib", "tqdm")

Скрипт также фиксирует случайное зерно (random.seed(0)), чтобы результаты воспроизводились от запуска к запуску.

2. Загрузите выборку через стриминг, без скачивания всего корпуса

FineWeb весит несколько терабайт, но библиотека datasets умеет стримить данные порциями. Берём 3 000 документов из среза sample-10BT:

from datasets import load_dataset

stream = load_dataset(
    "HuggingFaceFW/fineweb",
    name="sample-10BT",
    split="train",
    streaming=True,
)

docs = []
for i, doc in enumerate(stream):
    docs.append(doc)
    if i + 1 >= 3000:
        break

На выходе получаем таблицу с полями: url, language, language_score, token_count и сам text.

3. Примените фильтры качества текста

Здесь начинается обработка данных для нейросети. Пайплайн FineWeb использует три уровня фильтрации. Разберём каждый.

Фильтр Gopher проверяет базовую статистику текста:

  • Длина документа: от 50 до 100 000 слов
  • Средняя длина слова: от 3 до 10 символов (отсеивает строки из кодов и однобуквенный мусор)
  • Доля символов «#» и «...» не выше 10% от числа слов
  • Минимум 2 стоп-слова (the, be, to, of, and, that, have, with) в тексте

Фильтр C4 ловит шаблонный контент:

  • Блокирует тексты с «lorem ipsum» и «javascript is disabled»
  • Отсеивает страницы с избытком фигурных скобок (признак сырого JSON или кода)

Пользовательский фильтр FineWeb борется с дублями внутри документа:

  • Если больше 30% строк повторяются, документ отбраковывается
  • Если больше 67% строк короче 30 символов (при 5+ строках), текст считается «списочным» и тоже уходит
results = []
for d in docs:
    t = d["text"]
    g_ok, g_r = gopher_quality(t)
    c_ok, c_r = c4_quality(t)
    f_ok, f_r = fineweb_custom(t)
    reason = "kept" if (g_ok and c_ok and f_ok) else (
        g_r if not g_ok else c_r if not c_ok else f_r)
    results.append(reason)

Поскольку FineWeb уже прошёл очистку, большинство документов проходят фильтры. Но на сырых данных русскоязычного интернета эти правила отсеивают от 30% до 70% страниц.

4. Найдите и удалите почти-дубликаты через MinHash

Два текста могут отличаться парой слов, но по сути быть копией. MinHash LSH (Locality Sensitive Hashing, метод быстрого приблизительного сравнения текстов) решает эту задачу без попарного сравнения всех документов:

from datasketch import MinHash, MinHashLSH

lsh = MinHashLSH(threshold=0.7, num_perm=128)
for idx, d in enumerate(docs):
    m = MinHash(num_perm=128)
    for s in shingles(d["text"]):
        m.update(s.encode("utf8"))
    lsh.insert(str(idx), m)

Порог 0.7 по коэффициенту Жаккара означает: если 70% «шинглов» (пятисловных фрагментов) совпадают, документы считаются дубликатами. На выборке из предочищенного FineWeb дубликатов почти нет, но на сырых парсингах Рунета этот шаг обычно убирает ещё 5% до 15% текстов.

5. Проверьте токенизацию

Финальный шаг: убедитесь, что подсчёт токенов в датасете совпадает с реальной токенизацией. Библиотека tiktoken с токенизатором GPT-2 позволяет это проверить за секунды на всей выборке.

Что ввели и что получили

На вход подали 3 000 документов из FineWeb sample-10BT через стриминг. После прогона трёх фильтров качества (Gopher, C4, пользовательский) подавляющее большинство документов прошло проверку, поскольку датасет уже очищен. MinHash-дедупликация не нашла почти-дубликатов в этом срезе. Результат: рабочий пайплайн фильтрации, который можно перенести на любой корпус, включая русскоязычный, заменив английские стоп-слова на русские («и», «в», «на», «что», «не», «с», «по», «это») и скорректировав порог средней длины слова (для русского языка норма от 4 до 12 символов из-за падежных окончаний).

Частые ошибки

Английские стоп-слова на русских данных. Фильтр Gopher из примера проверяет the, be, to, of. Если запустить его на русском тексте без адаптации, он отбракует всё. Замените набор стоп-слов.

Порог средней длины слова. В русском языке слова длиннее английских. Диапазон от 3 до 10 символов подходит для английского; для русского сдвиньте нижнюю границу до 4, верхнюю до 12.

Пропуск дедупликации. Новички часто считают, что достаточно фильтров качества. Но два одинаковых «чистых» текста в обучающей выборке заставляют модель запоминать конкретные фразы вместо обобщения.

Слишком маленькая выборка для MinHash. На 100 документах MinHash не покажет реальную картину дублей. Для оценки нужно от 5 000 до 10 000 текстов.

Что делать с этим прямо сейчас?

Автору Дзена. Если вы собираете корпус своих статей для дообучения, прогоните их через фильтр дублированных строк. Часто в длинных подборках и FAQ одни и те же формулировки повторяются десятками раз, и модель выучит именно их.

Маркетологу. Перед заказом дообучения у подрядчика спросите, какие фильтры качества применяются к данным. Если ответ «никакие», это красный флаг: мусор на входе гарантирует галлюцинации (когда ИИ уверенно выдумывает то, чего не было) на выходе.

Предпринимателю в РФ. Код из руководства работает с открытыми библиотеками и не требует зарубежных API. Датасет FineWeb стримится через HuggingFace без VPN. Для русскоязычных корпусов можно использовать аналогичный подход, адаптировав стоп-слова и пороги длины.

Мнение редакции dzen.guru

Фильтрация веб-данных выглядит скучно по сравнению с настройкой промптов (промпт, текстовая команда для модели) или выбором архитектуры. Но по моему опыту, именно на этом этапе закладывается 70% качества итоговой модели. Код из руководства MarkTechPost хорош как стартовая точка, однако для русского языка придётся адаптировать каждый фильтр вручную: стоп-слова, пороги длины, паттерны спама. Готового открытого FineWeb для русского пока не существует, и это одновременно проблема и возможность для тех, кто готов собрать свой корпус.

Научитесь работать с нейросетями на практике

На dzen.guru разбираем инструменты ИИ для авторов и маркетологов, от промптов до подготовки данных

Перейти на dzen.guru

Фильтрация и дедупликация занимают несколько часов работы, но экономят недели переобучения и тысячи рублей на GPU. Начните с малого: прогоните свой контент через три фильтра из этого руководства, посмотрите, сколько процентов текстов не пройдёт проверку, и вы поймёте реальное качество своих данных лучше любого бенчмарка.

По материалам MarkTechPost

Поделиться:TelegramVK
Игорь Градов
Игорь Градов

Основатель dzen.guru. Эксперт по монетизации и продвижению на Дзен. Автор курса «Старт на Дзен 2026».

Комментарии

Читайте также

ai

Китай мог получить доступ к закрытой Mythos: ИИ в кибербезопасности, примеры реальных утечек

Издание Semafor сообщило, что решение Белого дома ввести экспортные ограничения на модель Mythos от Anthropic было частично вызвано подозрениями в том, что к…

5 мин
Нейросеть для создания видео за $0,005 в секунду: Avataar AI генерирует в 20 раз дешевле конкурентов
ai

Нейросеть для создания видео за $0,005 в секунду: Avataar AI генерирует в 20 раз дешевле конкурентов

Индийский стартап Avataar AI выпустил нейросеть для создания видео Varya, которая генерирует ролики в 10 раз быстрее базовой модели и стоит 0,5 цента за…

6 мин
Claude Code: 25 функций агента, пошаговая настройка и примеры для GitLab
ai

Claude Code: 25 функций агента, пошаговая настройка и примеры для GitLab

Claude Code из терминального помощника вырос в агентную систему с 25 задокументированными возможностями, и если вы подключите её к привычному стеку (GitLab,…

6 мин