Еще в апреле я рассказывала на SE7ENе о своем дипломном проекте — системе для верификации источников в научных статьях. На тот момент до защиты оставалось два месяца, проект представлял собой «живой» прототип, а я пыталась понять, что из задуманного удастся довести до жизнеспособного состояния.
С тех пор работа существенно эволюционировала.
Во-первых, я успешно защитила диплом на «отлично». Более того, мою работу признали лучшей в день защиты — событие, которое, безусловно, стоит упомянуть.
Во-вторых, система превратилась из учебного наброска в полноценный инженерный продукт. В ней появились встроенный OCR, механизм кэширования, офлайн-режим, корпусная оценка, классификация типов ошибок и модульная ML-архитектура для решения разноплановых задач.
И, пожалуй, самое важное: после защиты стало ясно, что диплом — это лишь формальная веха, а сама задача гораздо глубже. По мере совершенствования системы вскрывались новые сложности: PDF-файлы, качество распознавания текста, кривое форматирование, дефицит метаданных, специфика русскоязычных источников, непредсказуемость внешних API и вечная дилемма: «источник не найден — это баг системы или его действительно не существует?».
Эта статья — не финальный отчет в духе «проект завершен, расходимся». Это попытка рефлексии: что удалось реализовать, от чего пришлось отказаться, каких результатов удалось достичь и почему верификация библиографии оказалась гораздо более захватывающей задачей, чем казалось изначально.
Что именно проверяет система
Тема моей ВКР звучала так:
«Разработка системы автоматической проверки подлинности источников в научных публикациях с использованием методов машинного обучения»
Если перевести это на понятный язык: система анализирует научную статью, извлекает библиографию, декомпозирует каждую запись, проверяет существование источника, сверяет данные с авторитетными базами и выдает не просто бинарный ответ, а детальный анализ.
На выходе пользователь получает развернутый статус:
-
источник полностью подтвержден;
-
существование источника вероятно, но данных для верификации недостаточно;
-
источник не удалось подтвердить;
-
источник найден, но в библиографической записи обнаружены ошибки;
-
запись не поддается автоматическому парсингу и требует ручной проверки.
Поначалу мне казалось, что «бутылочное горлышко» — это DOI и URL. Логика была примитивной: извлекли идентификатор, сделали запрос, получили результат.
На практике выяснилось, что DOI — это лишь верхушка айсберга. Прежде чем до него добраться, нужно корректно извлечь текст из PDF, очистить его от «мусора» (колонтитулов, разрывов строк), сегментировать список литературы, выделить метаданные (авторов, год, название, журнал) и убедиться, что при парсинге не произошла потеря смысла.
Эволюция архитектуры
Первая версия проекта была линейной и простой:
документ -> извлечение текста -> список литературы -> отдельные записи -> DOI/URL -> внешняя проверка -> статус
Текущий пайплайн стал гораздо более устойчивым и комплексным.
Теперь система принимает файлы в форматах PDF и DOCX. Она извлекает текст, при необходимости подключает OCR для нетекстовых слоев, удаляет артефакты верстки, определяет библиографический блок по множеству эвристик (не только по заголовкам «Литература» или References), разбивает массив данных на отдельные записи и нормализует их.
Огромный пласт работы ушел на очистку шума. В реальных документах DOI часто разрывается переносами строк, URL портятся из-за форматирования, а OCR может превращать текст в набор псевдосимволов. Поэтому система отдельно занимается нормализацией кавычек, пробелов, приведением кириллицы и латиницы к единому стандарту и борьбой с «грязным» распознаванием.
После нормализации запись декомпозируется: авторы, название, год, издатель, идентификаторы (DOI, URL и др.).
Затем начинается этап сверки через Crossref, OpenAlex, Wikidata, ORCID, PubMed, Google Scholar и другие источники. Чтобы не спамить внешние сервисы и ускорить работу, был внедрен SQLite-кэш. Появился полноценный офлайн-режим, позволяющий работать с уже накопленными данными без привязки к API.
Но главное достижение — система теперь интерпретирует ошибки. Она умеет диагностировать:
-
проблемы с DOI или URL;
-
несоответствия в именах авторов или названии;
-
аномалии в датах или издательствах;
-
риски, связанные с плохим качеством OCR;
-
риски ошибок парсинга.
Пользователю критически важно не просто видеть красный флаг, а понимать: источник не существует, DOI ошибочен или система просто «не уверена» в разборе.
Почему одного DOI недостаточно
За несколько месяцев практики я усвоила: отсутствие DOI не равно «фейковый источник».
В реальности все сложнее. У легитимного источника может не быть DOI вовсе. Он может быть указан с опечаткой, пострадать при верстке или распознавании. URL может быть битым, а внешние сервисы — временно недоступными. Русскоязычная периодика часто вообще выпадает из идеальной схемы «нашли DOI — вопрос закрыт».
Поэтому система теперь анализирует набор векторов (сигналов):
-
валидность DOI;
-
доступность URL;
-
наличие в авторитетных каталогах;
-
степень совпадения метаданных (название, авторы, год).
Финальный статус формируется на основе этой совокупности данных. Если DOI отсутствует, но источник уверенно находится по названию и авторам — это статус likely_verified. Если ссылка ведет на сайт, но метаданные не бьются ни с одной базой — это неопределенный случай. Это «честный» подход, имитирующий человеческий интеллект.
Актуальный пайплайн обработки
Технологический процесс выглядит следующим образом:
PDF/DOCX ➔ извлечение текста ➔ OCR (при необходимости) ➔ удаление артефактов верстки ➔ локализация библиографического блока ➔ сегментация записей ➔ текстовая нормализация ➔ парсинг метаданных ➔ оценка качества разбора ➔ внешняя верификация (DOI, URL, каталоги) ➔ сопоставление с каноническими данными ➔ ML-оценка достоверности ➔ классификация рисков ➔ генерация отчета в HTML/JSON.
В интерфейсе представлена не просто таблица, а карточка каждой записи с исходным текстом, выделенными полями и обоснованием вердикта системы. Возможность выгрузки JSON полезна для последующей интеграции или глубокого анализа.
Роль машинного обучения
В первой версии ML рассматривался как абстрактный «черный ящик» для оценки достоверности. Сейчас я разделила эту задачу на две специализированные модели.
Первая — source_trust — оценивает вероятность надежности источника, опираясь на признаки записи и результаты всех проверок. Вторая — reference_match — определяет, действительно ли найденная в каталоге публикация соответствует записи из списка литературы (проблема семантического сопоставления).
Мне импонирует то, что нейросети не пытаются заменить инженерную логику — они работают поверх нее, обрабатывая «хвосты» и пограничные случаи, где простых правил недостаточно.
Метрики и оценка качества
Я не хотела ограничиваться субъективным ощущением успеха, поэтому применила несколько уровней тестирования.
На ручной выборке из 41 записи сегментация сработала идеально (F1 = 1.0). Однако для масштабируемости этого мало, поэтому была проведена корпусная оценка на 500 PDF из архива PMC. Система локализовала библиографию в 96,8% случаев. Из 32 910 эталонных записей (в JATS XML) удалось успешно извлечь 22 534. Это отражает реальные трудности работы с неструктурированными PDF.
Тестирование на выборке GROBID показало: recall — 82,55%, precision — 90,36%, F1 — 86,28%. ML-модели также показали достойные результаты (F1 около 0.79 для доверия и 0.91 для сопоставления).
Ограничения и «человеческий фактор»
Система не стала «волшебной кнопкой». Проблемы сканированных документов, вариативность стилей оформления и несовершенство OCR никуда не делись.
Осознанно была отвергнута идея автоматической автокоррекции записей. Замена ссылки — это высокая ответственность, где легко ошибиться. Вместо этого система предлагает «подсказки» человеку: что именно не совпадает и где стоит обратить внимание на оригинал.
Концепция human-in-the-loop здесь не вспомогательная, а фундаментальная. Задача системы — не вынести окончательный приговор, а сэкономить время эксперту, подсветив подозрительные участки.
Взгляд на библиографию
Раньше список литературы казался мне чисто техническим приложением. Сейчас я вижу в нем фундамент научной добросовестности. В эпоху больших языковых моделей, которые могут убедительно «галлюцинировать» ссылки, инструмент, позволяющий отделять реальные источники от сгенерированных фантомов, становится критически важным.
Перспективы
Проект перерос рамки учебной работы. В планах — улучшение работы с русскоязычными источниками и ГОСТами, развитие алгоритмов автокоррекции под контролем пользователя и доработка UI для максимальной продуктивности ученых и рецензентов.
Эпилог
Когда я только начинала, тема казалась узкой и даже скучной. На деле она оказалась на стыке компьютерного зрения (OCR), NLP, поисковых систем и машинного обучения. Я получила диплом, но проект продолжает жить. Он все еще несовершенен, но он уже справляется с главным: не дает слепо доверять «убедительно выглядящим» ссылкам.


