ДокАИ: PDF-файлы/сканированные документы в структурированные данные

Общее заявление

“Почему” данного решения AI очень важно и широко распространено по всем областям.

Представьте, у вас есть несколько сканированных PDF-документов:

  • Где клиенты делают некоторые ручные выборы, добавляют подпись/даты/информацию о клиенте
  • У вас есть много страниц письменной документации, сканированных и хотите решение, которое extrahuет текст из этих документов

Или

  • Вы просто ищете AI-поддержанный путь, который предоставляет интерактивный механизм для запроса документов, не имеющих структурированного формата

Деaling с такими сканированными/смешанными/неструктурированными документами может быть трудно, и извлечение важной информации из них может быть ручным, следовательно, склонным к ошибкам и сложным.

Решение ниже использует силу OCR (оптическое распознавание символов) и LLM (большие языковые модели), чтобы extrahuить текст из таких документов и запросить их, чтобы получить структурированную доверительную информацию.

Высокоуровневая архитектура

Интерфейс пользователя

  • Интерфейс позволяет загружать PDF/сканированные документы (он может быть дополнительно расширен для других типов документов).
  • Streamlit используется для интерфейса пользователя:
    • Данный open-source Python Framework очень удобен в использовании.
    • По мере внесения изменений, они отражаются в запущенных приложениях, делая этот механизм быстрой тестовой платформой.
    • Сообществом поддержки Streamlit набирается сила и растет.
  • Последовательность разговора:
    • Это по существу обязательно, чтобы включить чатботы, способные отвечать на следующие вопросы и предоставлять историю чата.
    • Мы используем LangChain для взаимодействия с используемым нами AI моделью; в целях данного проекта мы испытали OpenAI и Mistral AI.

backend service

流通事件

  1. 用户上传 PDF/扫描文档,然后将其上传到 S3 存储桶中。
  2. 然后 OCR 服务从 S3 存储桶 检索此文件并处理以从中提取文本。
  3. 从上述输出创建文本块,并为它们创建相关向量嵌入。
    • 现在这非常重要,因为当文本块被分割时,您不希望失去上下文:它们可能会在句子中间被分割,如果没有一些标点符号,可能会失去意义,等等。
    • 因此,为了抵消这一点,我们创建了重叠的文本块。
  4. Большая языковая модель, которую мы используем, принимает эти вкрапления в качестве входных данных, и у нас есть две функции:
    1. Генерировать специфический вывод:
      • Если у нас есть конкретный вид информации, которую нужно извлечь из документов, мы можем предоставить запрос в коде к модели ИИ, получить данные и сохранить их в структурированном формате.
      • Избежать галлюцинаций ИИ можно, явно добавив в код запросы с условиями, чтобы не подставлять определенные значения и использовать только контекст документа.
      • Мы можем хранить его как файл в S3/локально или записывать в базу данных.
    2. Чат
      • Здесь мы предоставляем конечному пользователю возможность инициировать чат с ИИ для получения конкретной информации в контексте документа.

Задание OCR

  • Мы используем Amazon Textract для оптического распознавания этих документов.
  • Он работает отлично с документами, также содержащими таблицы/формы и т. д.
  • Если вы работаете над PoC, используйте бесплатный уровень для этого сервиса.

Векторные эмбеддинги

  • Довольно простой способ понять векторные嵌入 (векторные представления) заключается в том, чтобы транслировать слова или предложения в числа, которые捕获 контекстное значение и взаимоотношения
  • Представьте, у вас есть слово “кольцо”, которое является украшением: по смыслу этого самого слова, одним из ближайших соответствий является “песня”. Но с учетом значения слова, мы хотели бы, чтобы оно соответствовало чему-то вроде “ювелирных изделий”, “пальца”, “бриллиантов” или, возможно, чему-то вроде “ромба”, “кольцо”, и т. д.
    • Таким образом, когда мы создаем векторное представление для “кольца”, в сущности мы заполняем его множеством информации о его значении и взаимоотношениях.
    • Эта информация, вместе с векторными представлениями других слов/предложений в документе, обеспечивает выбор правильного значения слова “кольцо” в контексте.
  • Мы использовали OpenAIEmbeddings для создания векторных представлений.

LLM

  • Есть многочисленные крупные языковые модели, которые можно использовать в нашем сценарии.
  • В рамках этого проекта были проведены тесты с OpenAI и Mistral AI.
  • Прочитайте больше здесь о API-ключах для OpenAI.
  • Для MistralAI использовалась HuggingFace.

Применения и тесты

Мы выполнили следующие тесты:

  • Сигнатуры и рукописные даты/тексты были считаны с использованием OCR.
  • Руками выбранные опции в документе
  • Цифровые выделения, сделанные на документе
  • Неструктурированные данные разбиты для получения табличного содержимого (добавить в текстовый файл/БД и т. д.)

Плановый объем

Мы можем далее расширить возможности указанного выше проекта, включив поддержку изображений, интегрируя с документационными хранениями, такими как Confluence/Drive и т.д., для извлечения информации о конкретной теме из множества источников, добавив более сильный вариант для сравнительного анализа двух документов и т.д.

Source:
https://dzone.com/articles/docai-pdfs-scanned-docs-to-structured-data