
Попробуйте открыть скан советской газеты и прочитать одну статью от начала до конца. Человек быстро замечает крупный заголовок, продолжение в соседней колонке и подпись под фотографией. Для алгоритма перед ним — это выцветшая страница с десятками тесно расположенных прямоугольников, нестандартными шрифтами и неоднозначным порядком чтения.
Даже если OCR правильно распознаёт почти все слова, на выходе ещё не получится документ. Нужно понять, какие фрагменты относятся к одной статье, где её начало, в каком порядке соединить блоки и что не следует включать в основной текст.
Мы разработали PereStruct — модульный пайплайн для разбора исторических газет. Он объединяет детектор вёрстки на базе YOLO, Yandex Vision OCR, коррекцию ошибок с помощью моделей Yandex AI Studio и отдельную модель семантической сборки статей. Вместе с кодом мы публикуем размеченный датасет и бенчмарк, чтобы другие команды могли изучать подход и ставить эксперименты на исторических документах.
Меня зовут Максим Шандыбо, я один из участников студкепмпа Яндекс Образования, также занимаюсь похожими задачами парсинга научных публикаций в Институте общей и неорганической химии имени Н. С. Курнакова РАН. В статье вместе с Даниилом Ефимовым @Tesla_istra расскажем про PereStruct: зачем разбили задачу на отдельные этапы, как превратили восстановление газетной статьи в классификацию пар блоков и что показало ограниченное сравнение модульного пайплайна с двумя большими мультимодальными VLM.
Почему одного OCR недостаточно
OCR отвечает на вопрос, какие символы напечатаны на странице, но не восстанавливает то, как устроен документ. Даже если все слова распознаны правильно, ещё нужно определить, какие фрагменты относятся к одной статье и в каком порядке их читать.
На исторических газетах эта задача особенно сложна. Правила вёрстки меняются между изданиями и десятилетиями, а иногда даже между страницами одного выпуска. Заголовок может занимать несколько колонок, продолжение статьи — находиться в другой части полосы, а между связанными фрагментами могут располагаться фотография, объявление или другой материал.
К сложной вёрстке добавляется физическое состояние источника:
бумага выцветает и покрывается пятнами;
текст с обратной стороны просвечивает;
страницы сканируются с перекосом;
края повреждены или обрезаны;
шрифтовые гарнитуры и правила набора отличаются от современных.
Поэтому архивная оцифровка — это не одна задача, а цепочка связанных задач:
Найти на странице заголовки, основной текст, изображения и подписи.
Распознать текст внутри нужных областей.
Устранить очевидные артефакты OCR, не переписав исторический источник современным языком.
Определить, какие разрозненные блоки образуют одну статью.
Восстановить порядок чтения.
С похожей цепочкой задач работает «Электронекрасовка» — электронная библиотека и культурно‑просветительское медиа Центральной универсальной научной библиотеки имени Н. А. Некрасова. Проект развивается с 2017 года, а его основа — это системная оцифровка библиотечных фондов. Издания нужно не только отсканировать, но и распознать, описать, опубликовать и подготовить к поиску и дальнейшей работе.
С 2024 года технологический партнёр библиотеки — Центр технологий для общества Yandex Cloud — предоставляет команде вычислительные ресурсы по программе поддержки науки и образования и помогает перенести отдельные этапы обработки сканов в облако. В основном библиотечном контуре файлы временно загружаются в Yandex Object Storage, обрабатываются на виртуальных машинах, а текст распознаётся с помощью Yandex Vision OCR. После этого результат возвращается в систему библиотеки и проходит выборочную проверку. Подробнее этот процесс мы разбирали в отдельном материале об «Электронекрасовке».
Однако получение скана и распознанного текста — только базовый уровень оцифровки. По мере роста цифровой коллекции вокруг неё возникают новые исследовательские и инженерные задачи: извлечение сущностей, семантический поиск, восстановление структуры страниц и связей между их элементами. Одна из таких задач — научиться собирать разрозненные блоки газетной полосы обратно в логически цельные статьи.
Отправной точкой для дальнейшего развития проекта стал студкемп Яндекс Образования. На нём участники работали над задачами Библиотеки имени Н. А. Некрасова, связанными с обработкой оцифрованных фондов. После мы с командой продолжили работу. В Институте общей и неорганической химии им. Н. С. Курнакова РАН есть похожая задача — автоматизированный парсинг научных публикаций и извлечение из них структурированных данных. Так была сформулирована отдельная задача PereStruct: восстанавливать логическую структуру газетных страниц и объединять разрозненные блоки в статьи.
Исторические газеты и научные публикации отличаются по содержанию, устройству и сценариям использования, но инженерная логика у этих задач общая. Прежде чем искать и анализировать информацию, необходимо восстановить структуру сложного документа и связи между его элементами.
Для нас PereStruct — пример проекта, в котором ценность возникает не из одного алгоритма или сервиса, а на стыке нескольких компетенций. Библиотека предоставляет сложный и общественно значимый архивный материал и помогает сформулировать предметную задачу. Эксперты превращают этот материал в качественную разметку, исследователи проектируют метод и проверяют гипотезы, а облачные сервисы и вычислительные ресурсы позволяют проводить эксперименты и объединять отдельные этапы в работающий исследовательский конвейер.
Два набора данных вместо одного
Первая значимая часть работы — это детекция вёрстки. Готовый layout detector, который обучался на современных документах, на страницах советских газет столкнулся с выраженным domain shift. Архитектура могла быть подходящей, но распределение данных — размеры страниц, типографика, колонки, расстояния между блоками и качество изображений — заметно отличалось от обучающей выборки.
Поэтому для проекта потребовались данные двух типов.
Первый корпус предназначен непосредственно для детекции вёрстки. Всего команда разметила 1426 страниц советских газет 1934–1969 годов из фондов Библиотеки им. Н. А. Некрасова. Для каждого объекта на странице были заданы нормализованные координаты bounding box и один из четырех классов:
Title;Plain Text;Figure;Figure Caption.

Разметка создавалась совместно с командой Yandex Crowd Solutions и проходила многоэтапный контроль качества. Из‑за ограничений, связанных с правами на исходники изображений, полностью открыть корпус было нельзя. Поэтому в Zenodo опубликованы 599 размеченных страниц общим объемом 3,7 ГБ. Датасет доступен по лицензии CC BY 4.0 и подготовлен в формате YOLO.
Второй набор нужен для более сложной задачи — сборки статей. В нём недостаточно обвести текст прямоугольниками: дополнительно асессоры указывали, какие блоки принадлежат одной статье. Для разработки и проверки использовалось 110 экспертно размеченных страниц, а публичная версия бенчмарка в репозитории содержит 93 страницы.
Для текстовых блоков и заголовков доступны координаты, тип, сырой OCR‑текст, исправленная версия и идентификатор статьи. Часть нетекстовых или исключенных блоков не содержит OCR‑полей и им присвоено значение?. Разметку этого набора проверяли в три этапа. В опубликованном протоколе оценки порядок блоков затем задаётся геометрической эвристикой.
Большой корпус даёт детектору разнообразие верстки, а меньший, но более тщательно проверенный бенчмарк позволяет обучать и оценивать принадлежность блоков статьям.
Как устроен PereStruct
Пайплайн можно представить как четыре последовательных шага.

Шаг 1. Находим блоки на странице
За основу мы взяли YOLOv10 с весами DocLayout‑YOLO, обученными на DocStructBench. Исходная модель хорошо разбирает современные документы, но заметно хуже работает с историческими газетами.
Для доменной адаптации использовали размеченный корпус, который в сумме насчитывал 1426 страниц, и оставили четыре нужных проекту класса. На отложенном наборе из 72 страниц mAP50 вырос с 0,698 у исходного DocLayout‑YOLO до 0,845 после доменного дообучения. Особенно заметным оказался рост на заголовках: с 0,634 до 0,864.
Затем модель дополнительно дообучили на 100 страницах из экспертного набора, а 10 страниц оставили для финального теста. На этом тесте итоговая модель получила mAP50 0,981 и mAP50–95 0,930.
Шаг 2. Распознаем текст только там, где он нужен
После детекции мы вырезаем области заголовков и основного текста и отправляем их в Yandex Vision OCR. Сервис получает отдельные crop‑изображения, поэтому соседние колонки и графические элементы не входят непосредственно в передаваемую область.
Результат OCR сохраняется вместе с координатами блока. Благодаря этому текст не теряет связь с местом на исходной странице, а следующие этапы могут одновременно использовать содержание и геометрию.
Шаг 3. Исправляем OCR‑артефакты, но не редактируем историю
Старые шрифты и качество бумаги приводят к характерным ошибкам: цифра 6 появляется вместо буквы, слово разрывается переносом, кириллические и латинские символы смешиваются.
Для посткоррекции мы использовали собственные модели Яндекса со строгим системным промптом. В нём модели предписывали исправлять только очевидные OCR‑ошибки и переносы, не перефразировать текст, не обновлять лексику и сохранять регистр, пунктуацию и характерные для эпохи конструкции. Если модель сомневается, она должна была оставить исходную форму.
Это принципиальное ограничение: при работе с архивом «сделать текст красивее» означает испортить источник. В этом пайплайне генеративной модели отведена узкая сервисная функция.
В текущей работе мы сосредоточились на двух задачах — детекция вёрстки и объединение статей семантически. Поэтому с точки зрения OCR и LLM‑коррекции, по которым уже много научных разработок, мы просто взяли проверенные решения.
Шаг 4. Собираем блоки в статьи
Самая интересная часть начинается после того, как блоки уже найдены и распознаны.
Если предсказывать полный порядок чтения, это сильно увеличивает сложность работы. Вместо этого мы специально разбили задачу и свели её к бинарной классификации: для каждой пары блоков модель отвечает, относятся ли они к одной статье.
Отдельно обучаются два классификатора:
Plain Text ↔ Plain Text— связывает фрагменты основного текста;Title ↔ Plain TextиTitle ↔ Title— привязывает к статье заголовки и связанные с ними блоки.
Для каждой пары формируется мультимодальный набор признаков.
Текст. Символьные n‑граммы длиной от 2 до 4 кодируются с помощью TF‑IDF со словарем на 15 тысяч признаков. Такое представление выбрали, чтобы снизить чувствительность модели к части посимвольных ошибок OCR.
Геометрия. Двадцать признаков описывают расстояние между блоками, взаимное положение, выравнивание, размеры, отношение площадей и горизонтальные или вертикальные зазоры.
Изображение. Из области, охватывающей оба блока и пространство между ними, извлекается 576-мерный эмбеддинг промежуточного слоя, дообученного YOLO. Такой эмбеддинг добавляет в классификатор локальный визуальный контекст области между блоками.
На этих признаках обучается XGBoost. Для классификатора основного текста мы подготовили 249 548 сбалансированных пар, для классификатора с заголовками — 60 420 пар. Негативные примеры по возможности выбирали среди разных статей одной страницы: они сложнее и ближе к реальной задаче, чем случайные блоки из разных газет.
После классификации страница превращается во взвешенный граф: блоки становятся вершинами, а вероятность принадлежности к одной статье — весом ребра. Иерархическая кластеризация выделяет группы блоков, после чего детерминированная эвристика задаёт порядок чтения слева направо и сверху вниз.
Такой подход удобен инженерно. Каждый этап можно отлаживать отдельно: увидеть пропущенный блок, проверить OCR, исследовать ошибочную пару или изменить порог кластеризации.
Зачем понадобились визуальные признаки
Версия на TF‑IDF и геометрии уже работала, но ошибалась на фрагментах, которые относятся к одной статье и при этом разделены пространственными разрывами, другими колонками или сложными потоками верстки.
На сбалансированных тестовых наборах пар после добавления YOLO‑эмбеддингов F1 классификатора основного текста вырос с 0,743 до 0,850. Для классификатора с заголовками F1 увеличился с 0,882 до 0,904.
Классификатор | Только TF‑IDF и геометрия | С визуальными признаками |
|---|---|---|
Plain Text ↔ Plain Text, F1 | 0,743 | 0,850 |
Title ↔ {Plain Text, Title}, F1 | 0,882 | 0,904 |
Эти метрики соответствуют задаче классификации — и по ним мы можем оценить качество классификатора. Качество итогового парсинга с учётом кластеризации мы проверим дальше.

Почему мы сравнили решение с VLM
Для парсинга исторических газет по сути нет открытых специализированных решений. Есть отдельные работы, посвящённые OCR или решению задачи порядка чтения, но полных пайплайнов — нет.
При этом у большой мультимодальной модели есть привлекательное свойство: ей можно передать изображение страницы и сразу попросить вернуть Markdown. Теоретически один запрос заменяет детектор, OCR и сборщик структуры.
Мы сравнили PereStruct с Qwen3.6–35B‑A3B и Qwen3.6-Plus на 10 страницах, исключённых из обучения YOLO и XGBoost. Для обеих моделей использовался одинаковый промпт с просьбой извлечь статьи, сохранить заголовки и восстановить порядок чтения; режим fast thinking был отключён. Также было указано жёсткое правило для вывода порядка статей: слева направо сверху вниз.
Модель | BLEU | ROUGE-1 | ROUGE-2 | ROUGE-L |
|---|---|---|---|---|
Qwen3.6-35B-A3B | 0.121 | 0.320 | 0.163 | 0.207 |
Qwen3.6-Plus | 0.347 | 0.581 | 0.415 | 0.431 |
PereStruct | 0.965 | 0.985 | 0.973 | 0.946 |
BLEU в этом эксперименте измеряет постраничное совпадение последовательностей слов после удаления Markdown‑разметки и переносов строк. Это не процент правильно распознанных символов и не самостоятельная метрика границ статей, кластеризации или порядка чтения. Кроме того, эталонный текст собран из OCR‑текста после LLM‑коррекции; он независимо выверен человеком.
В этих экспериментах VLM допускали три характерных типа ошибок:
Генерировали правдоподобный, но отсутствующий на странице текст при проблемах распознавания.
Повторяли фразы вместо перехода к следующему блоку.
Объединяли соседние статьи или разбивали одну статью из‑за сложной колоночной структуры.
Если обобщить, ключевая проблема была одна: у моделей есть определённый размер контекстного окна, который неизбежно переполняется в случае таких огромных сканов исторических газет.
Результат не означает, что модульные системы в принципе лучше любых VLM. Сравнение ограничено двумя моделями, одним режимом запуска и тестом из 10 страниц. PereStruct доменно обучен и использует специализированный OCR и отдельную LLM‑коррекцию, что и влияет на итог.
Что можно сделать с опубликованными данными
Открытый YOLO‑корпус подойдёт командам, которые работают с layout analysis и хотят:
дообучить детектор на исторических документах;
проверить перенос модели между современными и архивными страницами;
сравнить разные архитектуры детекции;
исследовать устойчивость к шуму, перекосу и сложной многоколоночной верстке;
использовать реальные данные для учебных проектов по computer vision.
PereStruct Benchmark дополняет изображения логической разметкой. На нём можно:
обучать модели по восстановлению порядка чтения;
тестировать кластеризацию фрагментов документа;
экспериментировать с совместным использованием текста, координат и изображения;
исследовать текстовые признаки на доступном OCR‑тексте;
тестировать end‑to‑end document parsing.
В репозитории доступны веса и код отдельных этапов, формат итогового JSON, примеры запуска, результаты сравнения и код для end‑to‑end‑парсинга. Порог кластеризации можно менять: более высокое значение делает объединение блоков строгим и создаёт больше коротких статей, более низкое — формирует более крупные группы.
Ограничения и следующие шаги
У текущей версии есть несколько важных ограничений.
Модель обучалась и тестировалась только на русскоязычных советских газетах 1934–1969 годов. Модульная схема допускает переобучение на других архивах, но её переносимость на другие языки, периоды и коллекции в этой работе экспериментально не проверялась. Мы предполагаем, что для особенно необычной верстки может потребоваться отдельная модель reading order. Но это неточно.
Следующий логичный этап — проверить PereStruct на других исторических коллекциях и добавить более разнообразные типы вёрстки. Опубликованные материалы позволяют повторить доступный пример инференса и экспериментировать с открытым YOLO‑датасетом.
Вместо заключения
Оцифровать газету — не значит просто распознать все символы на странице. Чтобы искать и анализировать отдельные материалы, а не только текст целой полосы, нужно восстановить структуру документа и не потерять связь между его фрагментами.
В PereStruct мы разделили эту задачу на понятные этапы и для каждого выбрали подходящий инструмент: YOLO находит элементы вёрстки, Yandex Vision OCR распознаёт текст, наша модель в Yandex AI Studio получает ограничивающий промпт для посткоррекции, а XGBoost объединяет текстовые, геометрические и визуальные признаки в связи между блоками.
Главный инженерный вывод проекта простой: иногда лучший способ применить современные модели — не поручать одной из них всё сразу, а собрать систему, в которой каждый компонент решает ограниченную и проверяемую задачу.
Ссылки:

