人工智能之语言领域 自然语言处理 第十七章 多模态预训练模型

人工智能之语言领域

第十七章 多模态预训练模型


文章目录

  • 人工智能之语言领域
  • [前言 多模态预训练模型](#前言 多模态预训练模型)
    • [17.1 多模态NLP概述](#17.1 多模态NLP概述)
      • [17.1.1 多模态的定义](#17.1.1 多模态的定义)
      • [17.1.2 核心挑战:模态间的语义对齐](#17.1.2 核心挑战:模态间的语义对齐)
    • [17.2 经典多模态预训练模型](#17.2 经典多模态预训练模型)
      • [17.2.1 CLIP模型:文本-图像跨模态匹配](#17.2.1 CLIP模型:文本-图像跨模态匹配)
      • [17.2.2 BLIP/BLIP-2:图文生成与理解](#17.2.2 BLIP/BLIP-2:图文生成与理解)
      • [17.2.3 Flamingo:多模态大模型的进阶](#17.2.3 Flamingo:多模态大模型的进阶)
    • [17.3 多模态模型的核心技术](#17.3 多模态模型的核心技术)
    • [17.4 实战案例](#17.4 实战案例)
      • [17.4.1 图文检索:文本匹配目标图像](#17.4.1 图文检索:文本匹配目标图像)
        • [方案:使用 CLIP 计算相似度](#方案:使用 CLIP 计算相似度)
      • [17.4.2 图像描述生成:根据图像生成中文文本](#17.4.2 图像描述生成:根据图像生成中文文本)
    • 主流中文多模态模型推荐
    • 小结
  • 资料

前言 多模态预训练模型

随着人工智能从"单模态感知"迈向"多模态认知",多模态预训练模型(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 提出,统一理解生成任务。

三阶段训练
  1. Captioner:生成图像描述(类似图像描述模型)
  2. Filter:过滤低质量合成数据
  3. 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 关注另一个模态的信息。

实现方式(以文本查询图像为例):
  1. 图像经 ViT 编码为 patch tokens V = \[v_1, ..., v_m\]

  2. 文本经 Transformer 编码为 word tokens T = \[t_1, ..., t_n\]

  3. 计算注意力:
    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 变体):

python 复制代码
model = 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
中文微调关键步骤
  1. 数据准备 :获取中文图像描述数据集(如 COCO-CN
  2. 模型修改:替换文本编码器为中文 BERT
  3. 训练目标:最大化描述似然(标准语言建模损失)
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》

相关推荐
Mintopia2 小时前
衡量AI水平的六个核心指标:别再只看跑分了
人工智能
盼小辉丶2 小时前
PyTorch实战(36)——PyTorch自动机器学习
人工智能·pytorch·深度学习·自动机器学习
郝学胜-神的一滴2 小时前
PyTorch 张量基础:零张量/一张量/指定值张量全解析
人工智能·pytorch·python
7yewh2 小时前
Dense / 全连接层 / Gemm — 综合全局特征理解与运用
网络·人工智能·python·深度学习·cnn
智算菩萨2 小时前
AGI神话:人工通用智能的幻象如何扭曲与分散数字治理的注意力
论文阅读·人工智能·深度学习·ai·agi
Roy_Sashulin2 小时前
基于AI的Java编程平台
java·开发语言·人工智能·sashulin·deepseek
进击monkey2 小时前
2026 年 AI Wiki 推荐:PandaWiki——AI 原生+开源私有化,企业级知识库最优解
人工智能·开源·ai知识库
WLJT1231231232 小时前
烟火藏洁净 好物护家园
大数据·人工智能·科技·生活
静听松涛1332 小时前
远程视频会议组织全流程步骤 在线画图工具绘制会议流程图表教程
人工智能·架构·流程图