在多模态学习中,不同模态(文本、图像、语音、视频、传感器数据等)所携带的信息丰富且互补。但不同模态的数据结构、表示空间、时空分布截然不同,因此,如何对各模态进行高效、有效的特征提取,是整个多模态学习系统的第一道核心关卡。
本篇我们将系统讲解如何从三类常见模态中提取有效特征,包括:
-
文本模态
-
视觉模态(图像/视频)
-
语音模态
并介绍各自的经典技术路线、深度模型演进和融合准备策略。
一、什么是“特征”?
特征(Feature)= 信息的压缩表示。
它是机器学习模型理解世界的“视角”和“入口”。
-
理想特征的标准:
-
表示力强(discriminative)
-
维度低(compact)
-
不敏感于干扰因素(robust)
-
可对齐(alignable across modalities)
-
特征提取的目标是从高维、冗余、嘈杂的模态数据中提炼出对任务有效的低维向量表示。
二、文本模态特征提取:从One-hot到Transformer
文本是结构性最弱但语义最强的模态,其特征提取经历了从符号表示 → 分布式表示 → 上下文动态表示的三代跃迁。
✅ 1. 传统方法
方法 | 思路 | 优缺点 |
---|---|---|
One-hot | 每个词独立,离散向量 | 简单但稀疏、无语义 |
TF-IDF | 统计词频和逆文档频率 | 体现权重但无上下文 |
✅ 2. 静态词向量(Word Embedding)
-
Word2Vec (Skip-gram / CBOW):通过上下文预测当前词或反之,学习固定词向量。
-
GloVe:基于全局共现矩阵统计得到的向量。
缺点:同一个词在不同语境下含义相同(如“bank”)。
✅ 3. 上下文感知表示(基于深度模型)
-
ELMo:使用双向LSTM学习上下文相关的表示。
-
BERT:Transformer-based,通过双向掩码语言建模,获得动态语义向量。
-
RoBERTa、ERNIE、T5、ChatGLM 等为进一步演化。
python
复制编辑
from transformers import BertTokenizer, BertModel tokenizer = BertTokenizer.from_pretrained('bert-base-uncased') inputs = tokenizer("deep learning is powerful", return_tensors="pt") outputs = BertModel.from_pretrained('bert-base-uncased')(**inputs) print(outputs.last_hidden_state.shape) # [1, 5, 768]
✅ 工程实践建议
-
简单任务:TF-IDF + 线性模型
-
中型任务:Word2Vec / FastText + LSTM
-
高精度任务:BERT系列模型 + 微调
三、视觉模态特征提取:从边缘到层次语义
图像或视频是二维空间的连续密集信号,早期使用人工设计特征,现已全面进入深度卷积时代。
✅ 1. 传统视觉特征
-
SIFT / SURF / HOG / LBP:提取边缘、纹理、局部不变特征
-
适用于早期图像分类、人脸识别、图像匹配
✅ 2. 卷积神经网络(CNN)
通过多层卷积 → 非线性 → 池化 → 高层语义表达,实现端到端的图像特征提取。
模型 | 特点 |
---|---|
VGG | 均匀卷积 + 池化结构 |
ResNet | 引入残差连接,解决梯度消失 |
EfficientNet | 跨层压缩、精度与速度均衡 |
Swin Transformer | 全视觉Transformer结构 |
✅ 3. 预训练视觉模型作为特征提取器
import torchvision.models as models
model = models.resnet50(pretrained=True)
features = model.avgpool # 提取全图特征
实践中,ResNet-50 常用于图像编码;如果是多模态融合任务,ResNet 的输出往往会送入 Transformer 联合建模。
四、语音模态特征提取:时间序列信号的结构化
语音信号具有时序性 + 频域信息,是典型的一维时间序列 + 高频噪声背景信号。
✅ 1. 常用手工特征
-
MFCC(Mel-Frequency Cepstral Coefficient)
将语音转为梅尔频率尺度上压缩的倒谱特征,适合情感识别、语音识别任务。 -
Chroma、Spectral Contrast、Zero Crossing Rate
辅助提取频域特征
✅ 2. 深度神经网络提取
-
CNN/LSTM + Spectrogram:把音频转为时频图后作为图像输入
-
Wav2Vec / Whisper / HuBERT:自监督语音表示模型,效果优于传统手工特征
from transformers import Wav2Vec2Processor, Wav2Vec2Model
input_values = processor(raw_audio, return_tensors="pt").input_values
outputs = model(input_values).last_hidden_state # 得到语音向量表
五、特征对齐与融合前的准备
在多模态系统中,提取完各模态特征后,常需要执行以下步骤以确保信息可融合:
🧩 1. 维度对齐
-
通过线性层/MLP 将不同模态特征统一到相同维度空间
🧩 2. 时间/空间对齐
-
对于语音/视频/传感器数据,需执行时间窗对齐(如frame-level或clip-level切割)
-
对图文数据可采用对齐网络(如ViLBERT)处理语义对齐
🧩 3. 特征标准化
-
BatchNorm、LayerNorm 或 Z-score 归一化,避免模态间尺度差异影响融合
六、结语:多模态特征提取的核心哲学
“提取有信息的压缩向量,让模态表达对齐又独立。”
多模态特征提取不是孤立任务,它既是理解模态内部的过程,又是融合跨模态信息的基础。掌握不同模态的特征提取手段,不仅能提升模型效果,也能增强系统的可解释性和鲁棒性。
📚 延伸阅读推荐:
-
《Deep Learning for Multimodal Learning》—— CMU 课程
-
HuggingFace Transformers 文档
-
OpenAI CLIP 源码和 ViLT、BLIP 模型架构解读