Список литературы долго казался мне самой скучной частью научной работы. Пока я не столкнулась с тем, что в нём могут прятаться очень убедительные, но полностью вымышленные ссылки. Они выглядят аккуратно, оформлены по всем правилам, но ведут в никуда или вообще не существуют. Именно это и стало отправной точкой моей выпускной квалификационной работы.
Суть проекта
«Разработка системы автоматической проверки подлинности источников в научных публикациях с использованием методов машинного обучения»
Проще говоря, я создаю систему, которая:
- принимает научный документ,
- находит в нём список литературы,
- анализирует каждую ссылку,
- проверяет, существует ли источник на самом деле,
- сравнивает метаданные с внешними реестрами,
- выдаёт понятный вердикт.
Возможные результаты:
- источник подтверждён;
- источник, скорее всего, реальный, но данных недостаточно;
- источник не удалось подтвердить.
Если в ссылке есть ошибки, система не просто отметит её как подозрительную, а укажет, что именно пошло не так, и предложит, как исправить.
Почему это стало важно
С развитием генеративных моделей ИИ научные тексты начали «галлюцинировать» — выдумывать источники. Это уже не просто опечатки или пропущенные запятые. Это угроза достоверности всей публикации.
Несуществующие или искажённые ссылки вредят:
- качеству работы;
- доверию к автору;
- времени рецензентов и редакторов;
- воспроизводимости научных результатов.
Проблема двойная: есть оформление (ГОСТ, APA, IEEE) и есть подлинность. Даже идеально оформленная ссылка может быть фейковой. Мне важно научить систему различать:
- реально существующие источники;
- правдоподобные, но с недостатком подтверждений;
- с ошибками в данных;
- случаи, где лучше вмешаться человеку.
С чего я начинала
Изначально казалось, что задача простая:
- Взять PDF.
- Найти список литературы.
- Извлечь DOI или URL.
- Проверить доступность.
- Пометить подозрительные ссылки.
Но план быстро рухнул. Проблема начинается задолго до проверки DOI. Чтобы дойти до неё, системе нужно:
- извлечь текст из документа;
- найти блок литературы;
- отделить ссылки от мусора и колонтитулов;
- разбить текст на отдельные записи;
- извлечь метаданные — авторов, название, год, журнал, DOI и т.д.;
- оценить, какие поля пропущены или распознаны с ошибками.
Этот этап оказался настолько насыщенным, что стал отдельной задачей.
Где всё оказалось сложнее
Библиография не живёт в одном аккуратном формате
На практике мы сталкиваемся с:
- разными стилями — ГОСТ, APA, IEEE;
- смешанными списками;
- частично заполненными записями;
- отсутствием DOI;
- ссылками на книги, сайты, патенты;
- записями, явно написанными в спешке.
Одна и та же задача — извлечь автора, название, год — решается по-разному в зависимости от типа источника, языка и качества текста.
PDF не обязан быть дружелюбным к парсингу
Внутри PDF могут быть:
- повторяющиеся шапки и подвалы;
- разрывы строк в середине фраз;
- несоответствие визуального и текстового порядка;
- сканы без текстового слоя.
Поэтому первый технический вывод: сначала нужно научиться надёжно извлекать и структурировать библиографию.
Одного DOI недостаточно
DOI удобен, но не всегда есть. Проблемы:
- DOI отсутствует;
- написан с ошибкой;
- есть только URL, который может быть мёртвым;
- источник есть в базах, но с искажёнными метаданными;
- русскоязычные источники часто не имеют DOI, но существуют.
Значит, нужна более гибкая логика проверки — по названию, авторам, году, внешним базам.
Нельзя просто сказать «алгоритм решил»
Пользователям важно понимать:
- почему ссылка признана достоверной;
- почему вызывает сомнения;
- какие поля не совпали;
- что именно нужно исправить.
То есть нужна не только точность, но и объяснимость. Я не хочу создавать чёрный ящик.
Почему я не стала использовать готовые решения
Инструменты вроде GROBID, CERMINE, AnyStyle и API вроде Crossref решают отдельные части задачи. Есть хорошие парсеры, есть базы данных, есть нормализаторы ссылок. Но сквозного решения — от извлечения до проверки и объяснения — почти нет.
Особенно с учётом:
- работы с PDF;
- разнородных форматов;
- русскоязычных источников и ГОСТ;
- отсутствия DOI;
- необходимости объяснять результат.
Я не хотела делать «ещё один парсер». Мне нужна была сквозная система, которая не теряет смысла на полпути.
Как устроен мой пайплайн
Система сейчас умеет:
- принимать PDF и DOCX через веб-интерфейс;
- извлекать текст и строить JSON-структуру;
- находить список литературы по эвристикам, а не только по заголовку;
- разбивать его на отдельные записи;
- извлекать метаданные;
- оценивать уверенность парсинга;
- проверять DOI и URL;
- искать подтверждения в Crossref, OpenAlex, Wikidata, Google Scholar;
- присваивать статус достоверности;
- сохранять результаты и отчёт.
Статусы:
- verified — источник подтверждён;
- likely_verified — вероятно, реальный, но подтверждений мало;
- unverified — надёжных сигналов нет;
- unknown — данных недостаточно для вывода.
Я сознательно выбрала не бинарную логику, а шкалу неопределённости — реальный мир редко бывает чёрно-белым.
Зачем здесь машинное обучение
Правила и эвристики хорошо работают в типичных случаях. Но когда:
- нет DOI;
- URL не работает;
- поля распознаны с ошибками;
- запись не вписывается в шаблон, но выглядит реальной —
— нужна дополнительная гибкость.
Поэтому я выбрала гибридный подход:
- правила — для извлечения, базовой валидации, проверки идентификаторов;
- ML — как дополнительный слой в неоднозначных случаях.
Модель использует признаки:
- наличие ключевых полей;
- уверенность парсинга;
- результаты проверки DOI/URL;
- число внешних подтверждений;
- эвристическая оценка записи.
ML не заменяет логику, а помогает там, где правила спотыкаются.
Как я оцениваю качество
Оценивать «на глаз» — бесполезно. Я разбиваю пайплайн на этапы и считаю метрики по каждому:
- Парсинг — точность извлечения авторов, названий, годов и т.д.;
- Сопоставление — сколько ссылок удалось подтвердить;
- Классификация — насколько вердикт совпадает с ручной оценкой;
- Автокоррекция — улучшает ли предложенное исправление запись.
Если парсинг плохой, всё остальное будет искажено. Если автокоррекция вносит новые ошибки, система бесполезна. Важно понимать, где система сильна, а где — нет.
Что меня зацепило больше всего
Эта задача — на стыке:
- обработки документов;
- NLP;
- валидации данных;
- поиска и сопоставления сущностей;
- UX и доверия к автоматике.
Результат должен быть не только точным, но и понятным, объяснимым, осторожным в неопределённых случаях.
Поэтому в архитектуре заложен принцип human-in-the-loop:
если система не может уверенно подтвердить запись, она не должна изображать оракула. Лучше честно сказать: «вот что проверено, вот где сомнения — проверьте вручную».
Это важный принцип для прикладных систем.
Что уже работает, а что — нет
Прототип уже:
- принимает PDF и DOCX;
- извлекает и разбирает библиографию;
- проверяет идентификаторы;
- оценивает достоверность;
- показывает результаты в интерфейсе;
- отдаёт JSON для дальнейшей обработки.
Но есть ограничения:
- сканированные PDF требуют OCR — это отдельная задача;
- шумные и нестандартные ссылки парсятся неидеально;
- внешние API имеют лимиты, капчи и нестабильные ответы;
- не каждая неподтверждённая ссылка — фейк, иногда просто не хватает данных;
- автокоррекция может ухудшить запись, если действовать неаккуратно.
Эта тема быстро учит инженерной скромности.
Планы на оставшиеся два месяца
Мне осталось два месяца до защиты. Цель — не добавить модных фич, а довести систему до внятного, проверяемого состояния.
- Улучшить извлечение ссылок из документов.
- Обрабатывать сложные и смешанные форматы.
- Расширить и разметить датасет для ML.
- Аккуратно доработать автокоррекцию.
- Протестировать на корпусе и зафиксировать метрики по этапам.
К защите это должна быть не просто «идея с блок-схемой», а система, про которую можно честно сказать: вот вход, вот логика, вот где работает, вот где нужны ограничения.
Почему я об этом пишу
Потому что это не учебное упражнение. Это живая, прикладная проблема на стыке науки, инженерии и мира, где ИИ умеет уверенно врать. Вместо вопроса «как оформить список литературы» я задаю другой: «как отличить реальный источник от убедительной выдумки?»
Это не задача про магию. Здесь нужно собирать систему из слоёв, уважать неопределённость, выбирать между автоматизацией и безопасностью. Это инженерно, живо и местами упрямно.
Я взяла тему про библиографию, а в итоге строю инструмент, который ловит фейковые, битые и сомнительные источники. И, честно говоря, считаю это отличной темой для диплома.