别只盯着模型参数了:聊聊多模态时代最容易被忽视的一件事——训练数据准备

本文涉及的产品
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
简介: 别只盯着模型参数了:聊聊多模态时代最容易被忽视的一件事——训练数据准备

别只盯着模型参数了:聊聊多模态时代最容易被忽视的一件事——训练数据准备

很多人一聊 AI 多模态,第一反应就是:
“模型多大?”
“参数多少?”
“是不是用了 Transformer + Diffusion + RLHF?”

但说句大实话:

模型只是厨师,数据才是食材。

如果食材本身不新鲜,再厉害的厨师也做不出米其林。

这几年我做大数据和 AI 项目,最大的感触其实就一句话:

多模态 AI 的核心不是模型,而是数据工程。

尤其是 文本 + 图像 + 音频 三种数据混合的时候,真正难的其实不是训练,而是 数据准备(Data Preparation)

今天咱就聊聊:
多模态训练数据到底是怎么准备出来的。

尽量不装学术,咱用工程视角聊点实在的。


一、多模态训练的本质:让不同数据“说同一种语言”

先看一个典型训练样本:

图片: 一只猫坐在键盘上
文本: "A cat sitting on a keyboard"
音频: "a_cat_on_keyboard.wav"

对于模型来说,这三样东西其实是:

image -> tensor
text -> token
audio -> spectrogram

但关键问题来了:

如何保证这三样数据描述的是同一个东西?

这就是多模态数据工程的核心:

跨模态对齐(Cross-modal Alignment)

也就是:

文本 <-> 图像 <-> 音频

必须是 语义一致 的。

否则模型学到的就是:

狗 -> 猫
猫 -> 飞机
飞机 -> 苹果

模型就彻底疯了。


二、多模态数据准备的第一步:统一数据结构

在真实工程里,我们一般先做 统一数据Schema

比如:

{
   
  "id": "sample_001",
  "text": "a dog barking",
  "image_path": "images/dog_001.jpg",
  "audio_path": "audio/dog_bark.wav",
  "source": "web_dataset"
}

这样做有两个好处:

1️⃣ 数据可扩展
2️⃣ 数据可追溯

接下来我们用 Python 做个简单数据读取器。

import json

def load_dataset(path):
    dataset = []

    with open(path, "r", encoding="utf-8") as f:
        for line in f:
            sample = json.loads(line)
            dataset.append(sample)

    return dataset


data = load_dataset("multimodal_dataset.jsonl")

print("dataset size:", len(data))
print(data[0])

工程里一般用:

  • JSONL
  • Parquet
  • TFRecord

大规模数据一般都会转 Parquet,因为列式存储更适合大数据分析。


三、文本数据清洗:AI 世界的“扫地阿姨”

文本数据其实最脏。

互联网文本通常长这样:

Buy cheap shoes now!!!
CLICK HERE!!!
www.xxxx.com

如果这些数据进了训练集:

恭喜你,你的 AI 可能学会 疯狂打广告

所以必须清洗。

示例代码:

import re

def clean_text(text):

    # 去URL
    text = re.sub(r"http\S+", "", text)

    # 去HTML
    text = re.sub(r"<.*?>", "", text)

    # 去多余空格
    text = re.sub(r"\s+", " ", text)

    return text.strip()


text = "Buy cheap shoes now!!! http://spam.com"

print(clean_text(text))

真实工程里还会做:

  • 语言检测
  • 去重
  • toxic 内容过滤
  • 低质量文本过滤

比如:

重复率 > 0.9
句子长度 < 3

这些都要过滤。


四、图像数据准备:不只是 resize

很多人以为图像处理就是:

resize -> normalize

其实远不止。

我们一般会做:

  • 图像质量检测
  • 去重
  • NSFW 过滤
  • OCR 检测

举个例子:

用 Python 批量 resize 图像。

from PIL import Image
import os

def resize_image(path, size=(224,224)):

    img = Image.open(path)
    img = img.resize(size)

    return img


img = resize_image("dog.jpg")
img.save("dog_resized.jpg")

但真正的大规模图像处理一般用:

  • Spark
  • Ray
  • Dask

比如:

10亿张图像

单机跑根本不现实。


五、音频数据处理:把声音变成可学习的数据

音频数据通常要转成:

Mel Spectrogram

因为神经网络更擅长处理图像型结构。

示例代码:

import librosa
import numpy as np

def audio_to_mel(path):

    y, sr = librosa.load(path, sr=16000)

    mel = librosa.feature.melspectrogram(
        y=y,
        sr=sr,
        n_mels=128
    )

    return mel


mel = audio_to_mel("dog_bark.wav")

print(mel.shape)

这样:

audio -> spectrogram

就变成了类似图像的二维矩阵。

模型就能学了。


六、多模态数据的真正难点:对齐

最麻烦的其实是 数据对齐

比如:

image: dog.jpg
text: "a dog running"
audio: "dog_bark.wav"

如果配错:

image: dog
text: "a plane"
audio: baby crying

模型就会崩。

所以大厂都会做:

自动对齐 + 人工校验

一个简单例子:

用 CLIP 做相似度过滤。

import torch
import clip
from PIL import Image

model, preprocess = clip.load("ViT-B/32")

def check_alignment(image_path, text):

    image = preprocess(Image.open(image_path)).unsqueeze(0)

    text_tokens = clip.tokenize([text])

    with torch.no_grad():
        image_features = model.encode_image(image)
        text_features = model.encode_text(text_tokens)

    similarity = torch.cosine_similarity(
        image_features,
        text_features
    )

    return similarity.item()


score = check_alignment("dog.jpg", "a dog running")

print("similarity:", score)

如果相似度低:

score < 0.2

我们就可以 自动过滤


七、大模型时代:数据工程师越来越重要

很多人觉得:

未来 AI 世界是 模型工程师的天下

但我越来越觉得:

真正的核心岗位,其实是数据工程师。

为什么?

因为:

模型 -> 开源越来越多
数据 -> 永远是稀缺资源

真正的护城河其实是:

高质量数据管道

包括:

  • 数据采集
  • 数据清洗
  • 数据标注
  • 数据对齐
  • 数据版本管理

这些东西看起来不起眼。

但没有它们:

再强的模型也没用。


最后聊点我的真实感受

这些年做 AI 项目,我越来越有一个感触:

很多团队把 90%精力放在模型

但真正决定效果的往往是:

数据质量

就像种地。

大家都在研究:

拖拉机多先进

但真正决定收成的其实是:

土壤

数据工程师,其实就是 AI 世界里的 农民

没有他们:

再牛的算法,都是空中楼阁。

目录
相关文章
|
1月前
|
缓存 人工智能 监控
当大模型开始“碎碎念”:聊聊大模型日志分析与调优系统是怎么设计的
当大模型开始“碎碎念”:聊聊大模型日志分析与调优系统是怎么设计的
282 3
|
1月前
|
机器学习/深度学习 数据采集 人工智能
别再从零训练了:用迁移学习“借力打力”,小数据也能玩转大模型
别再从零训练了:用迁移学习“借力打力”,小数据也能玩转大模型
186 15
|
28天前
|
机器学习/深度学习 人工智能 自然语言处理
别再说“AI听不懂人话”:从0到1手把手搭一个意图识别 + 槽位提取系统
别再说“AI听不懂人话”:从0到1手把手搭一个意图识别 + 槽位提取系统
314 11
|
2月前
|
人工智能 机器人 API
从“调个 API”到“自己养模型”:用 Python 快速构建聊天机器人的完整路径
从“调个 API”到“自己养模型”:用 Python 快速构建聊天机器人的完整路径
323 3
|
1月前
|
机器学习/深度学习 人工智能 PyTorch
写 PyTorch 总像在写脚本?试试 PyTorch Lightning,把模型训练变成“工程化项目”
写 PyTorch 总像在写脚本?试试 PyTorch Lightning,把模型训练变成“工程化项目”
341 14
写 PyTorch 总像在写脚本?试试 PyTorch Lightning,把模型训练变成“工程化项目”
|
1月前
|
分布式计算 运维 Kubernetes
别再手搓集群了:用 Terraform + Helm 把数据平台“养成宠物”变“放养牛群”
别再手搓集群了:用 Terraform + Helm 把数据平台“养成宠物”变“放养牛群”
180 5
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
手撕 Transformer:从原理到代码,一步步造一个“小型大模型”
手撕 Transformer:从原理到代码,一步步造一个“小型大模型”
418 6
|
1月前
|
Java
java工具:《Java日期格式化完全指南:从Date到String的优雅转换》
java工具:《Java日期格式化完全指南:从Date到String的优雅转换》
138 1
java工具:《Java日期格式化完全指南:从Date到String的优雅转换》
|
1月前
|
SQL 数据采集 人工智能
别把数据中台做成“数据坟场”:聊聊企业数据中台架构的真实落地之路
别把数据中台做成“数据坟场”:聊聊企业数据中台架构的真实落地之路
213 4
|
2月前
|
数据采集 供应链 物联网
别再只会调用 API 了:一步步教你用 Python Fine-Tune 一个定制化大模型
别再只会调用 API 了:一步步教你用 Python Fine-Tune 一个定制化大模型
364 4