人工智能之语言领域
第十七章 多模态预训练模型
文章目录
- 人工智能之语言领域
- [前言 多模态预训练模型](#前言 多模态预训练模型)
- [17.1 多模态NLP概述](#17.1 多模态NLP概述)
- [17.1.1 多模态的定义](#17.1.1 多模态的定义)
- [17.1.2 核心挑战:模态间的语义对齐](#17.1.2 核心挑战:模态间的语义对齐)
- [17.2 经典多模态预训练模型](#17.2 经典多模态预训练模型)
- [17.3 多模态模型的核心技术](#17.3 多模态模型的核心技术)
- [17.3.1 跨模态注意力机制](#17.3.1 跨模态注意力机制)
- [17.3.2 模态融合策略](#17.3.2 模态融合策略)
- [17.4 实战案例](#17.4 实战案例)
- [17.4.1 图文检索:文本匹配目标图像](#17.4.1 图文检索:文本匹配目标图像)
- [方案:使用 CLIP 计算相似度](#方案:使用 CLIP 计算相似度)
- [17.4.2 图像描述生成:根据图像生成中文文本](#17.4.2 图像描述生成:根据图像生成中文文本)
- [方案:微调 BLIP 模型](#方案:微调 BLIP 模型)
- 中文微调关键步骤
- 主流中文多模态模型推荐
- 小结
- 资料
前言 多模态预训练模型
随着人工智能从"单模态感知"迈向"多模态认知",多模态预训练模型(Multimodal Pre-trained Models) 成为连接语言、视觉、听觉等信息的桥梁。人类天生具备多模态理解能力------看到"一只猫坐在沙发上",听到"喵~",便能构建统一语义。多模态模型旨在赋予机器类似能力,支撑图文检索、视觉问答、图像描述生成等复杂任务。本章将系统讲解多模态 NLP 的核心思想、经典模型(CLIP、BLIP、Flamingo)、关键技术,并通过图文检索与图像描述生成实战演示其应用。
17.1 多模态NLP概述
17.1.1 多模态的定义
多模态(Multimodality) 指同时处理两种或以上信息模态:
- 文本-图像:社交媒体帖子、商品详情页
- 文本-音频:语音助手、播客字幕
- 文本-视频:短视频平台、教学视频
- 文本-结构化数据:表格问答、知识图谱
🌰 现实场景:
用户搜索"红色连衣裙" → 系统返回匹配图片(跨模态检索 )
上传一张"海滩日落"照片 → 自动生成描述"金色阳光洒在海面..."(图像描述生成)
模态输入
文本: 一只狗在草地上奔跑
图像: 🐕 + 🌿
音频: 狗吠声
多模态模型
统一语义表示
下游任务:
VQA/检索/生成
17.1.2 核心挑战:模态间的语义对齐
不同模态的数据具有异构性:
- 文本:离散符号序列(如 "cat")
- 图像:连续像素矩阵(如 RGB 值)
- 音频:时序频谱图
关键问题 :如何将它们映射到共享语义空间,使"猫"的文本向量与猫的图像向量相近?
💡 解决方案:
- 跨模态对比学习(如 CLIP)
- 跨模态注意力(如 ViLBERT)
- 统一 Transformer 编码(如 Flamingo)
17.2 经典多模态预训练模型
17.2.1 CLIP模型:文本-图像跨模态匹配
CLIP(Contrastive Language--Image Pretraining) 由 OpenAI 提出,通过对比学习对齐图文表示。
核心思想
- 训练目标:最大化匹配图文对 的相似度,最小化不匹配对的相似度
- 架构:双塔结构(独立图像编码器 + 文本编码器)
输入图像
ViT/ResNet
图像编码器
输入文本
Transformer
文本编码器
图像向量 zᵢ
文本向量 zₜ
点积相似度
zᵢ·zₜ
对比损失
(InfoNCE)
预训练任务
给定一批 N 个图文对:
- 正样本:第 i 个图像与第 i 个文本
- 负样本:第 i 个图像与其他 N-1 个文本
损失函数:
L = − 1 N ∑ i = 1 N [ log exp ( z i I ⋅ z i T / τ ) ∑ j = 1 N exp ( z i I ⋅ z j T / τ ) + log exp ( z i I ⋅ z i T / τ ) ∑ j = 1 N exp ( z j I ⋅ z i T / τ ) ] \mathcal{L} = -\frac{1}{N} \sum_{i=1}^N \left[ \log \frac{\exp(z_i^I \cdot z_i^T / \tau)}{\sum_{j=1}^N \exp(z_i^I \cdot z_j^T / \tau)} + \log \frac{\exp(z_i^I \cdot z_i^T / \tau)}{\sum_{j=1}^N \exp(z_j^I \cdot z_i^T / \tau)} \right] L=−N1i=1∑N[log∑j=1Nexp(ziI⋅zjT/τ)exp(ziI⋅ziT/τ)+log∑j=1Nexp(zjI⋅ziT/τ)exp(ziI⋅ziT/τ)]
✅ 优势:
- 零样本迁移:无需微调即可用于分类(用类别名作为文本提示)
- 强大泛化能力
17.2.2 BLIP/BLIP-2:图文生成与理解
BLIP(Bootstrapped Language-Image Pretraining) 由 Salesforce 提出,统一理解 与生成任务。
三阶段训练
- Captioner:生成图像描述(类似图像描述模型)
- Filter:过滤低质量合成数据
- Pretrain:联合训练理解(ITM, MLM)与生成(LM)任务
BLIP-2 进一步引入冻结预训练模型 + 可训练Q-Former,高效对接大语言模型(如 OPT、Flan-T5)。
Image
冻结 ViT
可训练
Querying Transformer
冻结 LLM
(e.g., OPT)
Text
输出:
描述/VQA答案
✅ 优势:
- 仅需少量可训练参数(Q-Former)
- 支持开放域问答与生成
17.2.3 Flamingo:多模态大模型的进阶
Flamingo 由 DeepMind 提出,是首个真正意义上的多模态大语言模型(MLLM)。
创新点
- Perceiver Resampler:将长序列视觉特征压缩为固定数量 latent 向量
- Gated Cross-Attention:在 LLM 层间插入视觉-语言交互模块
- 交错多模态输入:支持任意顺序的图文混合序列(如 图+文+图+文)
📊 能力 :
输入:"这张图中的动物是什么?[图像] 它生活在什么地方?"
输出:"这是一只北极熊,生活在北极地区。"
17.3 多模态模型的核心技术
17.3.1 跨模态注意力机制
允许一个模态的 token 关注另一个模态的信息。
实现方式(以文本查询图像为例):
-
图像经 ViT 编码为 patch tokens V = \[v_1, ..., v_m\]
-
文本经 Transformer 编码为 word tokens T = \[t_1, ..., t_n\]
-
计算注意力:
Attention ( Q , K , V ) = softmax ( Q K T d ) V \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d}}\right)V Attention(Q,K,V)=softmax(d QKT)V其中 Q = T W_Q , K = V W_K , V = V W_V
🔍 作用 :
回答"图中有几只猫?"时,文本 token "猫" 会高亮关注图像中的猫区域。
17.3.2 模态融合策略
| 策略 | 描述 | 代表模型 | 优缺点 |
|---|---|---|---|
| 早期融合 | 原始特征拼接后输入统一模型 | VisualBERT | 交互充分,但模态异构性难处理 |
| 晚期融合 | 各模态独立编码,最后融合 | CLIP | 简单高效,但交互弱 |
| 混合融合 | 底层独立,高层交叉注意力 | LXMERT, ViLBERT | 平衡效率与性能 |
早期融合
图像特征
拼接
文本特征
统一Transformer
晚期融合
图像编码器
融合层
文本编码器
混合融合
图像编码器
Cross-Attention
文本编码器
深度融合
17.4 实战案例
17.4.1 图文检索:文本匹配目标图像
任务:给定文本查询,从图像库中检索最相关图片。
方案:使用 CLIP 计算相似度
python
# Step 1: 安装依赖
# pip install torch torchvision transformers Pillow
from PIL import Image
import torch
from transformers import CLIPProcessor, CLIPModel
# Step 2: 加载 CLIP 模型(中文需替换为中文多模态模型,如 AltCLIP)
model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32")
processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32")
# Step 3: 准备数据
texts = ["a photo of a cat", "a dog running on grass"]
images = [Image.open("cat.jpg"), Image.open("dog.jpg")]
# Step 4: 编码
inputs = processor(text=texts, images=images, return_tensors="pt", padding=True)
outputs = model(**inputs)
# Step 5: 计算图文相似度
logits_per_image = outputs.logits_per_image # 图像-文本相似度矩阵 [2, 2]
probs = logits_per_image.softmax(dim=1) # 归一化概率
print("相似度矩阵:")
print(probs)
# 输出示例:
# tensor([[0.95, 0.05], # cat.jpg 更匹配 "a photo of a cat"
# [0.10, 0.90]]) # dog.jpg 更匹配 "a dog running..."
🇨🇳 中文支持 :
使用
BAAI/AltCLIP(专为中文优化的 CLIP 变体):
pythonmodel = CLIPModel.from_pretrained("BAAI/AltCLIP") processor = CLIPProcessor.from_pretrained("BAAI/AltCLIP")
17.4.2 图像描述生成:根据图像生成中文文本
任务:输入一张图像,输出自然语言描述。
方案:微调 BLIP 模型
python
# Step 1: 安装依赖
# pip install salesforce-lavis
from lavis.models import load_model_and_preprocess
from PIL import Image
# Step 2: 加载 BLIP 模型(支持中文)
model, vis_processors, txt_processors = load_model_and_preprocess(
name="blip_caption",
model_type="base_coco", # 可替换为中文微调版
is_eval=True,
device="cuda"
)
# Step 3: 预处理图像
raw_image = Image.open("beach.jpg").convert("RGB")
image = vis_processors["eval"](raw_image).unsqueeze(0).to("cuda")
# Step 4: 生成描述
caption = model.generate({"image": image})
print(caption[0]) # 输出: "a beach with palm trees and blue sky"
# 中文微调提示:
# 若需生成中文,需在中文图像描述数据集(如 COCO-CN)上微调 BLIP
中文微调关键步骤
- 数据准备 :获取中文图像描述数据集(如 COCO-CN)
- 模型修改:替换文本编码器为中文 BERT
- 训练目标:最大化描述似然(标准语言建模损失)
python
# 伪代码:BLIP 中文微调
from transformers import BertTokenizer
tokenizer = BertTokenizer.from_pretrained("bert-base-chinese")
model.text_encoder = BertModel.from_pretrained("bert-base-chinese") # 替换文本编码器
# 训练循环(标准 captioning loss)
loss = model(image, caption_ids, attention_mask)
loss.backward()
主流中文多模态模型推荐
| 模型 | 类型 | 特点 | Hugging Face ID |
|---|---|---|---|
| AltCLIP | 对比学习 | 中英文对齐,支持图文检索 | BAAI/AltCLIP |
| OFA | Seq2Seq | 统一框架,支持多种任务 | OFA-Sys/OFA-base |
| MiniGPT-4 | MLLM | 连接 Vicuna + BLIP-2,支持对话 | 开源 GitHub |
| VisualGLM | MLLM | 基于 ChatGLM 的多模态对话 | THUDM/visualglm-6b |
小结
多模态预训练模型通过跨模态对齐 与融合技术,实现了文本、图像、音频等信息的统一理解与生成。CLIP 开创了对比学习范式,BLIP 统一了理解与生成,Flamingo 则迈向了真正的多模态大语言模型。在实际应用中,图文检索可直接使用 CLIP,而图像描述生成需结合 BLIP 等生成式架构。未来,随着多模态大模型(如 GPT-4V)的发展,AI 将更接近人类的多感官认知能力。
资料
咚咚王
《Python 编程:从入门到实践》
《利用 Python 进行数据分析》
《算法导论中文第三版》
《概率论与数理统计(第四版) (盛骤) 》
《程序员的数学》
《线性代数应该这样学第 3 版》
《微积分和数学分析引论》
《(西瓜书)周志华-机器学习》
《TensorFlow 机器学习实战指南》
《Sklearn 与 TensorFlow 机器学习实用指南》
《模式识别(第四版)》
《深度学习 deep learning》伊恩·古德费洛著 花书
《Python 深度学习第二版(中文版)【纯文本】 (登封大数据 (Francois Choliet)) (Z-Library)》
《深入浅出神经网络与深度学习 +(迈克尔·尼尔森(Michael+Nielsen)》
《自然语言处理综论 第 2 版》
《Natural-Language-Processing-with-PyTorch》
《计算机视觉-算法与应用(中文版)》
《Learning OpenCV 4》
《AIGC:智能创作时代》杜雨 +&+ 张孜铭
《AIGC 原理与实践:零基础学大语言模型、扩散模型和多模态模型》
《从零构建大语言模型(中文版)》
《实战 AI 大模型》
《AI 3.0》