Что делает представленный код и зачем он нужен?
Код – это типичный «первый‑выстрел» при исследовании большого корпуса текстов, полученного из веб‑краулов. Он позволяет:
- извлечь доменное имя из URL;
- подсчитать частотность доменов;
- визуализировать токен‑жёсткость, языковую уверенность и сжатие;
- получить быстрый «сводный» отчёт по документам.
Если вы когда‑нибудь сталкивались с тем, что в датасете миллионы строк URLs, а дальше – только хаос, то такие «чистильщики» становятся спасением.
Подготовка данных: быстрый и надёжный способ
Для начала убедитесь, что у вас установлены нужные библиотеки:
- pandas – работа с таблицами (docs);
- urllib.parse – разбор URL (python docs);
- matplotlib – построение графиков (docs);
- fasttext (опционально) – оценка языковой чистоты (GitHub);
- datatrove – готовый пайплайн для FineWeb (GitHub).
Шаг 1: Выделение домена
Код берёт столбец url, проверяет, что значение – строка, и с помощью urlparse получает netloc. Префикс www. отбрасывается, а если в ячейке не строка – ставится “?”.
Это гарантирует, что даже «мусорные» записи не сломают дальнейший анализ.
Шаг 2: Топ‑15 доменов
Метод value_counts() мгновенно подсчитывает, какие хосты наиболее часто встречаются. Вывод в виде горизонтального бар‑чарта (см. ниже) сразу даёт представление о «тяжелых» источниках данных.
Шаг 3: Диагностические гистограммы
Четыре графика позволяют быстро оценить, насколько ваш набор подходит для обучения языковой модели:
- Token count per document – распределение длины документов (ограничиваем до 4000 токенов, чтобы убрать выбросы);
- fastText English language score – проверка, что тексты действительно на английском (порог 0.65, как в FineWeb);
- Characters per token – «компрессия» токенов, полезно при планировании storage;
- Top domains – уже обсуждалась выше, но на графике легче увидеть «узкие места».
Шаг 4: Сводка статистики
Текстовый блок print("SUMMARY") выводит ключевые цифры:
- Общее количество документов;
- Суммарное число токенов (экономия/затраты GPU);
- Медиана токенов на документ (помощь в выборе
max_length); - Уникальное число доменов (разнообразие источников);
- Средний language_score (общая «англоязычность»);
- Количество почти‑дублирующих пар (можно отфильтровать);
- Сколько документов отклонено фильтрами.
Эти цифры позволяют принимать решения без «бесконечных» экспериментов.
Шаг 5: Что делать дальше?
В конце кода уже перечислены рекомендации. Кратко:
- Замените тестовый набор
sample-10BTна реальный краул (например,CC-MAIN-2024-10с Common Crawl); - Увеличьте
N_DOCS– более крупная выборка даст надёжные оценки; - Запустите полный пайплайн datatrove, чтобы воспроизвести процесс FineWeb от начала до конца.
Практические подсказки
- Не бойтесь отбрасывать «мусор». Даже 5 % «какого‑то» домена могут исказить результаты, если они содержат скрипты, рекламные тексты и т.п.
- Порог language_score. Если ваша задача допускает более низкое качество, можно снизить порог до 0.5, но помните о росте «шумных» документов.
- Оптимизация памяти. При работе с >10 млн строк используйте
df['token_count'].astype('uint32')и аналогично для остальных числовых колонок. - Проверка дубликатов. Функция
datatrove.pipeline.deduplicate(см. GitHub) быстрее, чем вручную сравнивать хэши.
Заключение
Представленный набор команд – это «чек‑лист» для быстрой оценки качества веб‑корпуса. Он поможет вам понять, откуда берутся данные, насколько они чисты и какие дальнейшие шаги нужны для построения надёжной языковой модели. Всё, что требуется – несколько минут в Jupyter, пару библиотек и немного здорового скептицизма.

















