Transcription
В течение выходных я просматривал Twitter, чтобы узнать, что происходит в сообществе ИИ. В очередной раз Deepseek привлек мировое внимание. Это не просто какой-то инструмент распознавания текста. Это совершенно новая технология контекстной оптической компрессии, которая использует визуальные методы для решения задачи обработки длинных текстов, предлагая совершенно новый подход к работе с огромными объемами информации из документов.
Любой, кто пользовался большой языковой моделью, сталкивался с распространенной проблемой. Когда вы просите модель суммировать десятки тысяч слов из заметок с конференций или научных статей, она начинает терять память. Это происходит потому, что квадратичная сложность длины последовательности по своей сути ограничивает GPT, Gemini и Claude. Чем длиннее ввод, тем больше вычислительной мощности он требует. Но люди не такие. Мы можем взглянуть на заметку или диаграмму и мгновенно вспомнить целый отрывок.
Традиционно, чтобы ИИ понимал длинные документы, весь документ должен быть преобразован в цифровой текст. Этот процесс потребляет большое количество токенов, которые можно рассматривать как единицы, используемые ИИ-агентом для обработки информации, что приводит к низкой вычислительной эффективности. Deepseek OCR использует другой подход. Сначала он преобразует текст в изображения, а затем использует визуальные токены для сжатия и представления этой информации. Представьте, что у вас есть статья объемом 10 000 слов. Вместо того чтобы ИИ читал ее слово за словом, он может просто взглянуть на изображение, чтобы понять и реконструировать исходный текст.
Основной прорыв заключается в его способности представлять богатую информацию в одном изображении, содержащем текст документа, используя гораздо меньше токенов, чем эквивалентный текст. Это означает, что оптическая компрессия с визуальными токенами может достигать более высоких коэффициентов сжатия, позволяя нам делать больше с меньшими ресурсами.
Итак, позвольте мне провести краткую демонстрацию живого чат-бота, чтобы показать, что я имею в виду. Я задам чат-боту вопрос. Каковы основные выводы? Если вы посмотрите, как чат-бот генерирует вывод, вы увидите, что агент извлекает текст с каждой страницы. Но если страница содержит менее 50 символов или не имеет встроенного текста, он преобразует эту страницу в изображение с высоким разрешением и отправляет его на DeepSseek OCR на replicate, который использует инновационный подход контекстной оптической компрессии, где он преобразует документ в визуальные токены и сжимает информацию, по сути, позволяя ИИ взглянуть на визуальное представление, а не читать слово за словом, что может превратить статью объемом 10 000 слов в гораздо более эффективный сжатый формат теста.
После извлечения всего текста система разбивает его на блоки по 500 символов с перекрытием в 50 символов для поддержания контекста, преобразует каждый блок в математические векторы с использованием OpenAI embeddings и сохраняет их в векторной базе данных Chroma, которая сохраняется на диске для будущего использования. Когда вы задаете вопрос, агент ищет в этих векторах пять наиболее семантически похожих блоков документов, собирает их в контекстный промпт вместе с вашим вопросом и инструкциями для указания номеров страниц, затем отправляет все в модель Llama 3.1405B, работающую на replicate streaming API, которая обрабатывает промпт и генерирует интеллектуальный ответ по частям в режиме реального времени, затем генерирует ответ и цитаты из исходного документа, показывающие, с каких страниц была получена информация, создавая полный RAG-агент, который может понимать любой PDF.
Обязательно оставайтесь с нами до конца этого видео. Если вы еще не подписались на меня, я настоятельно рекомендую это сделать, чтобы быть в курсе последних новостей ИИ. Наконец, убедитесь, что вы подписались, включили колокольчик уведомлений, поставили лайк этому видео и посмотрели предыдущие видео, потому что там много контента, от которого вы определенно получите пользу. Итак, с этой мыслью, давайте вернемся к видео.
Deepseek OCR — это комплексная модель OCR и обработки документов, разработанная для достижения оптической контекстной компрессии. Эта модель состоит из двух основных компонентов: глубокого энкодера, который сжимает входное изображение с высоким разрешением в небольшое количество визуальных токенов, и глубокого декодера Deepse 3Be, языковой модели "смесь экспертов", которая восстанавливает исходный текст из последовательности визуальных токенов.
Глубокий энкодер с примерно 380 миллионами параметров включает механизм внимания на основе окон для локального извлечения признаков изображения и, вставляя двухслойную CNN с 16-кратным сжатием между ними, значительно сжимает изображение размером 1024x1024 пикселя из 496 патчей до примерно 256 токенов. Сторона декодера, которая получает эти визуальные токены, имеет в общей сложности 3 миллиарда параметров. Примерно 570 миллионов эффективны во время инференса и имеют архитектуру, которая динамически использует шесть экспертов за шаг из 64 экспертов, что обеспечивает легкую, но эффективную реконструкцию текста.
С помощью этой архитектуры DeepSseek OCR использует нетрадиционный подход, преобразуя содержимое текстового документа в изображение, а затем читая его. Когда я тестировал обе модели OCR, я обнаружил кое-что интересное. Paddle OCRVL, которая на самом деле меньше, 0,9 миллиарда параметров, превосходила гораздо более крупные 3B модели в реальных тестах. Я дал ей сложные задачи по чтению вертикального текста в правильном направлении, пониманию сложных математических формул и работе с документами с несколькими столбцами. И Paddle OCRVL справилась со всем этим, в то время как Deepseek OCR допускала ошибки в порядке чтения и формулах, несмотря на свои классные функции сжатия.
Затем я обнаружил кое-что интересное в исследовательской работе Deepseek OCR. Они фактически поблагодарили Paddle OCR и признали, что использовали ее для маркировки своих обучающих данных, что заставило меня понять, почему такие компании, как BU, Deepseek и Shanghai AI Lab, выпускают модели OCR. Они не делают OCR-инструменты своей основной работой. Они создают их для очистки огромных объемов данных для обучения своих ИИ-моделей, а мы получаем эти мощные OCR-инструменты в качестве бесплатных бонусов.
После тестирования всего я понял, что если вы создаете что-то для реальной работы и вам нужно читать печатный текст, формы, таблицы или документы на разных языках, то Paddle OCRVL — это то, что вам нужно. В то время как DeepSk OCR лучше подходит, если вы исследователь, пытающийся сжать данные, чтобы сэкономить на затратах на ИИ.
В традиционной большой языковой модели текст разбивается на дискретные текстовые токены, обычно слова или части слов. Каждому токену присваивается фиксированный идентификатор в словаре и он отображается в вектор через большую таблицу поиска в слое встраивания. Хотя этот процесс эффективен, его выразительная сила ограничена ограниченным словарем.
Визуальные токены совершенно другие. Вместо того чтобы поступать из фиксированной таблицы поиска, они представляют собой непрерывные векторы, генерируемые непосредственно из пикселей изображения нейронной сетью-визуальным энкодером. Это означает более высокую плотность информации, глобальное восприятие паттернов, большее пространство выражения.
Итак, прежде чем перейти к нашему приложению, мы создадим идеальную среду для работы кода. Для этого нам нужно установить необходимые библиотеки Python. Ребята, если вы хотите поддержать меня, пожалуйста, рассмотрите возможность присоединения к моему Patreon. Там вы найдете все мои коды, и каждый доллар идет на создание видео.
Следующий шаг — обычный. Мы импортируем соответствующие библиотеки, значимость которых станет очевидной по мере продвижения, и выполним некоторую базовую настройку. Я разработал этот пользовательский класс llama, унаследовав его от класса langchain space LLM и настроив его с идентификатором модели llama 3.14005B, лимитами токенов и настройками температуры. Я реализовал необходимое свойство underscore LLM type для возврата идентификатора. Затем я построил основной метод вызова, который принимает промпт, упаковывает его с конфигурацией в словарь, отправляет его в потоковый API replicate и перебирает части ответа, чтобы объединить их в полный ответ.
Я построил этот класс OCR PDF loader для извлечения текста из PDF, сначала пытаясь использовать нативное извлечение текста и переходя к OCR при необходимости. Я инициализировал его путем к файлу, необязательным флагом OCR и текстовым порогом по умолчанию (50 символов) для определения, имеет ли страница достаточно нативного текста. В методе load я открыл PDF с помощью PIMU PDF, перебрал каждую страницу для извлечения текста нативно, затем проверил, было ли принудительное OCR или извлеченный текст был ниже порога. Если это так, я вызвал свой метод underscore OCR page, который я построил для преобразования страницы в изображение PNG с высоким разрешением. Отправил его в API Deepseek OCR replicate. Получил OCR-текст обратно, очистил временное изображение и вернул извлеченный текст. Наконец, я упаковал текст каждой страницы в объекты документов langchain с метаданными, исходным файлом, номером страницы, именем файла и вернул их в виде списка, получив таким образом умный загрузчик, который автоматически обрабатывает как цифровые, так и сканированные PDF.
Далее я построил этот PDF RAG на основе langchain. Этот класс является основным оркестратором, который связывает все воедино в полную RAG-систему. Я инициализировал его, настроив мою пользовательскую модель llama для генерации ответов, OpenAI embeddings для преобразования текста в векторы, текстовый разделитель, который разбивает документы на блоки по 500 символов с перекрытием в 50 символов для поддержания контекста между блоками, и векторную базу данных Chroma, которую я настроил для сохранения на диске, чтобы она могла перезагружать существующие данные между сессиями.
Я создал метод add PDF, который использует мой OCR loader для извлечения текста из PDF, разбивает этот текст на управляемые блоки, затем либо создает новый векторный магазин, либо добавляет к существующему, преобразуя каждый блок в embeddings и сохраняя их для семантического поиска. Наконец, я реализовал метод query, где я настроил ретривер для поиска пяти наиболее релевантных блоков документов, построил цепочку langchain, которая принимает вопрос пользователя, извлекает релевантный контекст, форматирует его в шаблон промпта, прося LLM указывать номера страниц, передает все моей модели llama для генерации и возвращает как сгенерированный ответ, так и исходные документы с их номерами страниц, по сути, создавая полную систему ответов на вопросы, которая может интеллектуально искать в PDF и предоставлять точные цитированные ответы.
Я создал экземпляр RAG-системы с llama 3.1405b, загрузил PDF в векторную базу данных и запросил ее с вопросом. Агент извлек релевантные блоки документов, сгенерировал ответ и вернул как ответ, так и цитаты из источников.
Deepseek OCR — это не просто более мощный инструмент OCR, а исследовательская работа, открывающая новую главу. Предлагаемая им концепция визуальной компрессии текста предлагает изобретательный путь к решению одной из самых больших проблем, стоящих перед современными крупномасштабными моделями: узкого места в эффективности обработки длинного контекста путем рендеринга текстовой информации в виде двумерных изображений и ее сжатия в плотные визуальные токены с использованием эффективного визуального энкодера. Deepseek OCR демонстрирует, что ИИ может видеть изображения так же, как и люди, что позволяет ему более эффективно понимать и запоминать большие объемы информации.