Transformers documentation
ColPali
このモデルは2024年6月27日にHF papersで公開され、2024年12月17日にHugging Face Transformersに貢献されました。
ColPali
ColPali は、視覚的特徴を分析してドキュメントを検索するために設計されたモデルです。テキスト抽出や OCR に大きく依存する従来のシステムとは異なり、ColPali は各ページを画像として扱います。Paligemma-3B を使用して、テキストだけでなく、レイアウト、表、チャート、その他の視覚的要素も捉え、ペアワイズな遅延相互作用類似度スコアを計算して検索に使用できる詳細なマルチベクトル埋め込みを生成します。これにより、ドキュメントに対するより包括的な理解が可能になり、より効率的かつ正確な検索が実現します。
このモデルは、@tonywu71(ILLUIN Technology)と@yonigozlan(HuggingFace)によって提供されました。
VidoreのHf-native ColVision Modelsコレクションに、すべてのオリジナルのColPaliチェックポイントを見つけることができます。
ColPali を画像検索に活用するその他の例については、右側のサイドバーにある ColPali モデルをクリックしてください。
import requests
import torch
from PIL import Image
from transformers import ColPaliForRetrieval, ColPaliProcessor
# Load the model and the processor
model_name = "vidore/colpali-v1.3-hf"
model = ColPaliForRetrieval.from_pretrained(
model_name,
device_map="auto", # "cpu", "cuda", "xpu", or "mps" for Apple Silicon
)
processor = ColPaliProcessor.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, ColPaliForRetrieval, ColPaliProcessor
model_name = "vidore/colpali-v1.3-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 = ColPaliForRetrieval.from_pretrained(
model_name,
quantization_config=bnb_config,
device_map="auto",
)
processor = ColPaliProcessor.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)注記
score_retrieval()は、第1次元がクエリの数、第2次元が画像の数である2次元テンソルを返します。スコアが高いほど、クエリと画像の類似度が高いことを示します。
ColPaliConfig
class transformers.ColPaliConfig
< 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 = 128 )
これはColpaliModelの設定を保存するための設定クラスです。指定された引数に基づいてColpaliモデルをインスタンス化し、モデルのアーキテクチャを定義するために使用されます。デフォルト値で設定をインスタンス化すると、vidore/colpali-v1.2と類似した設定が得られます。
設定オブジェクトはPreTrainedConfigを継承し、モデルの出力を制御するために使用できます。詳細については、PreTrainedConfigのドキュメントを参照してください。
ColPaliProcessor
class transformers.ColPaliProcessor
< source >( image_processor = Nonetokenizer = Nonechat_template = Nonevisual_prompt_prefix: str = 'Describe the image.'query_prefix: str = 'Question: ' )
パラメータ
- image_processor (
SiglipImageProcessor) — 画像プロセッサは必須の入力です。 - tokenizer (
tokenizer_class) — トークナイザーは必須の入力です。 - chat_template (
str) — チャット内のメッセージのリストをトークン化可能な文字列に変換するための Jinja テンプレート。 - visual_prompt_prefix (
str、省略可能、デフォルトは"Describe the image.") — トークン化されて画像トークンの前に付加される文字列です。 - query_prefix (
str、任意、デフォルトは"Question -- "): クエリに使用するプレフィックス。
画像プロセッサとトークナイザーを単一のプロセッサにラップするColPaliProcessorを構築します。
ColPaliProcessor は、SiglipImageProcessor と tokenizer_class のすべての機能を提供します。詳細については、~SiglipImageProcessor および ~tokenizer_class を参照してください。
__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.colpali.processing_colpali.ColPaliProcessorKwargs'> ) → 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でない場合に、トレーニングと互換性のあるラベル
ColPaliForRetrieval
クラス transformers.ColPaliForRetrieval
< source >( config: ColPaliConfig )
パラメータ
- config (ColPaliConfig) — モデルのパラメータをすべて含むモデル設定クラスです。設定ファイルで初期化しても、モデルに関連する重みは読み込まれず、設定のみが読み込まれます。モデルの重みをロードするには、from_pretrained() メソッドを参照してください。
ColPaliアーキテクチャは、VLMを活用して、文書検索のために文書画像(「スクリーンショット」)から直接効率的なマルチベクトル埋め込みを構築します。このモデルは、ColBERTで導入された遅延相互作用(late interaction)手法を用いて、これらの文書埋め込みと対応するクエリ埋め込みの類似度を最大化するように学習されます。
ColPaliを使用することで、単一のモデルが文書のテキストと視覚的な内容(レイアウト、チャートなど)の両方を考慮できるため、複雑で脆弱になりがちなレイアウト認識やOCRのパイプラインの必要性がなくなります。
ColPaliは、以下の論文で初めて紹介されたColVisionモデルファミリーの一部です: ColPali: Efficient Document Retrieval with Vision Language Models。
このモデルは PreTrainedModel を継承しています。すべてのモデルに実装されている汎用的なメソッド(ダウンロードや保存、入力埋め込みのリサイズ、ヘッドのプルーニングなど)については、スーパークラスのドキュメントを参照してください。
このモデルは、PyTorchのtorch.nn.Moduleのサブクラスでもあります。 通常のPyTorch Moduleとして使用し、一般的な使用方法や動作に関する詳細については、PyTorchのドキュメントを参照してください。
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = Nonepixel_values: typing.Optional[torch.FloatTensor] = Noneattention_mask: typing.Optional[torch.Tensor] = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → ColPaliForRetrievalOutput or tuple(torch.FloatTensor)
パラメータ
- input_ids (
torch.LongTensorの形状(batch_size, sequence_length), 、省略可) — 語彙における入力シーケンスのトークンインデックスです。デフォルトではパディングは無視されます。インデックスはAutoTokenizerを使用して取得できます。詳細については、PreTrainedTokenizer.encode()およびPreTrainedTokenizer.call()を参照してください。
- pixel_values (
torch.FloatTensor、形状(batch_size, num_channels, image_size, image_size)、任意) — 入力画像に対応するテンソルです。ピクセル値はimage_processor_classを使用して取得できます。詳細はimage_processor_class.__call__を参照してください(processor_classは画像の処理にimage_processor_classを使用します)。 - attention_mask (
torch.Tensorの形状(batch_size, sequence_length), 、任意) — パディングトークンのインデックスに対するアテンションを回避するためのマスク。[0, 1]:- マスクされていないトークンに対して1
- マスクされたトークンに対しては 0 です。
戻り値
ColPaliForRetrievalOutput または tuple(torch.FloatTensor)
ColPaliForRetrievalOutput、またはtorch.FloatTensorのタプル(return_dict=Falseが渡された場合、またはconfig.return_dict=Falseの場合)。設定(None)と入力に応じて、さまざまな要素で構成されます。
ColPaliForRetrievalの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後のアテンション重み。自己アテンションヘッド内で加重平均を計算するために使用されます。
image_hidden_states (
torch.FloatTensor、任意) — サイズが(batch_size, num_images, sequence_length, hidden_size)のtorch.FloatTensor。 ビジュアルエンコーダーによって生成されたモデルの、最後の隠れ状態を投影した後のimage_hidden_states。