Как я создаю систему проверки подлинности научных источников

Как я создаю систему проверки подлинности научных источников

Список литературы долго казался мне самой скучной частью научной работы. Пока я не столкнулась с тем, что в нём могут прятаться очень убедительные, но полностью вымышленные ссылки. Они выглядят аккуратно, оформлены по всем правилам, но ведут в никуда или вообще не существуют. Именно это и стало отправной точкой моей выпускной квалификационной работы.

Суть проекта

«Разработка системы автоматической проверки подлинности источников в научных публикациях с использованием методов машинного обучения»

Проще говоря, я создаю систему, которая:

  • принимает научный документ,
  • находит в нём список литературы,
  • анализирует каждую ссылку,
  • проверяет, существует ли источник на самом деле,
  • сравнивает метаданные с внешними реестрами,
  • выдаёт понятный вердикт.

Возможные результаты:

  • источник подтверждён;
  • источник, скорее всего, реальный, но данных недостаточно;
  • источник не удалось подтвердить.

Если в ссылке есть ошибки, система не просто отметит её как подозрительную, а укажет, что именно пошло не так, и предложит, как исправить.

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

С развитием генеративных моделей ИИ научные тексты начали «галлюцинировать» — выдумывать источники. Это уже не просто опечатки или пропущенные запятые. Это угроза достоверности всей публикации.

Несуществующие или искажённые ссылки вредят:

  1. качеству работы;
  2. доверию к автору;
  3. времени рецензентов и редакторов;
  4. воспроизводимости научных результатов.

Проблема двойная: есть оформление (ГОСТ, APA, IEEE) и есть подлинность. Даже идеально оформленная ссылка может быть фейковой. Мне важно научить систему различать:

  • реально существующие источники;
  • правдоподобные, но с недостатком подтверждений;
  • с ошибками в данных;
  • случаи, где лучше вмешаться человеку.

С чего я начинала

Изначально казалось, что задача простая:

  1. Взять PDF.
  2. Найти список литературы.
  3. Извлечь DOI или URL.
  4. Проверить доступность.
  5. Пометить подозрительные ссылки.

Но план быстро рухнул. Проблема начинается задолго до проверки 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 имеют лимиты, капчи и нестабильные ответы;
  • не каждая неподтверждённая ссылка — фейк, иногда просто не хватает данных;
  • автокоррекция может ухудшить запись, если действовать неаккуратно.

Эта тема быстро учит инженерной скромности.

Планы на оставшиеся два месяца

Мне осталось два месяца до защиты. Цель — не добавить модных фич, а довести систему до внятного, проверяемого состояния.

  1. Улучшить извлечение ссылок из документов.
  2. Обрабатывать сложные и смешанные форматы.
  3. Расширить и разметить датасет для ML.
  4. Аккуратно доработать автокоррекцию.
  5. Протестировать на корпусе и зафиксировать метрики по этапам.

К защите это должна быть не просто «идея с блок-схемой», а система, про которую можно честно сказать: вот вход, вот логика, вот где работает, вот где нужны ограничения.

Почему я об этом пишу

Потому что это не учебное упражнение. Это живая, прикладная проблема на стыке науки, инженерии и мира, где ИИ умеет уверенно врать. Вместо вопроса «как оформить список литературы» я задаю другой: «как отличить реальный источник от убедительной выдумки?»

Это не задача про магию. Здесь нужно собирать систему из слоёв, уважать неопределённость, выбирать между автоматизацией и безопасностью. Это инженерно, живо и местами упрямно.

Я взяла тему про библиографию, а в итоге строю инструмент, который ловит фейковые, битые и сомнительные источники. И, честно говоря, считаю это отличной темой для диплома.

Читать оригинал