第1节:多模态大模型入门(多模态大模型基础教程)
前言
这套课程专为多模态大模型初学者设计,共5节。从基础概念入手,逐步讲解单模态到多模态的跨越、模态差异与对齐难题、经典模型结构、核心能力及实践入门,避开数据与评估内容,语言简洁易懂,附案例和代码,帮你快速掌握多模态大模型核心知识与入门实践。
一、先搞懂:什么是“模态”?
“模态”其实就是“信息的载体形式”。生活中我们接触的信息有很多种形式,每一种形式就是一种“模态”。比如:
- 文本模态:书籍里的文字、手机上的消息(本质是“有序的符号序列”);
- 图像模态:照片、表情包(本质是“二维像素矩阵”,每个点记录颜色);
- 语音模态:说话声、音乐(本质是“随时间变化的声波信号”);
- 视频模态:电影、短视频(本质是“连续的图像+同步的音频”,可以理解为“图像+语音”的组合模态)。
简单说:模态就是信息的“长相”——有的是文字,有的是图片,有的是声音,它们长得不一样,但可能表达同一个意思(比如“下雨了”,可以是文字,也可以是一张下雨的照片,还可以是“哗啦啦”的雨声)。
二、从“单模态模型”到“多模态模型”:差在哪里?
AI模型是“处理信息的工具”,但早期的模型大多是“单模态”的——它们只能处理一种形式的信息。我们先看看单模态模型能做什么,再看它们的局限。
1. 什么是“单模态模型”?
“单模态模型”是只能处理“一种模态”的AI模型。举两个最经典的例子:
-
文本单模态模型:比如GPT系列(如GPT-3)。它只能处理文本,能做“写作文”“翻译”“回答文字问题”等任务,但如果你给它一张图片,它完全看不懂。
例:问GPT-3“这张图里有什么?”,它会告诉你“我无法处理图像”。 -
图像单模态模型:比如ResNet(一种经典的图像识别模型)。它只能处理图像,能做“识别图片里是猫还是狗”“判断图片是否是风景”等任务,但如果你给它一段文字描述,它也完全看不懂。
例:给ResNet输入“一只戴帽子的猫”这句话,它会因为“看不懂文字”而输出无意义的结果。
2. 单模态模型的局限:只能“单打独斗”
单模态模型的问题很明显:它们只能“看懂”一种信息,无法处理“跨模态的需求”。而现实中,我们往往需要同时处理多种模态的信息。
比如:
- 你想在手机里“用文字搜图片”(比如搜“红色的花”,希望找到对应的照片)—— 文本单模态模型(如只能处理文字的搜索引擎)和图像单模态模型(如只能识别图片的模型)单独工作都做不到;
- 你想让智能音箱“根据一张照片回答问题”(比如对着音箱拍一张蛋糕的照片,问“这是什么蛋糕?”)—— 语音单模态模型(如只能处理声音的音箱)和图像单模态模型(如只能识别图片的模型)单独工作也做不到。
这些需求的核心是:需要一个能同时“看懂文字、图片、声音”,并能让它们“互通”的模型——这就是“多模态模型”。
三、多模态大模型:能让不同模态“对话”的模型
“多模态大模型”的定义很简单:能同时理解或生成两种及以上模态信息的AI模型。
它的核心能力是“跨模态理解”和“跨模态生成”:
- 跨模态理解:比如“看懂一张图+一段文字,判断它们是否说的是同一件事”(如图是“猫”,文字是“狗”,模型能判断不匹配);
- 跨模态生成:比如“根据一段文字,生成对应的图片”(如输入“一只坐在月亮上的兔子”,生成一张这样的画)。
为什么需要多模态大模型?
因为它更贴近人类的认知习惯。人类天生就是“多模态学习者”:我们看到苹果的同时会听到“苹果”的发音,摸到它的质感,这些信息会在大脑里“融合”,让我们对“苹果”有完整的认知。
AI要更智能,就得像人类一样“综合多种信息”。比如:
- 自动驾驶汽车需要同时处理“摄像头拍的图像”(看路况)、“雷达信号”(测距离)、“导航语音”(听指令),才能安全驾驶;
- 智能助手需要同时处理“用户的语音指令”(如“帮我看看这张图里的字”)和“用户发的图片”,才能准确回应。
四、多模态大模型的典型应用场景
我们看几个生活中常见的例子,感受它的价值:
-
图文跨模态检索:
比如你在购物APP里输入“黑色的连帽卫衣”(文本),APP能返回对应的商品图片(图像);或者你上传一张卫衣的照片(图像),APP能返回“黑色连帽卫衣”的商品名称(文本)。 -
图像 caption(图像配文):
给模型输入一张照片(比如“小朋友在放风筝”),模型能自动生成文字描述“一个孩子在草地上放风筝”。 -
视觉问答(VQA):
给模型输入一张图+一个问题(比如图是“3个苹果”,问题是“图中有几个水果?”),模型能返回答案“3个”。 -
多模态助手:
比如GPT-4V(GPT-4的多模态版本),你可以给它发一张表格图片,问“这张表里哪个数值最大?”,它能看懂图片里的文字,再回答问题。
五、代码示例:直观感受“单模态”与“多模态”的区别
我们用简单的代码,分别展示“单模态模型”的局限和“多模态模型”的跨模态能力。你不需要懂复杂原理,跟着跑一遍就能感受到差异。
准备工作:安装工具库
我们会用到两个工具:
transformers
:Hugging Face的库,里面有很多预训练好的单模态和多模态模型;pillow
:处理图像的工具。
安装命令(在电脑的终端/命令提示符里输入):
pip install transformers torch pillow
示例1:用“单模态模型”分别处理文本和图像
先看单模态模型的“局限性”——它们只能处理自己擅长的模态,对其他模态“无能为力”。
# 1. 加载文本单模态模型(BERT,只能处理文本)
from transformers import BertTokenizer, BertModel
text_tokenizer = BertTokenizer.from_pretrained("bert-base-uncased")
text_model = BertModel.from_pretrained("bert-base-uncased") # 用文本模型处理文本(正常工作)
text = "a cat" # 一段文字:“一只猫”
text_inputs = text_tokenizer(text, return_tensors="pt")
text_output = text_model(** text_inputs)
print("文本模型处理文本:成功(输出特征向量)") # 2. 加载图像单模态模型(ResNet,只能处理图像)
from transformers import ResNetImageProcessor, ResNetModel
from PIL import Image image_processor = ResNetImageProcessor.from_pretrained("microsoft/resnet-50")
image_model = ResNetModel.from_pretrained("microsoft/resnet-50") # 用图像模型处理图像(正常工作)
image = Image.open("cat.jpg") # 假设当前文件夹有一张猫的照片
image_inputs = image_processor(images=image, return_tensors="pt")
image_output = image_model(**image_inputs)
print("图像模型处理图像:成功(输出特征向量)") # 3. 尝试用文本模型处理图像(会失败)
try: text_model(** image_inputs) # 用文本模型处理图像输入
except Exception as e: print("文本模型处理图像:失败(报错:", e, ")") # 4. 尝试用图像模型处理文本(会失败)
try: image_model(**text_inputs) # 用图像模型处理文本输入
except Exception as e: print("图像模型处理文本:失败(报错:", e, ")")
运行结果会显示:单模态模型只能处理“自己的模态”,跨模态处理时会直接报错——这就是它们的局限。
示例2:用“多模态模型”实现跨模态匹配
我们用一个简单的多模态模型(CLIP,OpenAI开发的早期多模态模型),展示它如何“同时理解文本和图像”,并判断它们是否匹配。
from transformers import CLIPProcessor, CLIPModel
from PIL import Image # 加载CLIP模型(多模态模型,能同时处理文本和图像)
model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32")
processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32") # 准备输入:一张猫的图片 + 3个文本描述
image = Image.open("cat.jpg") # 猫的照片
texts = ["a cat", "a dog", "a bird"] # 三个文本:“一只猫”“一只狗”“一只鸟” # 用处理器统一处理文本和图像(转换成模型能读的格式)
inputs = processor(text=texts, images=image, return_tensors="pt", padding=True) # 模型输出:文本和图像的“匹配分数”(分数越高,越可能匹配)
outputs = model(** inputs)
logits_per_image = outputs.logits_per_image # 图像与每个文本的匹配分数
probs = logits_per_image.softmax(dim=1) # 转换为概率(0-1之间,总和为1) # 打印结果
print("文本描述:", texts)
print("与猫的图片的匹配概率:", probs.detach().numpy()[0])
预期结果(概率越接近1,匹配度越高):
文本描述: ['a cat', 'a dog', 'a bird']
与猫的图片的匹配概率: [0.92, 0.05, 0.03]
可以看到:CLIP能同时“看懂”图片(猫)和文本,并且准确判断“a cat”与图片的匹配度最高——这就是多模态模型的核心能力:让不同模态的信息“对话”。
总结
这节课我们搞懂了:
- “模态”是信息的载体形式(文本、图像、语音等),它们长得不一样但可能表达同一意思;
- “单模态模型”只能处理一种模态(如GPT处理文本、ResNet处理图像),无法跨模态工作;
- “多模态大模型”能同时理解/生成多种模态,核心是让不同模态“互通”;
- 它的价值在于贴近人类认知,能解决单模态模型做不到的事(如图文检索、视觉问答)。
下一节课,我们会深入探讨:不同模态“长得不一样”,多模态模型是如何让它们“互通”的?(也就是“模态对齐”的核心难题)。