Recaptioning: 이미지-텍스트 데이터를 업그레이드하여 더 나은 모델 정렬 🚀
Source: Dev.to
Recaptioning: Engineering High-Quality Descriptions for Multi‑modal Models 🚀
멀티모달 AI에서는 “Garbage In, Garbage Out” 문제에 자주 직면합니다. 수집된 이미지 캡션이 너무 모호하거나(예: “예쁜 컵”), 너무 길어(77 토큰 제한 초과) 혹은 단순히 잘못된 경우가 많습니다. Recaptioning은 이러한 설명을 다시 쓰거나 재생성하여 모델에 바로 사용할 수 있고 의미가 풍부하도록 만드는 과정입니다.
data_engineering_book을 기반으로, 이번 포스트에서는 왜 Recaptioning이 필요한지, 이를 구현하기 위한 핵심 전략, 그리고 결과를 평가하는 방법을 다룹니다.

재캡션이 게임 체인저인 이유
- 시맨틱 정렬 개선 – 모호하거나 허구적인 설명을 이미지 내용과 100 % 일치하도록 수정합니다.
- 모델 제약에 맞춤 – 핵심 정보를 잃지 않으면서 긴 문장을 토큰 제한(예: CLIP의 77‑토큰 병목)에 맞게 단축합니다.
- 다차원 커버리지 – 외관, 텍스처, 컨텍스트를 포괄하는 여러 캡션을 생성해 검색 견고성을 높입니다.
- 스타일 표준화 – 은어, 오타, 비정형 포맷을 정리합니다.
Source: …
핵심 전략
A. 규칙 기반 재캡션 (저비용)
메타데이터(예: OCR 또는 객체 탐지 태그)가 있는 작은 데이터셋에 가장 적합합니다. Python과 정규식을 사용해 태그를 표준화하고 하나의 깔끔한 문자열로 병합합니다.
B. 모델 기반 재캡션 (고성능)
BLIP‑2 또는 LLaVA와 같은 비전‑언어 모델(VLM)을 활용해 자동으로 상세하고 정확한 캡션을 생성합니다.
BLIP‑2 구현 예시
from transformers import Blip2Processor, Blip2ForConditionalGeneration
import torch
from PIL import Image
class Recaptioner:
def __init__(self, model_id="Salesforce/blip2-opt-2.7b"):
self.device = "cuda" if torch.cuda.is_available() else "cpu"
self.processor = Blip2Processor.from_pretrained(model_id)
self.model = Blip2ForConditionalGeneration.from_pretrained(
model_id, torch_dtype=torch.float16
).to(self.device)
def generate(self, image_path):
image = Image.open(image_path).convert("RGB")
prompt = (
"Question: Describe this image accurately including color, material, and context. "
"Answer:"
)
inputs = self.processor(
images=image, text=prompt, return_tensors="pt"
).to(self.device, torch.float16)
# Generate 3 diverse captions
outputs = self.model.generate(
**inputs, num_return_sequences=3, do_sample=True, temperature=0.7
)
return [self.processor.decode(o, skip_special_tokens=True) for o in outputs]
C. 인간 참여 (최고 품질)
프로덕션 데이터셋의 경우 하이브리드 접근 방식을 사용합니다:
- 대량 생성 – 이미지당 LLM을 이용해 5개의 후보 캡션을 생성합니다.
- CLIP 필터링 – CLIP 유사도 점수를 기반으로 상위 2개의 캡션을 자동으로 선택합니다.
- 인간 감사 – 무작위로 5‑10 %를 샘플링해 수동으로 교정합니다.
Evaluation: Is Your New Caption Better?
Don’t guess—measure. Use CLIP Similarity and other metrics to quantify alignment between the new text and the image.
| Metric | Method | Goal |
|---|---|---|
| Semantic Alignment | CLIP Score (Cosine Similarity) | Higher than the original caption |
| Text Quality | Perplexity / Grammar Check | Fluent, no hallucinations |
| Downstream Performance | Recall@K in Retrieval Tasks | Improved retrieval accuracy |
엔지니어링 함정 및 팁
- Hallucination – 모델이 이미지에 존재하지 않는 객체를 설명할 수 있습니다.
Solution: 모델이 “보이는 것만”을 설명하도록 제한하는 프롬프트를 사용하세요. - Homogeneity – 모델이 동일한 문구를 반복하는 경우가 많습니다.
Solution:temperature를 0.7–1.0 사이로 높이고repetition_penalty를 사용하세요. - Throughput – 수백만 개의 캡션을 생성하는 데 시간이 오래 걸립니다.
Solution: FP16/INT8 양자화와 배치 추론을 활용하세요.
결론
Recaptioning은 “raw data”(원시 데이터)를 멀티모달 모델을 위한 “high‑octane fuel”(고옥탄 연료)로 변환합니다. 간단한 규칙을 사용하든 고급 VLM을 사용하든 목표는 동일합니다: Precision, Adaptation, and Diversity(정밀성, 적응성, 다양성).
전체 구현 가이드와 더 많은 멀티모달 데이터 트릭을 보려면 저장소를 방문하세요:
👉 GitHub: datascale‑ai/data_engineering_book