logo
aillmmultimodal

멀티모달 LLM - 이미지를 이해하는 모델

지금까지 LLM은 텍스트만 읽고 텍스트만 답하는 존재였습니다. 하지만 이제는 이미지를 던져주고 "이게 뭐야?" 라고 물을 수 있습니다. 스크린샷을 붙여 버그를 물어보고, 차트를 보여주며 요약을 시키고, 손글씨 영수증을 표로 바꾸는 일이 한 번의 프롬프트로 됩니다. 이것이 멀티모달 LLM(Multimodal LLM) 입니다.

이 글에서는 멀티모달이 무엇인지, 어떻게 이미지를 "이해"하는지, 어디에 쓰고 무엇을 조심해야 하는지를 정리합니다.


1. 멀티모달이란

모달리티(modality) 는 정보의 종류입니다. 텍스트, 이미지, 오디오, 비디오가 각각 하나의 모달리티입니다.

멀티모달 LLM은 이 중 둘 이상을 한 모델이 함께 다루는 것입니다. 이 글에서는 가장 널리 쓰이는 이미지 + 텍스트 조합에 집중합니다. 흔히 Vision Language Model(VLM) 이라고도 부릅니다.

핵심은 이겁니다. 이미지를 단순히 "인식(고양이가 있다)"하는 데서 그치지 않고, 텍스트 지식과 함께 추론한다는 점입니다. 그래서 "이 차트에서 매출이 꺾인 분기의 원인을 표 데이터와 함께 설명해줘" 같은 복합 질문에 답할 수 있습니다.


2. 이미지를 어떻게 "이해"하나

직관은 의외로 단순합니다. 이미지를 LLM이 알아듣는 언어로 번역해서 넣어주는 것입니다.

이미지 → [이미지 인코더] → 이미지 임베딩(숫자 벡터) 텍스트 → [토크나이저] → 텍스트 임베딩 두 임베딩을 한 시퀀스로 합쳐 → [LLM] → 텍스트 답변

단계별로 보면 이렇습니다.

  1. 이미지 인코더: 이미지를 벡터로 바꿉니다. 흔히 비전 트랜스포머(ViT) 계열을 쓰며, 이미지를 격자(patch) 단위로 쪼개 각 조각을 벡터로 만듭니다.
  2. 정렬(projection): 이미지 벡터를 LLM이 쓰는 임베딩 공간에 맞게 변환합니다. 이미지의 "언어"를 텍스트의 "언어"와 같은 차원으로 맞추는 다리 역할입니다.
  3. 결합: 변환된 이미지 벡터를 텍스트 토큰들과 하나의 입력 시퀀스로 이어 붙여 LLM에 넣습니다.

비유하면, LLM은 한국어만 아는 전문가이고, 이미지 인코더는 그림을 한국어 설명으로 번역해주는 통역사입니다. LLM 입장에서는 이미지든 텍스트든 결국 같은 종류의 벡터로 들어오기 때문에 자연스럽게 함께 추론합니다.

그래서 "이미지 토큰"이라는 표현을 씁니다. 이미지 한 장이 수백 개의 토큰으로 환산되어 컨텍스트를 차지합니다. 고해상도 이미지일수록 토큰을 많이 먹는다는 뜻이기도 합니다.


3. 프롬프트에 이미지 넣기

API 사용법은 텍스트 메시지에 이미지 블록을 추가하는 형태입니다. 대부분 URL 또는 base64 인코딩으로 넣습니다.

import base64 from openai import OpenAI client = OpenAI() # 로컬 이미지를 base64로 인코딩 with open("chart.png", "rb") as f: b64 = base64.b64encode(f.read()).decode() resp = client.chat.completions.create( model="gpt-4o", messages=[{ "role": "user", "content": [ {"type": "text", "text": "이 차트에서 매출이 가장 높은 분기는?"}, {"type": "image_url", "image_url": {"url": f"data:image/png;base64,{b64}"}}, ], }], ) print(resp.choices[0].message.content)

포인트 몇 가지:

  • 한 메시지에 텍스트와 이미지를 함께, 여러 장도 넣을 수 있습니다.
  • 이미지는 토큰을 많이 쓰므로 불필요하게 큰 해상도는 비용 낭비입니다.
  • 질문을 구체적으로 해야 합니다. "설명해줘"보다 "이 표를 마크다운 표로 옮겨줘"가 훨씬 정확합니다.

4. 어디에 쓰나 - 실무 활용

멀티모달 LLM은 별도 OCR·비전 모델 파이프라인 없이 하나의 모델로 문서/화면을 이해한다는 점에서 강력합니다.

  • 문서·OCR: 스캔 문서, 영수증, 명함, 손글씨를 읽어 구조화된 데이터(JSON/표) 로 뽑아냅니다. 단순 글자 인식을 넘어 "총액이 어디 있는지" 같은 의미 파악까지 합니다.
  • 차트·그래프 해석: 이미지로 된 그래프를 읽고 추세·비교·요약을 설명합니다.
  • UI 이해: 앱/웹 스크린샷을 보고 "이 화면에서 결제 버튼이 어디 있는지", "이 에러 메시지의 원인" 등을 답합니다. 이것이 컴퓨터 사용(computer use) 에이전트의 기반이 됩니다.
  • 접근성: 이미지에 대한 대체 텍스트(alt text) 자동 생성.
  • 분류·검수: 상품 사진 카테고리 분류, 부적절 이미지 필터링 등.

예를 들어 영수증을 표로 바꾸는 프롬프트는 이렇게 씁니다.

이 영수증 이미지를 읽어서 다음 JSON으로 정리해줘. 읽을 수 없는 항목은 null로 두고, 추측하지 마. { "store": string, "date": string, "items": [{ "name": string, "price": number }], "total": number }

5. 한계와 조심할 점

강력하지만 만능은 아닙니다. 실무에서 반드시 알아야 할 한계가 있습니다.

  • 정밀 인식은 약하다: 아주 작은 글씨, 빽빽한 표, 흐릿한 이미지에서 글자를 틀리게 읽을 수 있습니다. 숫자 하나가 중요한 회계·의료 데이터라면 반드시 검증이 필요합니다.
  • 환각(hallucination): 이미지에 없는 것을 있다고 하거나, 애매한 부분을 그럴듯하게 지어냅니다. 그래서 "추측하지 말고 안 보이면 null" 같은 지시가 중요합니다.
  • 공간·정밀 좌표 인식: "정확히 몇 픽셀 위치" 같은 정밀 좌표나 미세한 위치 관계는 부정확할 수 있습니다.
  • 개수 세기: 물체가 많을 때 정확히 세는 것에 약한 경향이 있습니다.
  • 비용·지연: 이미지는 토큰을 많이 소비해 텍스트보다 느리고 비쌉니다.

정리하면, 멀티모달 LLM은 의미 이해와 유연함이 강점이지만 정밀·정확성은 전용 도구(고정밀 OCR, 바코드 리더 등)에 못 미칠 수 있습니다. 그래서 틀리면 치명적인 값은 사람이나 규칙으로 검증하는 구조를 얹는 것이 실무의 기본입니다.


마무리

멀티모달 LLM의 핵심 아이디어는 "이미지를 LLM이 알아듣는 벡터로 번역해 텍스트와 함께 추론시킨다" 입니다. 이미지 인코더가 통역사, LLM이 최종 판단자입니다.

실무 감각은 이렇게 잡으면 좋습니다.

  1. 강점: 문서/화면/차트를 하나의 모델로 유연하게 이해 → OCR·UI·문서 자동화에 강력.
  2. 약점: 정밀 인식과 환각 → 중요한 값은 반드시 검증.
  3. 프롬프트: 구체적으로 묻고, "추측 금지·안 보이면 비워둬"를 명시.
  4. 비용: 이미지는 토큰을 많이 먹으니 해상도를 필요한 만큼만.

"이미지를 완벽히 인식하는 기계"가 아니라 "이미지를 읽고 함께 추론하는 똑똑한 조수" 로 바라보면 어디에 써야 할지가 분명해집니다.

me

강경원

Backend Developer

성능과 안정성으로 신뢰받는 백엔드 개발자 · 요즘은 AI/LLM을 서비스에 접목합니다

이력서 보기