LLM 엔지니어링12장 · 멀티모달 RAG 와 데이터셋 자동 생성5 / 22← 이전목차다음 →MetaContents

12장. 멀티모달 RAG 와 데이터셋 자동 생성

그림으로 찾고 글로 찾기

옷가게 점원에게 "이런 거 있어요?" 하고 사진을 보여 줄 수도 있고, "빨간 모자 있어요?" 하고 말로 물을 수도 있습니다. 점원이 "이건 모자네요" 하고 이름을 붙여 줄 수도 있습니다. 같은 공간의 임베딩이 있으면 이 세 가지를 모두 할 수 있습니다.

글로 그림 찾기, 그림으로 비슷한 그림 찾기, 이름표 글과 견주어 이름 붙이기의 세 가지 쓰임을 견준 카드

왼쪽은 글 임베딩과 가장 가까운 그림을 찾고, 가운데는 그림 임베딩끼리 견줘 비슷한 그림을 찾고, 오른쪽은 "a drawing of a mug" 같은 이름표 글 여러 개와 그림을 견줘 가장 가까운 이름표를 고릅니다(제로샷 분류). 여기서 말로 묻기가 글로 그림 찾기, 사진 보여 주기가 그림으로 찾기, 점원이 이름 붙이기가 제로샷 분류입니다.

세 쓰임 견주기

쓰임질문견주는 것예
글로 그림 찾기글글 임베딩 ↔ 그림 임베딩"파란 배낭" → 배낭 그림
그림으로 그림 찾기그림그림 임베딩 ↔ 그림 임베딩고객이 올린 사진과 닮은 상품
제로샷 분류그림그림 임베딩 ↔ 이름표 글 임베딩새 상품 그림에 종류 붙이기

이름표 글 만들기

제로샷 분류는 이름표를 문장으로 감쌀 때 더 잘 맞는 경우가 많습니다. CLIP 이 학습한 글이 대개 "a photo of …" 같은 문장이었기 때문입니다.

Python
kinds = {"머그컵": "mug", "우산": "umbrella", "배낭": "backpack"}

# 이름표를 그림 설명 문장 꼴로 감싼다. 이 글들의 임베딩과 그림 임베딩을 견준다
prompts = [f"a drawing of a {en}" for en in kinds.values()]
print(prompts)

코드에 나오는 함수

코드쉬운 뜻
kinds = {"머그컵": "mug", ...}한국어 종류 이름과 영어 낱말을 짝지은 사전이다
kinds.values()사전의 값(영어 낱말)만 차례로 꺼낸다
f"a drawing of a {en}"f-string(formatted string, 서식 글)이다. 중괄호 자리에 낱말을 끼워 문장을 만든다
"a drawing of a ...""…을 그린 그림"이라는 뜻의 영어 문장 틀이다

이 코드가 뜻하는 것

옷가게 점원이 새 상품에 붙일 이름표를 "이것은 ___ 입니다" 라고 인쇄된 빈칸 카드로 만든다고 해 봅시다. 빈칸에 "모자", "장갑"을 적은 카드를 여러 장 만들어 두고, 상품을 보며 가장 맞는 카드를 고릅니다. 여기서 빈칸 카드가 "a drawing of a ..." 틀이고, 빈칸에 적는 낱말이 이름표이고, 카드 고르기가 제로샷 분류입니다.

줄하는 일쉽게 말하면
kinds = {...}종류 셋의 한국어와 영어 이름을 적는다붙일 수 있는 이름 목록
prompts = [...]영어 낱말마다 문장 틀에 끼운다빈칸 카드 석 장을 채운다
print(prompts)만든 문장 셋을 보인다카드를 펼쳐 본다

실행하면 ['a drawing of a mug', 'a drawing of a umbrella', 'a drawing of a backpack'] 이 나옵니다. 영어 문법으로는 an umbrella 가 맞지만, 이 코드는 틀의 a 를 그대로 붙여서 이렇게 나왔습니다. 이 코드는 글만 만듭니다. 이 글들의 임베딩을 그림 임베딩과 견주는 일은 실습 2에서 합니다.

주의할 점

  • 제로샷 분류는 준비한 이름표 가운데에서만 고릅니다. 이름표에 없는 종류의 그림이 와도 가장 가까운 이름표를 내놓으므로, 유사도가 낮으면 "모름"으로 두는 기준을 함께 둡니다.
  • 그림끼리 견주면 모양보다 색이 같은 그림이 가까울 수도 있습니다. 무엇을 "비슷하다"고 볼지는 서비스마다 다릅니다(실습 2).
← 이전 절12장 · 멀티모달 임베딩다음 절 →12장 · 그림을 글로 바꾸기