Улучшение научной обработки документов с помощью нуги.

Повышение эффективности научной обработки документов с использованием нуги.

Введение

В постоянно развивающейся области обработки естественного языка и искусственного интеллекта, способность извлекать ценные идеи из неструктурированных источников данных, таких как научные PDF-файлы, становится все более важной. Для решения этой задачи Meta AI представила Nougat, или “Нейронное оптическое понимание научных документов”, передовую модель, основанную на трансформаторе, разработанную для транскрибации научных PDF-файлов в общепринятый формат Markdown. Nougat был представлен в статье под названием “Nougat: Neural Optical Understanding for Academic Documents” Лукаса Блечера, Гийема Кукурулла, Томаса Скалома и Роберта Стойника.

Это создает предпосылки для прорывного преобразования в технологии оптического распознавания символов (OCR), а Nougat – это последнее новшество в впечатляющем арсенале моделей искусственного интеллекта Meta AI. В этой статье мы рассмотрим возможности Nougat, поймем его архитектуру и рассмотрим практический пример использования этой модели для транскрибации научных документов.

Цели обучения

  • Понять Nougat, последнюю модель трансформера Meta AI для научных документов.
  • Узнать, как Nougat строит на основе своего предшественника Donut, и представляет передовой подход к искусственному интеллекту документов.
  • Изучить Nougat, включая его визионного кодера, текстового декодера и полный процесс обучения.
  • Получить представление о развитии технологии OCR, от первых дней ConvNets до трансформационной мощи архитектуры Swin и авторегрессионных декодеров.

Эта статья была опубликована в рамках блогонауки по данным.

Рождение Nougat

Nougat – это не первая модель трансформера в семействе Meta AI. Она следует в следы своего предшественника “Донат”, который продемонстрировал мощность визионных кодеров и текстовых декодеров в модели на основе трансформера. Идея была проста: подать пиксели на модель и получить текстовый вывод. Этот комплексный подход устраняет сложные конвейеры и доказывает, что внимание – это все, что требуется.

Давайте кратко обсудим основную концепцию парадигмы “визионный кодер, текстовый декодер”, которая обеспечивает работу моделей, подобных Nougat. Донат, предшественник Nougat, представил возможность объединять обработку изображений и текста в одной модели. В отличие от традиционных конвейеров обработки документов, эти модели работают в конце-концов, принимая сырые данные пикселей и производя текстовый контент. Этот подход использует особенность внимания архитектуры трансформера для достижения результатов.

Nougat берет эстафету

Основываясь на успехе Donut, Meta AI представляет Nougat, чтобы взять OCR на новый уровень. Как и предшественник, Nougat использует визионный кодер в форме трансформера Swin и текстовый декодер на основе mBART. Nougat предсказывает разметку текста на основе сырых пикселей научных PDF-файлов. Это представляет собой прорывное смещение к упрощению транскрибации научных знаний в знакомый формат Markdown.

Meta AI увидела визионно-текстовую парадигму и применила ее для решения научных задач с документами. PDF-файлы, несмотря на широкое применение, часто ставят перед машинами задачу точного понимания и извлечения смысловой информации из научных знаний.

PDF-файлы могут быть преградой для эффективного извлечения знаний из-за потери семантической информации, особенно при работе с математическими структурами. Чтобы сократить эту пропасть, Meta AI представила Nougat.

Почему Nougat?

Люди традиционно хранили научные знания в книгах и журналах, часто в форме PDF-файлов. Однако формат PDF-файла часто приводит к потере важной семантической информации, например, при работе с математическими структурами. Nougat заполняет эту пропасть, выполняя OCR на научных документах и преобразуя их в язык разметки. Этот прорыв собирает научные знания и устраняет разрыв между документами, читаемыми человеком, и текстом, понятным машинам.

Нуга удачно транскрибирует сложные научные документы путем обратной разработки OCR-движка и полагается на архитектуру трансформера. Это открыло двери для искусственного интеллекта документов. Застрявшие в PDF научные знания теперь можно освободить и обработать с помощью Нугата.

Путешествие OCR

Путешествие Нугата – свидетельство технологии OCR. В конце 1980-х годов применение сверточных нейронных сетей (ConvNets) к OCR было новаторским. Однако идея обучения системы с точка зрения конечного пользователя, которая могла бы читать всю страницу, была всего лишь мечтой из-за ограничений того времени.

Прошло время, и теперь архитектуры Swin, которые объединяют ConvNets с трансформаторами и авторегрессивными декодерами, позволяют переводить всю страницу. Как Донат, Нуга следует парадигме видение-текст, основанной на трансформирующем кодировщике изображений и авторегрессивном декодере текста.

Использование Нугата: практический пример

Теперь, когда мы разобрались с Нугатом, давайте рассмотрим практический пример того, как использовать эту мощную модель для транскрибирования научных PDF-файлов в стандартный формат Markdown. Мы рассмотрим код пошагово, предоставляя объяснения и идеи на протяжении всего процесса. Полный код для этой статьи можно найти здесь https://github.com/inuwamobarak/nougat.

Настройка среды

Мы установим библиотеки. Они включают pymupdf, которая предназначена для чтения PDF-файлов в качестве изображений, а также другие библиотеки – python-Levenshtein и NLTK для задач постобработки.

!pip install -q pymupdf python-Levenshtein nltk!pip install -q git+https://github.com/huggingface/transformers.git

Загрузка модели и процессора

На этом этапе мы загрузим модель Нугата и связанный с ней процессор для подготовки модели к транскрипции PDF.

from transformers import AutoProcessor, VisionEncoderDecoderModelimport torch# Загрузим модель и процессор Нугата из хабапроцессор = AutoProcessor.from_pretrained("facebook/nougat-small")model = VisionEncoderDecoderModel.from_pretrained("facebook/nougat-small")

Давайте управим ресурсами памяти.

%%capturedevice = "cuda" if torch.cuda.is_available() else "cpu"model.to(device)

Теперь мы перейдем к написанию функции для растеризации pdf-бумаги на следующем шаге.

from typing import Optional, Listimport ioimport fitzfrom pathlib import Pathdef rasterize_paper(    pdf: Path,    outpath: Optional[Path] = None,    dpi: int = 96,    return_pil=False,    pages=None,) -> Optional[List[io.BytesIO]]:    """    Растеризация PDF-файла в изображения PNG.    Аргументы:        pdf (Path): Путь к PDF-файлу.        outpath (Optional[Path], опционально): Выходной каталог. Если None, вместо этого будут возвращены изображения PIL. По умолчанию - None.        dpi (int, опционально): DPI вывода. По умолчанию - 96.        return_pil (bool, опционально): Возвращать ли изображения PIL вместо записи их на диск. По умолчанию - False.        pages (Optional[List[int]], опционально): Страницы для растеризации. Если None, все страницы будут растеризованы. По умолчанию - None.    Возвращает:        Optional[List[io.BytesIO]]: Изображения PIL, если `return_pil` равно True, иначе None.    """    pillow_images = []    if outpath is None:        return_pil = True    try:        if isinstance(pdf, (str, Path)):            pdf = fitz.open(pdf)        if pages is None:            pages = range(len(pdf))        for i in pages:            page_bytes: bytes = pdf[i].get_pixmap(dpi=dpi).pil_tobytes(format="PNG")            if return_pil:                pillow_images.append(io.BytesIO(page_bytes))            else:                with (outpath / ("%02d.png" % (i + 1))).open("wb") as f:                    f.write(page_bytes)    except Exception:        pass    if return_pil:        return pillow_images

Загрузка PDF

На этом шаге мы загружаем образец PDF и используем модуль fitz для преобразования его в список изображений Pillow, каждое из которых представляет страницу из PDF. Мы будем использовать Crouse et al. 2023.

from huggingface_hub import hf_hub_downloadfrom typing import Optional, Listimport ioimport fitzfrom pathlib import Pathfrom PIL import Imagefilepath = hf_hub_download(repo_id="inuwamobarak/random-files", filename="2310.08535.pdf", repo_type="dataset")images = rasterize_paper(pdf=filepath, return_pil=True)image = Image.open(images[0])image

Создание Транскрипции

На этом шаге мы готовим изображение для ввода в модель Nougat. Пользовательские параметры остановки, чтобы контролировать процесс автогенерации. Эти параметры определяют, когда модель должна прекратить генерацию текста.

pixel_values = processor(images=image, return_tensors="pt").pixel_values

from transformers import StoppingCriteria, StoppingCriteriaListfrom collections import defaultdictclass RunningVarTorch:    def __init__(self, L=15, norm=False):        self.values = None        self.L = L        self.norm = norm    def push(self, x: torch.Tensor):        assert x.dim() == 1        if self.values is None:            self.values = x[:, None]        elif self.values.shape[1] < self.L:            self.values = torch.cat((self.values, x[:, None]), 1)        else:            self.values = torch.cat((self.values[:, 1:], x[:, None]), 1)    def variance(self):        if self.values is None:            return        if self.norm:            return torch.var(self.values, 1) / self.values.shape[1]        else:            return torch.var(self.values, 1)class StoppingCriteriaScores(StoppingCriteria):    def __init__(self, threshold: float = 0.015, window_size: int = 200):        super().__init__()        self.threshold = threshold        self.vars = RunningVarTorch(norm=True)        self.varvars = RunningVarTorch(L=window_size)        self.stop_inds = defaultdict(int)        self.stopped = defaultdict(bool)        self.size = 0        self.window_size = window_size    @torch.no_grad()    def __call__(self, input_ids: torch.LongTensor, scores: torch.FloatTensor):        last_scores = scores[-1]        self.vars.push(last_scores.max(1)[0].float().cpu())        self.varvars.push(self.vars.variance())        self.size += 1        if self.size < self.window_size:            return False        varvar = self.varvars.variance()        for b in range(len(last_scores)):            if varvar[b] < self.threshold:                if self.stop_inds[b] > 0 and not self.stopped[b]:                    self.stopped[b] = self.stop_inds[b] >= self.size                else:                    self.stop_inds[b] = int(                        min(max(self.size, 1) * 1.15 + 150 + self.window_size, 4095)                    )            else:                self.stop_inds[b] = 0                self.stopped[b] = False        return all(self.stopped.values()) and len(self.stopped) > 0

outputs = model.generate(    pixel_values.to(device),    min_length=1,    max_length=3584,    bad_words_ids=[[processor.tokenizer.unk_token_id]],    return_dict_in_generate=True,    output_scores=True,    stopping_criteria=StoppingCriteriaList([StoppingCriteriaScores()]),)

Постобработка

Наконец, мы декодируем сгенерированные идентификаторы токенов в читаемый человеком текст и применяем постобработку для улучшения сгенерированного содержимого Markdown. Полученный результат представляет собой транскрибированное содержимое из научного PDF-файла.

generated = processor.batch_decode(outputs[0], skip_special_tokens=True)[0]generated = processor.post_process_generation(generated, fix_markdown=False)print(generated)

Сгенерированный вывод представляется в виде Markdown:

Вот как запустить вывод с помощью Nougat. Легко извлечь этот набор текста в формате Markdown. Полный код для этой статьи можно найти здесь https://github.com/inuwamobarak/nougat. Другие ссылки доступны для просмотра в конце статьи.

Метрики производительности

Для оценки производительности Nougat на тестовом наборе использовался ряд метрик. Эти метрики позволяют получить всестороннее представление о возможностях Nougat в преобразовании научных PDF-документов в формат Markdown.

Расстояние Левенштейна (Edit Distance)

Расстояние Левенштейна (Edit Distance) измеряет количество символов, которые необходимо изменить, чтобы преобразовать одну строку в другую. Оно включает добавление, удаление и замену символов. Нормализованное расстояние Левенштейна использовалось для оценки Nougat, разделив вычисленное расстояние на общее количество символов. Эта метрика предоставляет информацию о том, насколько точно Nougat осуществляет преобразование содержимого, учитывая особенности научных документов.

BLEU Score

Эта метрика изначально была разработана для оценки качества машинного перевода. Метрика BLEU (Bilingual Evaluation Understudy) сравнивает кандидатский текст, сгенерированный Nougat, с референсным текстом. Она вычисляет оценку на основе количества совпадающих n-грамм между двумя текстами. Это показывает, насколько Nougat передает суть оригинального содержимого и сходство по n-граммам.

METEOR Score

Еще одна заметная метрика машинного перевода, METEOR, уделяет больше внимания полноте, чем точности. Хотя она не является обычным выбором для оценки OCR, она предоставляет уникальную перспективу на то, насколько Nougat сохраняет основное содержимое и исходный материал. METEOR, подобно BLEU, помогает оценить качество преобразованного текста.

F-мера

Оценка F1 объединяет точность и полноту преобразования Nougat. Это сбалансированная перспектива на производительность модели, учитывающая ее способность точно передавать содержание и сохранять значимую информацию.

Возможные применения Nougat вне академических документов

Хотя Nougat изначально был разработан для преобразования академических документов, его применение простирается далеко за их рамки. Вот несколько потенциальных областей, где Nougat может оказать значительное влияние:

Медицинские документы

Nougat может использоваться для преобразования медицинских записей и клинических заметок. Это может помочь в цифровизации информации о здравоохранении и поиске информации для медицинских специалистов.

Юридические документы, договоры и судебные документы часто находятся в формате PDF. Nougat может облегчить преобразование этих документов в машинночитаемый текст, упрощая юридические процессы и исследования.

Специализированные области

Гибкость Nougat позволяет его использование в специализированных областях, таких как инженерия, финансы и другие. Он может преобразовывать технические доклады, финансовые отчеты и другие документы, характерные для конкретной сферы деятельности.

Nougat – это веха в области искусственного интеллекта документов, практичное и эффективное решение для преобразования научных PDF-документов в машинночитаемый формат Markdown. Его вклад в область искусственного интеллекта документов дает представление о будущем, где поиск информации станет более эффективным.

Будущее распознавания научного текста

Nougat всегда используется в VisionEncoderDecoder, отражая архитектуру Donut. Изображения подаются на вход модели, и VisionEncoderDecoder Nougat генерирует текст авторегрессивно. Класс NougatImageProcessor обрабатывает предварительную обработку изображений, а NougatTokenizerFast декодирует сгенерированные целевые токены в строку цели. Класс NougatProcessor объединяет эти классы для извлечения признаков и декодирования токенов.

Эта возможность является передовой и скоро станет еще более адаптивной. Nougat представляет собой систему искусственного интеллекта документов. Решение для преобразования научных PDF-документов в машинночитаемый формат Markdown. По мере развития технологий, Nougat будет иметь потенциал изменить способ взаимодействия исследователей и ученых с научной литературой, сделав знания более доступными и применимыми в цифровую эпоху.

Заключение

Nougat – это не просто сладкое дополнение к семье Meta AI; это революционный шаг в области OCR для научных документов. Его способность преобразовывать сложные PDF-документы в текст формата Markdown – это нечто новое для получения научных знаний. По мере развития технологий, влияние Nougat будет ощущаться в области искусственного интеллекта, обработки документов и за ее пределами.

В мире, где доступ к знаниям имеет первостепенное значение, Nougat – это мощный инструмент для извлечения информации из научных PDF-документов, сокращая разрыв между читаемыми человеком документами и машинночитаемым текстом. Его вклад в область искусственного интеллекта документов дает представление о будущем, где поиск информации станет более эффективным, чем когда-либо.

Основные выводы

  • Nougat – передовая OCR-модель Meta AI для перевода научных PDF-файлов в удобный формат Markdown.
  • Модель объединяет в себе сверточный энкодер Swin Transformer и декодер текста на основе mBART, что позволяет ей работать на полном цикле.
  • Она показывает, как трансформаторная архитектура упрощает сложные задачи, такие как транскрибация научных документов.
  • Эволюция технологии OCR, начиная с ранних ConvNets и заканчивая современными архитектурами Swin и авторегрессионными декодерами, проложила путь для возможностей Nougat.

Часто задаваемые вопросы

  • https://huggingface.co/facebook/nougat-base
  • https://github.com/NielsRogge/Transformers-Tutorials/
  • https://github.com/inuwamobarak/nougat
  • https://arxiv.org/abs/2310.08535
  • https://arxiv.org/abs/2308.13418
  • https://huggingface.co/datasets/inuwamobarak/random-files
  • https://huggingface.co/spaces/ysharma/nougat

Изображения, показанные в этой статье, не принадлежат Analytics Vidhya и используются по усмотрению автора.