Transformers documentation
ColQwen2
このモデルは2024年6月27日にHF papersで公開され、2025年6月2日にHugging Face Transformersに貢献されました。
ColQwen2
ColQwen2 は、視覚的特徴を分析して文書を検索することを目的に設計された ColPali モデルのバリアントです。テキスト抽出や OCR に大きく依存する従来のシステムとは異なり、ColQwen2 は各ページを画像として扱います。Qwen2-VL バックボーンを使用して、テキストだけでなく、レイアウト、表、チャート、その他の視覚的要素も捉え、ペアワイズなレイトインタラクション類似度スコアを計算して検索に使用できる詳細なマルチベクトル埋め込みを生成します。これにより、文書に対するより包括的な理解が可能になり、より効率的かつ正確な検索を実現します。
このモデルは、@tonywu71(ILLUIN Technology)と@yonigozlan(HuggingFace)によって提供されました。
VidoreのHf-native ColVision Modelsコレクションに、すべてのオリジナルのColPaliチェックポイントを見つけることができます。
ColQwen2の画像検索での使用方法のより多くの例については、右側のサイドバーにあるColQwen2モデルをクリックしてください。
import requests
import torch
from PIL import Image
from transformers import ColQwen2ForRetrieval, ColQwen2Processor
from transformers.utils.import_utils import is_flash_attn_2_available
# Load the model and the processor
model_name = "vidore/colqwen2-v1.0-hf"
model = ColQwen2ForRetrieval.from_pretrained(
model_name,
device_map="auto", # "cpu", "cuda", "xpu" or "mps" for Apple Silicon
attn_implementation="flash_attention_2" if is_flash_attn_2_available() else "sdpa",
)
processor = ColQwen2Processor.from_pretrained(model_name)
# The document page screenshots from your corpus
url1 = "https://upload.wikimedia.org/wikipedia/commons/8/89/US-original-Declaration-1776.jpg"
url2 = "https://upload.wikimedia.org/wikipedia/commons/thumb/4/4c/Romeoandjuliet1597.jpg/500px-Romeoandjuliet1597.jpg"
images = [
Image.open(requests.get(url1, stream=True).raw),
Image.open(requests.get(url2, stream=True).raw),
]
# The queries you want to retrieve documents for
queries = [
"When was the United States Declaration of Independence proclaimed?",
"Who printed the edition of Romeo and Juliet?",
]
# Process the inputs
inputs_images = processor(images=images).to(model.device)
inputs_text = processor(text=queries).to(model.device)
# Forward pass
with torch.no_grad():
image_embeddings = model(**inputs_images).embeddings
query_embeddings = model(**inputs_text).embeddings
# Score the queries against the images
scores = processor.score_retrieval(query_embeddings, image_embeddings)
print("Retrieval scores (query x image):")
print(scores)PILでの画像読み込みに問題がある場合は、以下のコードを使用してダミー画像を作成できます。
images = [
Image.new("RGB", (128, 128), color="white"),
Image.new("RGB", (64, 32), color="black"),
]Quantization は、重みを低精度で表現することで、大規模モデルのメモリ負荷を軽減します。利用可能な Quantization バックエンドの詳細については、Quantization の概要を参照してください。
以下の例では、bitsandbytesを使用して重みをint4に量子化します。
import requests
import torch
from PIL import Image
from transformers import BitsAndBytesConfig, ColQwen2ForRetrieval, ColQwen2Processor
model_name = "vidore/colqwen2-v1.0-hf"
# 4-bit quantization configuration
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_use_double_quant=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.float16,
)
model = ColQwen2ForRetrieval.from_pretrained(
model_name,
quantization_config=bnb_config,
device_map="auto",
).eval()
processor = ColQwen2Processor.from_pretrained(model_name)
url1 = "https://upload.wikimedia.org/wikipedia/commons/8/89/US-original-Declaration-1776.jpg"
url2 = "https://upload.wikimedia.org/wikipedia/commons/thumb/4/4c/Romeoandjuliet1597.jpg/500px-Romeoandjuliet1597.jpg"
images = [
Image.open(requests.get(url1, stream=True).raw),
Image.open(requests.get(url2, stream=True).raw),
]
queries = [
"When was the United States Declaration of Independence proclaimed?",
"Who printed the edition of Romeo and Juliet?",
]
# Process the inputs
inputs_images = processor(images=images, return_tensors="pt").to(model.device)
inputs_text = processor(text=queries, return_tensors="pt").to(model.device)
# Forward pass
with torch.no_grad():
image_embeddings = model(**inputs_images).embeddings
query_embeddings = model(**inputs_text).embeddings
# Score the queries against the images
scores = processor.score_retrieval(query_embeddings, image_embeddings)
print("Retrieval scores (query x image):")
print(scores)ColQwen2.5のチェックポイントも使用できます。ColQwen2アーキテクチャと互換性があるチェックポイントです。このモデルのバージョンでは、バックボーンとしてQwen2_5_VLを使用しています。
from transformers import ColQwen2ForRetrieval, ColQwen2Processor
from transformers.utils.import_utils import is_flash_attn_2_available
model_name = "Sahil-Kabir/colqwen2.5-v0.2-hf" # An existing compatible checkpoint
model = ColQwen2ForRetrieval.from_pretrained(
model_name,
device_map="auto",
attn_implementation="flash_attention_2" if is_flash_attn_2_available() else "sdpa"
)
processor = ColQwen2Processor.from_pretrained(model_name)注記
score_retrieval()は、第1次元がクエリの数、第2次元が画像の数である2次元テンソルを返します。スコアが高いほど、クエリと画像の類似度が高いことを示します。- ColPali とは異なり、ColQwen2 は任意の画像解像度とアスペクト比をサポートします。そのため、画像は固定サイズの正方形にリサイズされません。これにより、元の入力シグナルのより多くの情報が保持されます。
- より大きな入力画像は、より長いマルチベクトル埋め込みを生成するため、ユーザーはパフォーマンスとメモリ使用量のバランスを調整するために画像の解像度を調整できます。
ColQwen2Config
class transformers.ColQwen2Config
< source >( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonevlm_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Noneembedding_dim: int = 128initializer_range: float = 0.02 )
これはColqwen2Modelの設定を保存するための設定クラスです。指定された引数に基づいてColqwen2モデルをインスタンス化し、モデルのアーキテクチャを定義するために使用されます。デフォルト値で設定をインスタンス化すると、vidore/colqwen2-v1.0-hfと類似した設定が得られます。
設定オブジェクトはPreTrainedConfigを継承し、モデルの出力を制御するために使用できます。詳細については、PreTrainedConfigのドキュメントを参照してください。
ColQwen2Processor
class transformers.ColQwen2Processor
< source >( image_processor = Nonetokenizer = Nonechat_template = Nonevisual_prompt_prefix: str | None = Nonequery_prefix: str | None = None**kwargs )
パラメータ
- image_processor (
Qwen2VLImageProcessor) — 画像プロセッサは必須の入力です。 - tokenizer (
Qwen2Tokenizer) — トークナイザーは必須の入力です。 - chat_template (
str) — チャット内のメッセージのリストをトークン化可能な文字列に変換するための Jinja テンプレート。 - visual_prompt_prefix (
str、任意、デフォルトは"<|im_start|>user\n<|vision_start|><|image_pad|><|vision_end|>Describe the image.<|im_end|><|endoftext|>") — トークン化され、画像トークンの前に付加される文字列です。 - query_prefix (
str、任意、デフォルトは"Query -- "): クエリに使用するプレフィックス。
画像プロセッサとトークナイザーを単一のプロセッサにラップするColQwen2Processorを構築します。
ColQwen2Processor は、Qwen2VLImageProcessor と Qwen2Tokenizer のすべての機能を提供します。詳細については、~Qwen2VLImageProcessor および ~Qwen2Tokenizer を参照してください。
__call__
< source >( images: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor'], NoneType] = Nonetext: str | list[str] | list[list[str]] = None**kwargs: *<class 'transformers.models.colqwen2.processing_colqwen2.ColQwen2ProcessorKwargs'> ) → BatchFeature
パラメータ
- images (
Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]], 任意) — 前処理対象の画像です。ピクセル値が 0 から 255 の範囲にある単一の画像またはバッチを想定しています。ピクセル値が 0 から 1 の範囲にある画像を渡す場合は、do_rescale=Falseを設定してください。 - text (
Union[str, list[str], list[list[str]]]、省略可) — エンコード対象のシーケンスまたはシーケンスのバッチです。各シーケンスは文字列、または文字列のリスト(事前トークン化済み文字列)であることができます。事前トークン化済みの入力を渡す場合は、バッチ入力との曖昧さを避けるためにis_split_into_words=Trueを設定してください。 - return_tensors (
strまたは TensorType, 省略可) — 設定すると、特定のフレームワークのテンソルを返します。使用可能な値は以下の通りです:'pt': PyTorchのtorch.Tensorオブジェクトを返します。'np': NumPyのnp.ndarrayオブジェクトを返します。
- **kwargs (ProcessingKwargs、任意) — 各モダリティ(テキスト、画像、動画、音声)の追加処理オプション。モデル固有のパラメータは上記にリストされています。サポートされている引数の完全なリストについては、TypedDictクラスを参照してください。
戻り値
以下のフィールドを持つBatchFeature:
- input_ids — モデルに与えるトークン ID のリスト。
textがNoneでない場合に返されます。suffixが指定されている場合、input_idsにはサフィックスの input ids も含まれます。 - attention_mask — モデルがどのトークンに注意を払うべきかを指定するインデックスのリスト(
return_attention_mask=Trueの場合、またはself.model_input_namesに“attention_mask”が含まれておりtextがNoneでない場合)。 - pixel_values — モデルに渡すピクセル値。
imagesがNoneでない場合に返されます。 - labels —
suffixがNoneでない場合に、トレーニングと互換性のあるラベル
ColQwen2ForRetrieval
class transformers.ColQwen2ForRetrieval
< source >( config: ColQwen2Config )
パラメータ
- config (ColQwen2Config) — モデルのパラメータをすべて含むモデル設定クラスです。設定ファイルで初期化しても、モデルに関連する重みは読み込まれず、設定のみが読み込まれます。モデルの重みをロードするには、from_pretrained() メソッドを参照してください。
ColPaliのアプローチに従い、ColQwen2はVLMを活用して、文書検索のために文書画像(「スクリーンショット」)から直接効率的なマルチベクトル埋め込みを構築します。このモデルは、ColBERTで導入された遅延相互作用(late interaction)手法を用いて、これらの文書埋め込みと対応するクエリ埋め込みの類似度を最大化するように学習されます。
ColQwen2を使用することで、文書のテキストと視覚的な内容(レイアウト、チャートなど)の両方を考慮できる単一のモデルにより、複雑で脆弱になりがちなレイアウト認識やOCRパイプラインの必要性を排除できます。
ColQwen2はColVisionモデルファミリーの一部であり、ColPaliとともに以下の論文で紹介されました: ColPali: Efficient Document Retrieval with Vision Language Models。
このモデルは PreTrainedModel を継承しています。すべてのモデルに実装されている汎用的なメソッド(ダウンロードや保存、入力埋め込みのリサイズ、ヘッドのプルーニングなど)については、スーパークラスのドキュメントを参照してください。
このモデルは、PyTorchのtorch.nn.Moduleのサブクラスでもあります。 通常のPyTorch Moduleとして使用し、一般的な使用方法や動作に関する詳細については、PyTorchのドキュメントを参照してください。
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.LongTensor] = Nonepast_key_values: transformers.cache_utils.Cache | None = Nonelabels: typing.Optional[torch.LongTensor] = Noneinputs_embeds: typing.Optional[torch.FloatTensor] = Noneuse_cache: bool | None = Noneoutput_attentions: bool | None = Noneoutput_hidden_states: bool | None = Nonereturn_dict: bool | None = Nonepixel_values: typing.Optional[torch.Tensor] = Noneimage_grid_thw: typing.Optional[torch.LongTensor] = None**kwargs ) → ColQwen2ForRetrievalOutput or tuple(torch.FloatTensor)
パラメータ
- input_ids (
torch.LongTensorの形状(batch_size, sequence_length), 、省略可) — 語彙における入力シーケンスのトークンインデックスです。デフォルトではパディングは無視されます。インデックスはAutoTokenizerを使用して取得できます。詳細については、PreTrainedTokenizer.encode()およびPreTrainedTokenizer.call()を参照してください。
- attention_mask (
torch.Tensorの形状(batch_size, sequence_length), 、任意) — パディングトークンのインデックスに対するアテンションを回避するためのマスク。[0, 1]:- マスクされていないトークンに対して1
- マスクされたトークンに対しては 0 です。
- position_ids (
torch.LongTensorの形状(batch_size, sequence_length), 、任意) — 各入力シーケンスのトークンが位置埋め込み内で占める位置のインデックス。範囲[0, config.n_positions - 1]. - past_key_values (
~cache_utils.Cache, 省略可) — 逐次デコードを高速化するために使用できる、事前計算された隠れ状態(自己アテンションブロックおよびクロスアテンションブロックのキーとバリュー)。通常、これはデコードの以前の段階でモデルが返したpast_key_valuesであり、use_cache=Trueまたはconfig.use_cache=True.入力として許可されるのは Cache インスタンスのみです。kv cache ガイドを参照してください。
past_key_valuesが渡されない場合、デフォルトで DynamicCache が初期化されます。モデルは、入力として与えられたのと同じキャッシュ形式を出力します。
past_key_valuesを使用する場合、すべてのinput_ids(形状(batch_size, sequence_length))ではなく、このモデルに過去のキー・バリュー状態が与えられていない未処理のinput_ids(形状(batch_size, unprocessed_length))のみを入力することになります。 - labels (
torch.LongTensor、shape(batch_size, sequence_length)、任意) — マスク言語モデリング損失を計算するためのラベルです。インデックスは[0, ..., config.vocab_size]の範囲内であるか、-100 である必要があります(input_idsの docstring を参照)。インデックスが-100に設定されたトークンは無視(マスク)され、損失は[0, ..., config.vocab_size]の範囲内のラベルを持つトークンに対してのみ計算されます。 - inputs_embeds (
torch.FloatTensor、形状(batch_size, sequence_length, hidden_size)、任意) —input_idsを渡す代わりに、埋め込み表現を直接渡すこともできます。これは、モデル内部の埋め込みルックアップ行列よりも、input_idsのインデックスを対応するベクトルに変換する方法をより細かく制御したい場合に有用です。 - use_cache (
bool、任意) —Trueに設定すると、past_key_valuesのキーバリュー状態が返され、デコーディングの高速化に利用できます(past_key_valuesを参照)。 - output_attentions (
bool, 省略可) — すべてのアテンション層のアテンションテンソルを返すかどうかを指定します。詳細は、返されるテンソルのattentionsを参照してください。 - output_hidden_states (
bool, 省略可) — すべての層の hidden states を返すかどうかを指定します。詳細は、返されるテンソルのhidden_statesを参照してください。 - return_dict (
bool, 任意) — プレーンなタプルではなく ModelOutput を返すかどうか。 - pixel_values (
torch.Tensor、形状(batch_size, num_channels, image_size, image_size)、任意) — 入力画像に対応するテンソルです。ピクセル値は Qwen2VLImageProcessor を使用して取得できます。詳細は Qwen2VLImageProcessor.call() を参照してください(ColQwen2Processor は画像の処理に Qwen2VLImageProcessor を使用します)。 - image_grid_thw (
torch.LongTensor、形状(num_images, 3)、任意) — LLM における各画像のフィーチャー形状の時間軸、高さ、幅です。
戻り値
ColQwen2ForRetrievalOutput または tuple(torch.FloatTensor)
ColQwen2ForRetrievalOutput、または torch.FloatTensor のタプル(return_dict=False が渡された場合、または config.return_dict=False の場合)。設定(ColQwen2Config)や入力に応じて、さまざまな要素で構成されます。
ColQwen2ForRetrieval の forward メソッドは、__call__ という特殊メソッドをオーバーライドします。
この関数内でフォワードパスの手順を定義する必要がありますが、その後、この関数ではなく
Moduleインスタンスを呼び出すべきです。前者は前処理と後処理の実行を適切に処理するのに対し、後者はそれらを黙って無視するためです。
loss (
torch.FloatTensor、shape(1,)、optional、labelsが指定された場合に返されます) — 言語モデリングの損失(次のトークン予測用)。embeddings (
torch.FloatTensor、形状(batch_size, sequence_length, hidden_size)) — モデルの埋め込みです。past_key_values (
Cache、任意、use_cache=Trueが渡された場合またはconfig.use_cache=Trueの場合に返されます) — Cache のインスタンスです。詳細については、kv cache ガイドを参照してください。逐次デコーディングを高速化するために使用できる(
past_key_values入力参照)、事前計算済みの隠れ状態(自己注意ブロックのキーとバリュー)が含まれます。hidden_states (
tuple[torch.FloatTensor]、optional、output_hidden_states=Trueが渡された場合またはconfig.output_hidden_states=Trueの場合に返される) —torch.FloatTensorのタプル(埋め込み層を持つモデルの場合、埋め込みの出力用が 1 つ、各層の出力用が 1 つずつ)で、形状は(batch_size, sequence_length, hidden_size)です。各層の出力におけるモデルのHidden-states、および任意の初期埋め込み出力。
attentions (
tuple[torch.FloatTensor]、optional、output_attentions=Trueが渡された場合またはconfig.output_attentions=Trueの場合に返されます) —torch.FloatTensorのタプル(各レイヤーごとに1つ)、形状は(batch_size, num_heads, sequence_length, sequence_length)。アテンションのsoftmax後のアテンション重み。自己アテンションヘッド内で加重平均を計算するために使用されます。