第2節:多模態的核心問題(多模態大模型基礎教程)

前言

本節課我們聚焦多模態大模型最核心的問題:文本、圖像、語音這些“不同語言”的信息,是怎么被模型“翻譯”并互相理解的?我們從“差異”入手,一步步搞懂其中的邏輯。

一、先搞懂:什么是“模態差異”?

生活中,我們描述同一件事(比如“一只貓”)可以用多種方式:

  • 文本:“一只黑色的貓坐在沙發上”(一串有順序的文字符號);
  • 圖像:一張貓的照片(二維像素矩陣,每個點是顏色值);
  • 語音:“喵~”(一段聲波信號,隨時間變化的頻率/振幅)。

這些不同的“信息載體”就是“模態”,而它們的“差異”是多模態模型最頭疼的問題。具體來說,差異體現在三個方面:

  1. 結構差異
    文本是“序列結構”(像排隊的人,有先后順序);
    圖像是“二維網格結構”(像棋盤,有行和列);
    語音是“時間序列結構”(像流水,隨時間連續變化)。
    模型處理序列和網格的“思路”完全不同,就像用漢語語法去分析英語句子,肯定行不通。

  2. 語義密度差異
    文本的語義很“精準”:“貓”這個詞直接指向特定動物;
    圖像的語義很“模糊”:一張貓的照片里,除了貓還有沙發、地板,模型需要“過濾噪音”才能抓住核心;
    語音的語義可能“依賴上下文”:同樣的“喵”,可能是撒嬌也可能是警告,需要結合語氣判斷。

  3. 數據規模差異
    文本數據(如書籍、網頁)容易獲取且規模極大;
    高質量圖像/視頻數據(如標注清晰的照片)獲取成本高;
    語音數據(尤其是多語言/方言)規模相對較小。
    模型“學”得多少不一樣,也會導致不同模態的“表達能力”有差距。

二、第一步:把“原始信息”變成模型能懂的“特征”

模型無法直接處理原始數據(比如文本的文字、圖像的像素),必須先把它們“翻譯”成統一的“數字語言”——這就是“單模態特征提取”。

簡單說,“特征”就是原始數據的“濃縮版”:比如一張貓的照片,原始數據是幾百萬個像素值(無用信息多),特征提取后會變成一串數字(比如768個數字組成的“向量”),這串數字只保留“貓的關鍵信息”(比如耳朵形狀、毛色、姿態)。

不同模態的特征提取工具(舉例):
  1. 文本特征提取
    用“詞向量”或“Transformer模型”(如BERT)。
    例:“貓”這個詞,會被變成一串數字(比如 [0.2, -0.5, 1.3, ...],這串數字能代表“貓”的語義——和“狗”的向量距離遠,和“ kitten(小貓)”的向量距離近。

  2. 圖像特征提取
    用“卷積神經網絡(CNN)”或“視覺Transformer(ViT)”。
    例:一張貓的照片,通過CNN處理后,會變成一串數字(比如 [0.8, 0.1, -0.3, ...]),這串數字能代表“貓的視覺特征”(比如“有尾巴”“耳朵尖”)。

  3. 語音特征提取
    用“梅爾頻譜”+“語音模型(如Wav2Vec)”。
    例:“喵”的叫聲,會被轉化為代表“頻率變化”的向量,保留“貓叫”的聲音特征。

三、核心難題:如何讓不同模態的“特征”能“對話”?

即便我們把文本、圖像都變成了向量,它們仍然可能“不在一個頻道”:比如“貓”的文本向量和貓的圖像向量,可能在模型眼里毫無關系——這就需要“模態對齊”。

“模態對齊”的目標:讓同一語義的不同模態特征,在“向量空間”里靠得近;不同語義的特征離得遠。
打個比方:假設我們把所有特征向量想象成“地圖上的點”,“貓”的文本向量和貓的圖像向量應該在地圖上“挨在一起”,而和“狗”的向量離得遠。

模態對齊的兩種主流方式:
  1. 早期對齊(Early Fusion):“先統一,再處理”
    思路:在特征提取階段就把不同模態“拉到同一空間”。
    例:CLIP模型(我們后面會詳細講)就是典型的早期對齊:

    • 文本用“文本編碼器”提取特征,圖像用“圖像編碼器”提取特征;
    • 兩個編碼器在訓練時被“強迫”學習同一套“向量規則”——比如“貓”的文本向量和貓的圖像向量,計算“相似度”時得分必須高。
  2. 晚期對齊(Late Fusion):“先各自處理,再融合”
    思路:先分別提取文本、圖像的特征(可能在不同空間),最后在模型的“后期層”通過“交叉注意力”等方式融合。
    例:視覺問答模型(VQA):

    • 先單獨提取圖像特征(“圖里有什么”)和問題文本特征(“圖中有幾只貓?”);
    • 最后一層用交叉注意力:讓文本特征“關注”圖像中“貓”的區域,圖像特征“回應”文本中的“數量”問題,最終融合出答案。
四、代碼示例:用CLIP直觀感受“模態對齊”

我們用最簡單的代碼,看看經過“早期對齊”的模型,如何讓文本和圖像“對話”。

目標:輸入一張貓的圖片和3個文本描述(“a cat”“a dog”“a bird”),模型會計算圖片與每個文本的“相似度”,相似度最高的就是匹配結果。

步驟1:安裝工具庫
# 安裝Hugging Face的transformers庫(模型工具)和pytorch(計算框架)  
pip install transformers torch pillow  
步驟2:加載模型和處理器

CLIP是經過“早期對齊”訓練的模型,它的文本編碼器和圖像編碼器已經“懂同一種語言”:

from transformers import CLIPModel, CLIPProcessor  
import torch  
from PIL import Image  # 加載預訓練模型和處理器(處理器負責把原始數據轉成模型能讀的格式)  
model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32")  
processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32")  
步驟3:準備輸入(圖像+文本)
# 準備一張貓的圖片(可以用自己的圖片,路徑替換成實際地址)  
image = Image.open("cat.jpg")  # 假設當前文件夾有一張貓的照片  # 準備3個候選文本描述  
texts = ["a cat", "a dog", "a bird"]  
步驟4:提取特征并計算相似度
# 用處理器處理輸入(自動轉成模型需要的格式)  
inputs = processor(text=texts, images=image, return_tensors="pt", padding=True)  # 模型輸出文本特征和圖像特征  
outputs = model(**inputs)  
text_features = outputs.text_embeds  # 文本特征(3個向量,對應3個文本)  
image_features = outputs.image_embeds  # 圖像特征(1個向量,對應貓的圖片)  # 計算圖像特征與每個文本特征的相似度(余弦相似度,值越高越匹配)  
similarity = torch.nn.functional.cosine_similarity(image_features, text_features)  # 打印結果  
print("文本描述:", texts)  
print("相似度:", similarity.detach().numpy())  
預期結果:
文本描述: ['a cat', 'a dog', 'a bird']  
相似度: [0.85, 0.32, 0.21]  

可以看到,“a cat”與貓的圖片相似度最高——這就是“模態對齊”的效果:模型知道“貓的圖像”和“a cat”指的是同一個東西。

總結

這節課我們搞懂了:

  1. 不同模態(文本、圖像等)因為結構、語義密度、數據規模不同,天生“難溝通”;
  2. 必須先把原始數據轉成“特征向量”(模型的“數字語言”);
  3. 核心是“模態對齊”——讓同一語義的不同模態特征在向量空間里“靠近”,早期對齊(如CLIP)和晚期對齊(如VQA)是兩種主要方式。

下節課,我們會具體看這些“對齊”思路是如何被用到實際模型中的。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/918711.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/918711.shtml
英文地址,請注明出處:http://en.pswp.cn/news/918711.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java stream distinct findAny anyMatch實現 :DistinctOp、FindOp、MatchOp

DistinctOpsDistinctOps 是一個專門用于實現 Stream.distinct() 操作的工廠類。正如它的名字所示,它的核心職責就是創建能夠去除流中重復元素的操作。distinct() 是一個有狀態的中間操作 (stateful intermediate operation),這意味著它通常需要看到所有元…

鎖的基本介紹

鎖 并發編程的一個最基本問題就是原子性地執行一系列指令。鎖有助于直接解決這一問題。 鎖的基本思想 鎖就是一個變量。這個變量保存了鎖在某一時刻的狀態。它要么是可用的,表示沒有線程持有鎖,要么是被占用的,表示有線程持有鎖,正…

【讀代碼】開源流式語音編碼器SecoustiCodec

引言:從LLM到深度語義 在大型語言模型(LLM)驅動的語音交互時代,神經語音編解碼器 (Neural Speech Codec) 扮演著至關重要的角色。它如同 LLM 的“耳朵”和“嘴巴”,負責將連續的語音波形轉換為離散的、可供模型處理的 token,并將模型生成的 token 還原為自然的人聲。 一…

P5967 [POI 2016] Korale 題解

P5967 [POI 2016] Korale 題目描述 有 nnn 個帶標號的珠子,第 iii 個珠子的價值為 aia_iai?。 現在你可以選擇若干個珠子組成項鏈(也可以一個都不選),項鏈的價值為所有珠子的價值和。 給出所有可能的項鏈排序,先按…

SwiftUI 頁面彈窗操作

SwiftUI 頁面彈窗操作指南一、基礎彈窗實現1. Alert 基礎警告框2. ActionSheet 操作菜單3. Sheet 模態視圖4. Popover 浮動視圖二、高級自定義彈窗1. 自定義彈窗組件2. 使用自定義彈窗三、彈窗狀態管理1. 使用環境對象管理彈窗2. 彈窗路由系統四、動畫與過渡效果1. 自定義彈窗動…

OpenCV圖像處理2:邊界填充與平滑濾波實戰

前面學了一些關于opencv圖像處理的內容,現在繼續。一 圖像填充邊界填充(Border Padding)?,即在圖像四周添加指定寬度的像素區域。其核心函數是cv2.copyMakeBorder(),通過不同的填充方式(borderType&#x…

imx6ull-驅動開發篇22——Linux 時間管理和內核定時器

目錄 內核時間管理 系統節拍率 高/低節拍率的優缺點 jiffies 節拍數 時間繞回 時間轉換函數 內核定時器 timer_list 結構體 定時器API函數 init_timer 函數 add_timer 函數 del_timer 函數 del_timer_sync 函數 mod_timer 函數 Linux 內核短延時函數 內核時間管…

路由器數據控制管理層面安全

數據層面:FPM Flexible Packet MatchingFPM是CisCOIOS新一代的ACL根據任意條件,無無狀態的匹配數據包的頭部負載,或者全部分析協議,更易于規則的創建用于替代傳統ACL,對特定惡意流量的基礎架構過濾無狀態ipv4單播不支持…

Vue內置組件全解析:從入門到面試通關

文章目錄Vue內置組件全解析&#xff1a;從入門到面試通關引言&#xff1a;為什么需要內置組件&#xff1f;一、Vue內置組件全景圖二、核心內置組件詳解1. <component> - 動態組件2. <transition> - 過渡動畫3. <keep-alive> - 組件緩存4. <slot> - 內容…

VUE+SPRINGBOOT從0-1打造前后端-前后臺系統-會議記錄

在當今快節奏的工作環境中&#xff0c;會議記錄是每個職場人士都必須要面對的任務。傳統的手動記錄方式不僅效率低下&#xff0c;而且容易遺漏重要信息。隨著Web技術的發展&#xff0c;基于瀏覽器的實時語音轉寫技術為會議記錄提供了全新的解決方案。本文將詳細介紹如何利用Web…

WEB3——水龍頭,如何獲得開發用的測試幣、 Sepolia 測試幣?

注意&#xff1a; 有些水龍頭渠道&#xff0c;要求以太坊幣至少有0.01ETH,設有這個門檻&#xff0c;下面并不是所有渠道都能領取到測試幣&#xff0c;有些可能對領取測試幣有要求&#xff0c;如果想獲得獲取以太坊幣的方法&#xff0c;可以看我其他的文章。 本文整理了多個免費…

C++調試革命:時間旅行調試實戰指南

還在為C的懸垂指針、內存泄漏和并發競態抓狂&#xff1f;讓調試器學會“時光倒流” 凌晨三點&#xff0c;std::thread創建的六個線程中有一個突然吞掉了你的數據&#xff0c;valgrind只告訴你“Invalid read”&#xff0c;而時間旅行調試&#xff08;TTD&#xff09;?? 能讓你…

mysql8.0筆記

1.DDL數據定義語言 DDL是什么——————創建、修改、刪除 數據庫和表結構的命令。 基本語法 針對數據庫的操作 -- 創建數據庫 CREATE DATABASE 數據庫名; -- 比如 CREATE DATABASE myschool; --查看所有數據庫 SHOW DATABASES; --使用某個數據庫 USE myschool; -- 刪除數據庫…

大模型微調【1】之入門

文章目錄說明一 大模型微調技術1.1 微調基礎1.2 量化概念1.3 高效微調方法LoRA&QLoRA1.4 LoRA VS QLoRA1.5 高效微調的應用場景二 主流微調工具2.1 unsloth2.2 LLama-Factory2.3 ms-SWIFT2.4 ColossalAI2.5 底層微調框架推薦2.6 模型性能評估框架EvalScope三 微調所需軟硬件…

深入解析Linux poll()系統調用

&#x1f504; Linux poll() 系統調用詳解一、poll 是干什么的&#xff1f;poll 是 Linux&#xff08;及 POSIX 標準&#xff09;中用于實現 I/O 多路復用&#xff08;I/O Multiplexing&#xff09; 的系統調用&#xff0c;它的核心作用是&#xff1a;讓一個線程能夠同時監視多…

文獻閱讀 | PLoS ONE | SRplot:一個免費的在線平臺,用于數據可視化和圖形

文獻介紹文獻題目&#xff1a; SRplot&#xff1a;一個免費的在線平臺&#xff0c;用于數據可視化和圖形 研究團隊&#xff1a; Yewei Wang&#xff08;中南大學湘雅二醫院&#xff09; 發表時間&#xff1a; 2023-11-09 發表期刊&#xff1a; PLoS ONE 影響因子&#xff1a; 3…

分布式與微服務寶典

分布式理論基礎 1、分布式架構有哪些特點&#xff0c;優勢和缺陷 特點&#xff1a;微服務架構的優點微服務架構的缺陷自由使用不同技術增加故障排除挑戰每一個微服務都側重于單一功能由于遠程調用增加延遲支持單個可部署單元增加了配置與其他操作的工作量允許經常發布軟件難以保…

利用生成式AI與大語言模型(LLM)革新自動化軟件測試 —— 測試工程師必讀深度解析

引言 自動化測試是現代軟件工程的基石&#xff0c;然而&#xff0c;隨著軟件復雜度和迭代速度的飛速提升&#xff0c;傳統自動化測試方法正面臨越來越多的挑戰。 近年來&#xff0c;生成式人工智能&#xff08;Generative AI&#xff09;和大語言模型&#xff08;LLM&#xff0…

JS 與 C++ 雙向通信實戰:基于 WebHostViewListener 的消息處理機制

前言在現代瀏覽器和桌面應用開發中&#xff0c;WebView 嵌入已經成為一種非常常見的 UI 技術方案。無論是基于 Chromium 的 CEF&#xff08;Chromium Embedded Framework&#xff09;、Qt WebEngine&#xff0c;還是自研瀏覽器內核&#xff0c;嵌入 WebView 都能帶來極高的靈活…

模板打印技術——Office XLS 打印模板:為政務土地確權定制的紙張替換利器—仙盟創夢IDE

代碼public static int cyberwin_replaceExcelandoutputPrint(string fisrcpathleurl, DataTable dtInfo, string despath){if (File.Exists(despath) true){//刪除目標文件File.Delete(despath);}File.Copy(fisrcpathleurl, despath);string 目標文件 despath;MSEXCEL.Appli…