跨模態檢索的實作:以圖找文、以文找圖
把圖片與文字放進同一個向量空間,需要注意的細節比想像中多。
跨模態檢索的應用很直接:用文字描述找圖片、用圖片找相似的產品或文件。但實作上有幾個容易踩的坑。
坑一:模態間隙
即使用同一個模型編碼,圖片向量與文字向量在空間中往往形成兩個分離的簇。直接混在一起做相似度比對,同模態的永遠排在前面。
# 診斷:比較同模態與跨模態的平均相似度
sim_tt = mean(cos(t1, t2) for t1, t2 in text_pairs)
sim_ii = mean(cos(i1, i2) for i1, i2 in image_pairs)
sim_ti = mean(cos(t, i) for t, i in matched_pairs)
print(f'文-文 {sim_tt:.3f} 圖-圖 {sim_ii:.3f} 圖-文 {sim_ti:.3f}')
# 若 sim_ti 明顯低於前兩者,就存在模態間隙三種緩解方式
- 分別檢索再融合:文字索引與圖片索引各自搜尋,用 RRF 合併名次。最簡單也最穩定。
- 中心化:分別減去各模態的平均向量,再做比對。
- 加上模態偏移量:對跨模態分數加一個校準常數,用驗證集調整。
實務上第一種最推薦:不需要調參,也不會因為模型換版而失效。
坑二:文字描述的粒度
以文找圖時,使用者的查詢通常很短(「紅色沙發」),而索引時產生的描述可能很長。長短不一致會影響相似度。做法是為每張圖同時索引「短標籤」與「長描述」兩種表示。
{
'image_id': 'p_10023',
'vec_image': [...], # 圖片本身的向量
'vec_short': embed('紅色三人座布沙發'), # 短標籤
'vec_long': embed(full_description), # 詳細描述
}
# 查詢時三路都搜,RRF 合併坑三:評測集的建立
跨模態檢索的評測需要(查詢、正確結果)配對。實務上最省力的來源是既有的產品目錄或圖說——商品名稱與商品圖天然就是配對資料。
以圖找圖的額外考量
- 要區分「視覺相似」與「語意相同」。使用者要的通常是後者。
- 去背與裁切會大幅改變向量,前處理要與索引時一致。
- 加上 metadata 過濾(品類、價格區間)通常比純視覺相似有用得多。
跨模態模型換版時,圖片與文字的向量都要重算。這比純文字 RAG 的重建成本高很多,換版前務必評估。
訂閱後繼續閱讀全文
本篇為訂閱者專屬內容。訂閱後可取得下列權限:
- 解鎖全部內容權限
- 閱讀不限篇數
- 全站移除廣告
月卡
NT$240
開通 30 天
一次付清,開通 30 天
季卡
NT$620
開通 90 天
一次付清,開通 90 天,每天約 NT$7
年卡
NT$2,160
開通 365 天
一次付清,開通 365 天,每天約 NT$6
一次性付款,付款成功後立即開通,到期自動結束,不會再次扣款,也不需要取消訂閱。
立即訂閱
金額均為新臺幣(TWD),即實際扣款金額,不另收手續費
支援信用卡 · Apple Pay · Google Pay · WebATM · ATM 轉帳
購買須知與退款政策