新聞
模型
產品
keyboard_arrow_down
讀取器
讀取URL或搜索為大模型提供更好的依據。
向量模型
世界一流的多模態多語言向量模型。
重排器
世界一流的重排器,最大限度地提高搜索相關性。
深度搜索
搜索、讀取並推理直到找到最佳答案。
更多的
keyboard_arrow_down
分類器
圖片和文本的零樣本和少樣本分類。
切分器
將長文本切分成塊或詞元。

MCP 服務器
添加 mcp.jina.ai 到您的MCP工具箱,讓大模型學用我們的API
open_in_new
API 文檔
為您的AI 編程助手 IDE 或大模型自動生成代碼
open_in_new


公司
keyboard_arrow_down
關於我們
聯繫銷售
實習生項目
加入我們
open_in_new
下載Logo
open_in_new
條款及條件



登錄
login
理解程式碼
這是有意義的可解釋性嗎?
為什麼可能會出現局部對齊?
理論分析
結論
技術博客
一月 07, 2025

文字-圖像全域對比對準與詞符-區塊局部對準

CLIP 可以視覺化 token 與圖像區塊的相似度,但這比較像是一種事後的可解釋性技巧,而不是模型中穩健或官方的「注意力機制」(attention)。
Han Xiao
Han Xiao • 6 分鐘的讀取量

在實驗 ColPali 風格的模型時,我們的一位工程師使用最近發布的 jina-clip-v2 模型創建了一個視覺化呈現。他映射了給定圖文對之間的 token embeddings 和 patch embeddings 的相似度,創建了熱力圖覆蓋層,產生了一些有趣的視覺洞察。

不幸的是,這只是一個啟發式的視覺化——而不是一個明確或有保證的機制。雖然 CLIP 類型的全局對比對齊可能(而且經常會)偶然在 patches 和 tokens 之間創建粗略的局部對齊,但這是一個意外的副作用,而不是模型的刻意目標。讓我解釋原因。

tag理解程式碼

Google Colab

讓我們從高層次來分解程式碼的功能。注意,jina-clip-v2 實際上並沒有提供任何預設的 API 來訪問 token 層級或 patch 層級的 embeddings——這個視覺化需要一些事後修補才能工作。

計算詞級別 embeddings

通過設置 model.text_model.output_tokens = True,調用 text_model(x=...,)[1] 將返回一個 (batch_size, seq_len, embed_dim) 的第二個元素作為 token embeddings。它接收一個輸入句子,用 Jina CLIP tokenizer 進行分詞,然後通過平均對應的 token embeddings 將子詞 tokens 重新組合成"詞"。它通過檢查 token 字串是否以 _ 字符開頭(在基於 SentencePiece 的 tokenizer 中很典型)來檢測新詞的開始。它產生一個詞級別 embeddings 列表和一個詞列表(所以"Dog"是一個 embedding,"and"是一個 embedding 等)。

計算 patch 級別 embeddings

對於圖像塔,vision_model(..., return_all_features=True) 將返回 (batch_size, n_patches+1, embed_dim),其中第一個 token 是 [CLS] token。從中,程式碼提取每個 patch 的 embeddings(即視覺 transformer 的 patch tokens)。然後將這些 patch embeddings 重塑成一個 2D 網格,patch_side × patch_side,接著上採樣以匹配原始圖像解析度。

視覺化詞-patch 相似度

相似度計算和後續的熱力圖生成是標準的"事後"可解釋性技術:選擇一個文本 embedding,計算與每個 patch embedding 的餘弦相似度,然後生成一個熱力圖,顯示哪些 patches 與該特定 token embedding 具有最高相似度。最後,它循環遍歷句子中的每個 token,在左側以粗體突出顯示該 token,並在右側的原始圖像上覆蓋基於相似度的熱力圖。所有幀被編譯成一個動態 GIF。

tag這是有意義的可解釋性嗎?

從純程式碼的角度來看,是的,邏輯是連貫的,並且會為每個 token 產生一個熱力圖。你會得到一系列顯示 patch 相似度的幀,所以腳本"做到了它所說的事情"。

看上面的例子,我們可以看到像 moon 和 branches 這樣的詞似乎與原始圖像中相應的視覺 patches 良好對齊。但這裡的關鍵問題是:這是有意義的對齊,還是我們只是看到一個幸運的巧合?

這是一個更深層的問題。要理解這些注意事項,讓我們回顧一下 CLIP 是如何訓練的:

Diagram of JINA-CLIP-V2 model showing stages from input to output for English and multilingual text processing.
Jina-CLIP v2 結合了文本編碼器(Jina XLM-RoBERTa,561M 參數)和視覺編碼器(EVA02-L14,304M 參數)。右側的每個彩色方塊代表批次中的完整句子或圖像——而不是單個 tokens 或 patches。
  • CLIP 使用全局對比對齊來處理整個圖像和整個文本。在訓練過程中,圖像編碼器產生一個單一向量(池化表示),文本編碼器產生另一個單一向量;CLIP 被訓練使得這些向量在匹配的文本圖像對中相匹配,在其他情況下不匹配。
  • 在"patch X 對應於 token Y"層面上沒有明確的監督。模型並未直接被訓練來突出顯示"圖像的這個區域是狗,那個區域是貓"等。相反,它被教導整個圖像表示應該與整個文本表示相匹配。
  • 因為 CLIP 的架構在圖像端是 Vision Transformer,在文本端是文本 transformer——兩者形成獨立的編碼器——所以沒有原生地將 patches 與 tokens 對齊的交叉注意力模組。相反,你在每個塔中只得到純自注意力,再加上最終的全局圖像或文本 embeddings 投影。

簡而言之,這是一個啟發式的視覺化。任何給定的 patch embedding 可能與特定的 token embedding 接近或遠離,這有點是自然形成的。這更像是一個事後可解釋性技巧,而不是模型的穩健或官方的"注意力"。

tag為什麼可能會出現局部對齊?

那麼,為什麼我們有時會發現詞-patch 層級的局部對齊?事情是這樣的:儘管 CLIP 是在全局圖像-文本對比目標上訓練的,它仍然使用自注意力(在基於 ViT 的圖像編碼器中)和 transformer 層(用於文本)。在這些自注意力層中,圖像表示的不同部分可以相互作用,就像文本表示中的詞一樣。通過在大規模圖像-文本數據集上的訓練,模型自然會發展出內部潛在結構,幫助它將整體圖像與其相應的文本描述匹配。

局部對齊可能在這些潛在表示中出現,至少有兩個原因:

  1. 共現模式:如果模型看到許多"狗"的圖像旁邊有許多"貓"的圖像(通常用這些詞標記或描述),它可以學習大致對應於這些概念的潛在特徵。因此,"狗"的 embedding 可能會接近於描繪狗形狀或紋理的局部 patches。這在 patch 層面上並非明確監督,而是從狗圖像/文本對的重複關聯中自然產生的。
  2. 自注意力:在 Vision Transformer 中,各個圖像塊之間會相互關注。顯著的圖像塊(如狗的臉部)可能會形成一個一致的潛在「特徵」,因為模型試圖為整個場景產生一個全局準確的表示。如果這有助於最小化整體對比損失,這種特徵就會被強化。

tag理論分析

CLIP 的對比學習目標是要最大化匹配的圖文對之間的餘弦相似度,同時最小化不匹配對之間的相似度。假設文本和圖像編碼器分別生成 token 和圖像塊嵌入:

ui=1M∑m=1Mui,m,vi=1K∑k=1Kvi,k\mathbf{u}_i = \frac{1}{M} \sum_{m=1}^M \mathbf{u}_{i,m}, \quad \mathbf{v}_i = \frac{1}{K} \sum_{k=1}^K \mathbf{v}_{i,k}ui​=M1​m=1∑M​ui,m​,vi​=K1​k=1∑K​vi,k​

全局相似度可以表示為局部相似度的聚合:

sim(ui,vi)=1MK∑m=1M∑k=1Kui,m⊤vi,k\text{sim}(\mathbf{u}_i, \mathbf{v}_i) = \frac{1}{MK} \sum_{m=1}^M \sum_{k=1}^K \mathbf{u}_{i,m}^\top \mathbf{v}_{i,k}sim(ui​,vi​)=MK1​m=1∑M​k=1∑K​ui,m⊤​vi,k​

當特定的 token-patch 對在訓練數據中經常共同出現時,模型通過累積梯度更新來強化它們之間的相似度:

Δum∗∝∑c=1Cvk∗(c),Δvk∗∝∑c=1Cum∗(c)\Delta \mathbf{u}_{m^*} \propto \sum_{c=1}^C \mathbf{v}_{k^*}^{(c)}, \quad \Delta \mathbf{v}_{k^*} \propto \sum_{c=1}^C \mathbf{u}_{m^*}^{(c)}Δum∗​∝c=1∑C​vk∗(c)​,Δvk∗​∝c=1∑C​um∗(c)​

,其中 CCC 是共同出現的次數。這導致 um∗⊤vk∗\mathbf{u}_{m^*}^\top \mathbf{v}_{k^*}um∗⊤​vk∗​ 顯著增加,促進了這些配對的更強局部對齊。然而,對比損失會在所有 token-patch 對之間分配梯度更新,限制了特定配對更新的強度:

∂L∂um∝−∑k=1Kvk⋅(exp⁡(u⊤v/τ)∑j=1Nexp⁡(u⊤vj/τ))\frac{\partial \mathcal{L}}{\partial \mathbf{u}_{m}} \propto -\sum_{k=1}^K \mathbf{v}_k \cdot \left( \frac{\exp(\mathbf{u}^\top \mathbf{v} / \tau)}{\sum_{j=1}^N \exp(\mathbf{u}^\top \mathbf{v}_j / \tau)} \right)∂um​∂L​∝−k=1∑K​vk​⋅(∑j=1N​exp(u⊤vj​/τ)exp(u⊤v/τ)​)

這防止了個別 token-patch 相似度的顯著強化。

tag結論

CLIP 的 token-patch 視覺化利用了文本和圖像表示之間偶然的、自發的對齊。這種對齊雖然很有趣,但源於 CLIP 的全局對比訓練,缺乏精確且可靠的可解釋性所需的結構穩健性。產生的視覺化結果經常表現出噪聲和不一致性,限制了其在深入解釋應用中的實用性。

What is ColBERT and Late Interaction and Why They Matter in Search?
Jina AI's ColBERT on Hugging Face has set Twitter abuzz, bringing a fresh perspective to search with its 8192-token capability. This article unpacks the nuances of ColBERT and ColBERTv2, showcasing their innovative designs and why their late interaction feature is a game-changer for search.
Jina AIHan Xiao

像 ColBERT 和 ColPali 這樣的後期交互模型通過在架構上嵌入明確的、細粒度的對齊來解決文本 token 和圖像塊之間的這些限制。通過獨立處理模態並在後期階段執行有針對性的相似度計算,這些模型確保每個文本 token 都能與相關的圖像區域產生有意義的關聯。

類別:
技術博客
rss_feed
辦公室
location_on
加利福尼亞州桑尼維爾
710 Lakeway Dr, Ste 200, 桑尼維爾, CA 94085, 美國
location_on
德國柏林(總部)
Prinzessinnenstraße 19-20,10969 柏林,德國
location_on
中國北京
中國北京市海淀區西大街48號6號樓5層
location_on
中國深圳
中國深圳市賦安科技大廈4樓402
搜索底座
讀取器
向量模型
重排器
深度搜索
分類器
切分器
獲取 Jina API 密鑰
速率限制
API 狀態
公司
關於我們
聯繫銷售
新聞
實習生項目
加入我們
open_in_new
下載Logo
open_in_new
條款
安全
條款及條件
隱私
管理 Cookie
email
Jina AI © 2020-2025.