Новости и статьи об искусственном интеллекте и нейросетях. Мы собираем и обрабатываем самую актуальную информацию из мира AI. О проекте

Статьи

Использование Qwen3-VL: визуальные языковые модели

Визуальные языковые модели, такие как Qwen 3 VL, позволяют эффективно обрабатывать изображения и текст, превосходя традиционные методы OCR. Статья демонстрирует их применение для распознавания символов и извлечения данных из документов, а также обсуждает ограничения. Эти модели открывают новые перспективы в анализе визуальной информации.

21 октября 2025 г.
9 мин
11

Визуальные языковые модели (VLMs) представляют собой мощные системы, способные обрабатывать изображения и текст на входе, а на выходе генерировать текстовые ответы. Такие модели позволяют извлекать визуальную информацию из документов и изображений. В этой статье рассматривается недавно выпущенная Qwen 3 VL и демонстрируются ключевые возможности VLMs.

Qwen 3 VL появилась несколько недель назад, начиная с версии 235B-A22B, которая относится к крупным моделям. Затем вышла 30B-A3B, а совсем недавно добавились плотные варианты 4B и 8B. Цель материала — подчеркнуть потенциал визуальных языковых моделей и дать общее представление об их применении. Qwen 3 VL используется здесь как конкретный пример, хотя существует множество других качественных VLMs. Автор не имеет никакой связи с разработчиками Qwen.

Инфографика с основными темами статьи о визуальных языковых моделях
Инфографика охватывает ключевые аспекты материала. Рассматриваются визуальные языковые модели и их преимущества перед комбинацией OCR с LLMs для анализа документов. Кроме того, обсуждается применение VLMs для оптического распознавания символов и извлечения информации с помощью Qwen 3 VL, а также некоторые ограничения таких моделей. Изображение создано с помощью ChatGPT.

Зачем нужны визуальные языковые модели

Визуальные языковые модели требуются, поскольку альтернатива — использование OCR для извлечения текста и последующая подача его в LLM — сопряжена с рядом проблем.

  • OCR не всегда точен, и LLM приходится работать с неидеальным извлеченным текстом.
  • Потеряется информация, связанная с визуальным расположением текста.

Традиционные движки OCR, такие как Tesseract, долгое время играли ключевую роль в обработке документов. Они позволяют загружать изображения и извлекать из них текст для дальнейшей обработки содержимого. Тем не менее, классический OCR далек от совершенства и может испытывать трудности с мелким шрифтом, искаженными изображениями, вертикальным текстом и подобными случаями. Если качество OCR низкое, то все последующие операции, будь то регулярные выражения или работа с LLM, окажутся затрудненными. Прямая подача изображений в VLMs вместо извлеченного текста в LLMs оказывается гораздо эффективнее для полного использования доступной информации.

Визуальное положение текста порой критично для правильного понимания его смысла. Представьте ситуацию, показанную на изображении ниже: там есть флажки, отмечающие релевантный текст, некоторые из которых отмечены, а другие — нет. К каждому флажку соответствует текст, и только тот, что рядом с отмеченным флажком, имеет значение. Извлечение такой информации с помощью OCR и LLMs сложно, поскольку невозможно определить, к какому тексту относится отмеченный флажок. В то же время для визуальных языковых моделей эта задача решается без усилий.

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

Изображение выше было подано в Qwen 3 VL, и модель дала следующий ответ:

Based on the image provided, the documents that are checked off are: - **Document 1** (marked with an "X") - **Document 3** (marked with an "X") **Document 2** is not checked (it is blank).

Как видно, Qwen 3 VL без проблем справилась с задачей и выдала верный результат.


Еще одна причина необходимости VLMs — возможность анализа видео. Полное понимание видеоклипов с помощью OCR было бы чрезвычайно сложно, поскольку большая часть информации в видео передается не текстом, а напрямую изображениями. OCR здесь неэффективен. Однако современные VLMs позволяют загружать сотни изображений, например, представляющих видео, и выполнять задачи по его интерпретации.

Задачи для визуальных языковых моделей

Существует множество задач, на которые можно применять визуальные языковые модели. Здесь рассмотрены несколько наиболее актуальных.

  • Оптическое распознавание символов (OCR)
  • Извлечение информации

Данные для тестирования

Для демонстрации используется изображение ниже.

Пример документа для тестирования Qwen 3 VL из муниципалитета Осло
Это изображение применяется для проверки Qwen 3 VL. Оно взято из открытого источника муниципального органа планирования Осло (Plan og bygningsetaten). Документ выбран как реальный случай, подходящий для визуальной языковой модели. Изображение обрезано, поскольку оригинал включал чертеж. Локальный компьютер не справился бы с полным размером, поэтому обрезка позволила обработать его в высоком разрешении. Разрешение — 768x136, достаточное для OCR. Извлечено из PDF с 600 DPI.

Такой документ идеален для применения Qwen 3 VL. Изображение обрезано для загрузки в высоком разрешении на локальном устройстве. Сохранение высокого разрешения необходимо для точного OCR. Изображение извлечено из PDF при 600 DPI. Обычно 300 DPI достаточно для распознавания, но повышенное значение обеспечивает надежность в этом компактном формате.

Подготовка Qwen 3 VL

Для запуска Qwen 3 VL требуются следующие импорты:

torch accelerate pillow torchvision git+https://github.com/huggingface/transformers

Transformers нужно устанавливать из исходного кода на GitHub, поскольку Qwen 3 VL еще не включена в последнюю стабильную версию библиотеки.

Ниже приведен код для загрузки импортов, модели и процессора, а также создания функции для вывода:

from transformers import Qwen3VLForConditionalGeneration, AutoProcessor from PIL import Image import os import time # default: Load the model on the available device(s) model = Qwen3VLForConditionalGeneration.from_pretrained( "Qwen/Qwen3-VL-4B-Instruct", dtype="auto", device_map="auto" ) processor = AutoProcessor.from_pretrained("Qwen/Qwen3-VL-4B-Instruct") def _resize_image_if_needed(image_path: str, max_size: int = 1024) -> str: """Resize image if needed to a maximum size of max_size. Keep the aspect ratio.""" img = Image.open(image_path) width, height = img.size if width <= max_size and height <= max_size: return image_path ratio = min(max_size / width, max_size / height) new_width = int(width * ratio) new_height = int(height * ratio) img_resized = img.resize((new_width, new_height), Image.Resampling.LANCZOS) base_name = os.path.splitext(image_path)[0] ext = os.path.splitext(image_path)[1] resized_path = f"{base_name}_resized{ext}" img_resized.save(resized_path) return resized_path def _build_messages(system_prompt: str, user_prompt: str, image_paths: list[str] | None = None, max_image_size: int | None = None): messages = [ {"role": "system", "content": [{"type": "text", "text": system_prompt}]} ] user_content = [] if image_paths: if max_image_size is not None: processed_paths = [_resize_image_if_needed(path, max_image_size) for path in image_paths] else: processed_paths = image_paths user_content.extend([ {"type": "image", "min_pixels": 512*32*32, "max_pixels": 2048*32*32, "image": image_path} for image_path in processed_paths ]) user_content.append({"type": "text", "text": user_prompt}) messages.append({ "role": "user", "content": user_content, }) return messages def inference(system_prompt: str, user_prompt: str, max_new_tokens: int = 1024, image_paths: list[str] | None = None, max_image_size: int | None = None): messages = _build_messages(system_prompt, user_prompt, image_paths, max_image_size) inputs = processor.apply_chat_template( messages, tokenize=True, add_generation_prompt=True, return_dict=True, return_tensors="pt" ) inputs = inputs.to(model.device) start_time = time.time() generated_ids = model.generate(**inputs, max_new_tokens=max_new_tokens) generated_ids_trimmed = [ out_ids[len(in_ids):] for in_ids, out_ids in zip(inputs.input_ids, generated_ids) ] output_text = processor.batch_decode( generated_ids_trimmed, skip_special_tokens=True, clean_up_tokenization_spaces=False ) end_time = time.time() print(f"Time taken: {end_time - start_time} seconds") return output_text[0] 

Оптическое распознавание символов

Большинство VLMs обучаются на задачах OCR. В технических отчетах о моделях Qwen VL упоминается, что данные для OCR включены в обучающий набор. Для подготовки VLMs к распознаванию модель получает серию изображений с текстом, из которого учится извлекать символы.

Для изображения применяется следующий промпт, аналогичный тому, что использует команда Qwen для OCR в соответствии с руководством по Qwen 3 VL.

user_prompt = "Read all the text in the image."

Тестовое изображение названо example-doc-site-plan-cropped.jpg.

system_prompt = """ You are a helpful assistant that can answer questions and help with tasks. """ user_prompt = "Read all the text in the image." max_new_tokens = 1024 image_paths = ["example-doc-site-plan-cropped.jpg"] output = inference(system_prompt, user_prompt, max_new_tokens, image_paths, max_image_size=1536) print(output) 

Результат:

Plan- og bygningsetaten Dato: 23.01.2014 Bruker: HKN Målestokk 1:500 Ekvidistanse 1m Høydegrunnlag: Oslo lokal Koordinatsystem: EUREF89 - UTM sone 32 © Plan- og bygningsetaten, Oslo kommune Originalformat A3 Adresse: Camilla Colletts vei 15 Gnr/Bnr: . Kartet er sammenstilt for: . PlotID: / Best.nr.: 27661 / Deres ref: Camilla Colletts vei 15 Kommentar: Gjeldende kommunedelplaner: KDP-BB, KDP-13, KDP-5 Kartutsnittet gjelder vertikalinvå 2. I tillegg finnes det regulering i følgende vertikalinvå: (Hvis blank: Ingen øvrige.) Det er ikke registrert naturn mangfold innenfor Se tegnforklaring på eget ark. Beskrivelse: NR: Dato: Revidert dato:

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

Извлечение информации

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

  • Дата — 23.01.2014 в данном случае.
  • Адрес — Camilla Colletts vei 15.
  • Gnr (номер улицы) — пустое поле в тестовом изображении.
  • Målestokk (масштаб) — 1:500.

Используется следующий код:

user_prompt = """ Extract the following information from the image, and reply in JSON format: { "date": "The date of the document. In format YYYY-MM-DD.", "address": "The address mentioned in the document.", "gnr": "The street number (Gnr) mentioned in the document.", "scale": "The scale (målestokk) mentioned in the document.", } If you cannot find the information, reply with None. The return object must be a valid JSON object. Reply only the JSON object, no other text. """ max_new_tokens = 1024 image_paths = ["example-doc-site-plan-cropped.jpg"] output = inference(system_prompt, user_prompt, max_new_tokens, image_paths, max_image_size=1536) print(output) 

Результат:

{ "date": "2014-01-23", "address": "Camilla Colletts vei 15", "gnr": "15", "scale": "1:500" } 

JSON-объект валиден, Qwen успешно извлекла дату, адрес и масштаб. Хотя поле Gnr в изображении пустое, модель предположила его значение из адреса, что в этом случае верно.

Чтобы подтвердить способность возвращать None при отсутствии данных, был запрос на извлечение Bnr (номер здания), которого нет в примере. Код:

user_prompt = """ Extract the following information from the image, and reply in JSON format: { "date": "The date of the document. In format YYYY-MM-DD.", "address": "The address mentioned in the document.", "Bnr": "The building number (Bnr) mentioned in the document.", "scale": "The scale (målestokk) mentioned in the document.", } If you cannot find the information, reply with None. The return object must be a valid JSON object. Reply only the JSON object, no other text. """ max_new_tokens = 1024 image_paths = ["example-doc-site-plan-cropped.jpg"] output = inference(system_prompt, user_prompt, max_new_tokens, image_paths, max_image_size=1536) print(output) 

Получен:

{ "date": "2014-01-23", "address": "Camilla Colletts vei 15", "Bnr": None, "scale": "1:500" }

Таким образом, Qwen корректно указывает на отсутствие информации в документе.

Ограничения визуальных языковых моделей

Стоит отметить, что у визуальных языковых моделей есть свои недостатки. Тестируемое изображение для OCR и извлечения информации относительно простое. Для полной оценки Qwen 3 VL потребовались бы более сложные сценарии, такие как распознавание большего объема текста из длинного документа или извлечение дополнительных метаданных.

Основные текущие ограничения VLMs, по наблюдениям:

  • Пропуск текста при OCR.
  • Медленный вывод.

Пропуск текста VLMs при OCR замечался неоднократно. В таких случаях модель просто игнорирует целую секцию документа, что крайне проблематично, поскольку может упустить ключевые данные для задач вроде поиска по ключевым словам. Причины этого феномена сложны и выходят за рамки статьи, но об этом важно знать при использовании VLMs для OCR.

Кроме того, VLMs требуют значительных вычислительных ресурсов. Тестирование проводилось локально на ПК с небольшой моделью. Проблемы с памятью возникли при обработке изображения 2048×2048, что усложняет работу с крупными документами. Можно представить, насколько ресурсоемко применять VLMs для:

  • Обработки нескольких изображений одновременно (например, 10-страничный документ).
  • Работы с документами в повышенном разрешении.
  • Использования более крупных моделей с большим числом параметров.

Заключение

В статье рассмотрены визуальные языковые модели, начиная с объяснения их необходимости: некоторые задачи требуют не только текста, но и его визуального контекста. Далее показаны примеры задач для VLMs и как Qwen 3 VL с ними справляется. Визуальный модус станет все более значимым в ближайшие годы. До недавнего времени акцент был на чисто текстовых моделях, но для создания еще более мощных систем необходимо интегрировать визуальные возможности, где VLMs сыграют ключевую роль.