모달(Modality)은 데이터의 "형태" 또는 "종류"를 말합니다. 지금까지 우리가 다룬 모델은 텍스트 하나만 입력으로 받았습니다. 멀티모달은 여러 종류의 데이터를 동시에 처리합니다.
| 모달 | 예시 | 데이터 형태 |
|---|---|---|
| 🔤 텍스트 | "오늘 날씨가 좋다" | 토큰 시퀀스 |
| 🖼️ 이미지 | 사진, 그림, 스크린샷 | 픽셀 행렬 (H×W×3) |
| 🎵 오디오 | 음성, 음악 | 파형 시퀀스 |
| 🎬 비디오 | 영상 | 이미지 시퀀스 + 오디오 |
| 📊 표/수치 | 엑셀, 센서 데이터 | 숫자 배열 |
| 🗺️ 3D/포인트클라우드 | 자율주행 라이다 | 3D 좌표 집합 |
사람은 자연스럽게 멀티모달 존재입니다. "이 사진 속 음식이 뭐야?"라고 물으면 눈으로 보고, 머릿속 언어 지식과 연결해서 답합니다. 멀티모달 AI도 이걸 흉내냅니다.
텍스트와 이미지는 완전히 다른 형태입니다. 이걸 같은 공간에서 비교하려면 공통 표현 공간(Shared Embedding Space)으로 매핑해야 합니다.
CLIP (Contrastive Language-Image Pretraining)은 2021년 OpenAI가 발표한 모델입니다. 인터넷에서 수집한 4억 개의 (이미지, 텍스트) 쌍으로 학습했으며, 핵심 아이디어는 대조 학습(Contrastive Learning)입니다.
# CLIP으로 Zero-shot 이미지 분류 예시 import clip, torch from PIL import Image model, preprocess = clip.load("ViT-B/32") image = preprocess(Image.open("dog.jpg")).unsqueeze(0) texts = clip.tokenize(["a dog", "a cat", "a bird"]) with torch.no_grad(): image_feat = model.encode_image(image) # 이미지 → 벡터 text_feat = model.encode_text(texts) # 텍스트 → 벡터 similarity = (image_feat @ text_feat.T).softmax(dim=-1) print(similarity) # → tensor([[0.9231, 0.0512, 0.0257]]) ← "a dog" 92%! # 강아지 분류를 별도 학습 없이 해냄! (Zero-shot)
CLIP이 이미지를 처리하는 방법은 기발합니다. 이미지를 패치(Patch)로 잘라서 토큰처럼 처리합니다. NLP의 Transformer와 완전히 동일한 구조를 이미지에 적용!
CLIP이 이미지-텍스트 연결을 배웠다면, GPT-4V는 이미지를 보고 대화할 수 있습니다. 이미지 인코더(CLIP ViT) + Projection Layer + LLM을 연결한 구조입니다.
import openai, base64 # 이미지를 base64로 인코딩 with open("food.jpg", "rb") as f: img_b64 = base64.b64encode(f.read()).decode() # 이미지 + 텍스트 동시에 전달 response = openai.chat.completions.create( model="gpt-4-vision-preview", messages=[{ "role": "user", "content": [ {"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{img_b64}"}}, {"type": "text", "text": "이 음식의 레시피를 알려줘"} ] }] ) print(response.choices[0].message.content) # → "이것은 김치찌개로 보입니다. 재료: 김치, 두부, 돼지고기..."
# Ollama로 LLaVA 실행 (로컬, 무료!) # 터미널에서: ollama pull llava ollama run llava # Python에서: import ollama response = ollama.chat( model='llava', messages=[{ 'role': 'user', 'content': '이 사진에 무엇이 있나요?', 'images': ['./photo.jpg'] # 이미지 경로 }] ) print(response['message']['content'])
| 모델 | 회사 | 입력 | 출력 | 특징 |
|---|---|---|---|---|
| CLIP | OpenAI (2021) | 이미지 + 텍스트 | 임베딩 | 대조학습, 제로샷 분류 |
| DALL-E 3 | OpenAI (2023) | 텍스트 | 이미지 | 텍스트 → 이미지 생성 |
| GPT-4V | OpenAI (2023) | 이미지 + 텍스트 | 텍스트 | 이미지 보고 대화 |
| GPT-4o | OpenAI (2024) | 이미지+텍스트+음성 | 텍스트+음성 | 실시간 음성 대화 |
| Gemini | Google (2023) | 이미지+텍스트+영상 | 텍스트 | 긴 영상 이해 |
| LLaVA | 오픈소스 (2023) | 이미지 + 텍스트 | 텍스트 | CLIP+LLaMA, 무료! |
| Stable Diffusion | StabilityAI | 텍스트 (+이미지) | 이미지 | 오픈소스 이미지 생성 |
| Whisper | OpenAI (2022) | 오디오 | 텍스트 | 음성인식, 98개 언어 |