텍스트에서 이미지로: CLIP의 기초
속보: 십대들이 자신들이 가장 좋아하는 검색 엔진으로 TikTok을 사용하고 있으며, 생각보다 더 잘 작동한다고 합니다. 이는 놀라운 일이 아닌데, 전통적인 검색 엔진이 당신이 원하는 것을 항상 찾아주지는 않기 때문입니다. 특히 저처럼 시각적인 사람이라면, 텍스트 줄들을 훑어봐야 하는 것보다 이미지와 동영상이 훨씬 더 직관적이고 즐겁다고 느낄 것입니다. 그런데 기계가 주어진 텍스트를 어떻게 이해하고, 반환하는 이미지와 어떻게 매칭하는지 궁금해해 본 적이 있나요?
이 블로그 시리즈에서는 텍스트를 기반으로 이미지를 검색하는 것, 즉 text-to-image 서비스를 소개하려 합니다. text-to-image는 항상 중요한 크로스 모달 애플리케이션이었고, 업계는 이미지들을 그룹화하고 그 의미적 관계를 알아내기 위해 막대한 양의 사용자 생성 데이터를 필요로 하는 우회적인 해결책에 의존하곤 했습니다. 그러던 중 작년에 OpenAI가 CLIP을 공개하며 업계에 폭탄을 떨어뜨렸습니다. OpenAI는 자연어 입력을 기반으로 시각적 개념을 학습할 수 있도록, 무려 4억 개의 텍스트-이미지 쌍을 사용해 CLIP을 구축했습니다. 이제 검색 알고리즘, CLIP, 그리고 text-to-image의 기본 구성 요소를 이해하기 위해 몇 가지 기본 지식을 알아야 합니다.
검색 알고리즘과 의미적 유사도
검색 알고리즘은 전통적인 것이든 새로운 방식이든, 단일 모달이든 크로스 모달이든, 두 대상 간의 의미적 유사도, 혹은 더 정확히는 의미적 거리를 측정하지 않고는 성립할 수 없습니다. 조금 추상적으로 들릴 수 있으니, 몇 가지 예를 살펴봅시다. 초등학교 때부터 아마도 당신의 DNA에 새겨졌을 정수의 1차원 공간부터 시작해 봅시다(물론 그때는 그렇게 표현하지 않았겠지만요). 이제 양의 정수 5개 {1, 5, 6, 8, 10}이 있습니다. 말해 보세요, 5에 가장 가까운 숫자는 무엇일까요? 맞습니다, 6입니다. 어린 시절을 졸업한 것을 축하합니다. 그 이유는 6이 5로부터 가장 짧은 거리, 즉 1만큼 떨어져 있기 때문입니다. 여기서의 거리가 5와 6 사이의 의미적 거리입니다.
Figure 1 A One-Dimensional Space of Integers
이제 머신러닝에 들어왔으니, 전통적인 텍스트 검색이 어떻게 이루어지는지 보기 위해 아주 작은 한 걸음을 더 나아가 봅시다. 이전에 텍스트 검색을 해 본 사람과 이야기한다면, TF-IDF라는 말을 아마 많이 듣게 될 것입니다. TF는 term frequency, 즉 단어 빈도를 의미합니다. 사전에 있는 단어 수만큼의 차원을 가진 고차원 공간이 있다고 상상해 보세요. 어떤 글에서 각 단어가 등장한 횟수를 세고, 이 숫자를 이 공간의 해당 차원 값으로 설정하면, 우리는 어떤 글이든 이 단어 벡터 공간 위의 희소 벡터 분포로 설명할 수 있습니다(희소하다는 것은 글 하나가 보통 사전에 있는 단어 중 아주 작은 일부만 다루기 때문입니다).
Figure 2 A Demonstration of Word Vector Space
이는 매우 단순하지만 실용적인 사고방식입니다. 위에 보인 것처럼, 두 글이 분야나 내용 면에서 유사하다면 이 두 글에 해당하는 벡터들은 단어 벡터 공간에서 그다지 멀리 떨어져 있지 않을 것입니다. 두 글이 동일하다면, 그 단어 벡터 사이의 거리는 0이 될 것입니다. 텍스트 검색에서 우리는 첫 번째 예의 1차원 양의 정수 공간을 고차원 단어 벡터 공간으로 확장하지만, 기본적으로는 동일한 접근 방식을 공유합니다: 데이터의 의미를 설명하는 데 사용할 수 있는 공간을 정의하고, 그들 사이의 거리를 결정하는 것입니다.
또 한 걸음 더 나아가 봅시다(네, 예상하셨죠). 이제 텍스트는 처리했으니, 이미지의 의미도 단어 벡터 공간으로 매핑해서 텍스트-이미지 크로스 모달리티를 달성해 보면 어떨까요?
하지만 물론, 그렇게 쉽지는 않습니다. 텍스트는 기본적으로 의미를 우리에게 무료로 제공합니다. 텍스트에는 자연스러운 의미 단위인 "단어"가 있습니다. 이미지에는 그것이 없습니다. 이미지의 개별 픽셀을 사용해 그 의미를 정의할 수는 없습니다.
자연스러운 의미 단위 없이 벡터화하는 문제는 이미지 검색 분야와 일반적인 비정형 데이터 분야를 괴롭혀 왔습니다. 대부분의 데이터 유형(이미지, 비디오, 오디오, 포인트 클라우드 등)에는 자연스러운 의미 단위가 없습니다. 데이터와 컴퓨팅 파워가 충분히 저렴해지고 신경망이 대중화되기 전까지는 이를 효과적으로 해결할 수 없었습니다. 이 문제가 신경망에 의해 어떻게 해결되는지 살펴보겠습니다.
딥 신경망의 뛰어난 특징 중 하나는 그것이 "충분히 깊다"는 것입니다(천만에요). 위 그림에서 왼쪽의 입력은 224 x 224 이미지이고, 오른쪽의 출력은 4096차원 벡터입니다. 왼쪽에서 오른쪽으로, 이미지는 많은 신경망 레이어를 통과하며, 신경망은 원본 사진의 픽셀에 있는 공간 정보를 점진적으로 의미 정보로 압축합니다. 이 과정에서 공간 차원은 점점 좁아지지만 의미 차원은 점점 길어지는 것을 볼 수 있습니다(가장 정확한 표현은 아니지만, 더 나은 표현을 찾지 못했습니다). 본질적으로 이 과정은 이미지의 의미를 4096차원의 실수 벡터 공간에 매핑하는 것입니다. 앞서 설명한 기법들과 비교했을 때, 딥 신경망을 통한 벡터화에는 몇 가지 명확한 장점이 있습니다:
- 원본 데이터가 “단어”와 같이 자연스럽고 직접적으로 분할 가능한 의미 단위를 가질 필요가 없습니다.
- “데이터 유사도”의 정의가 유연하며 학습 데이터와 목적 함수에 의해 결정되고, 애플리케이션별 특징에 맞게 사용자 지정할 수 있습니다.
- 데이터 벡터화 과정은 모델의 추론 과정으로, 주로 행렬 연산을 포함하며 현대 GPU의 가속 기능을 활용할 수 있습니다.
CLIP이 한 일은 텍스트와 이미지를 교차 모달 방식으로 연결한 것입니다. 데이터 측면에서 OpenAI는 대규모 텍스트-이미지 쌍 데이터셋인 WIT (WebImageText)를 개발했습니다. 모델은 이미지와 텍스트가 짝을 이루는지 예측하기 위해 대조 학습 접근법을 사용해 학습됩니다. 그 설계는 상당히 단순합니다:
- 텍스트와 이미지에 대해 각각 특징 인코딩을 수행합니다;
- 텍스트와 이미지 특징을 각각의 단일 모달 특징 공간에서 멀티모달 특징 공간으로 투영합니다;
- 멀티모달 공간 내에서, 쌍이어야 하는 텍스트와 이미지(양성 샘플)의 특징 벡터 간 거리는 가능한 한 가까워야 하며, 음성 샘플의 경우는 그 반대여야 합니다.
그림 4 자연어 감독으로부터 전이 가능한 시각 모델 학습. 이미지 출처: https://arxiv.org/pdf/2103.00020.pdf
여기서 핵심은 두 번째 단계, 즉 투영 레이어를 통해 텍스트와 이미지의 단일 모달 특징을 멀티모달 특징 공간으로 투영하는 것입니다. 이는 이미지와 텍스트의 의미를 동일한 고차원 공간에 매핑할 수 있음을 의미합니다. 이 의미 공간은 CLIP이 텍스트-이미지 교차 모달 검색을 위해 마련해 둔 다리입니다. 이제 우리는 설명 텍스트 한 조각을 벡터로 인코딩하고, 의미가 유사한 이미지들의 벡터를 찾은 다음, 이러한 이미지 벡터를 통해 우리가 원하는 원본 이미지를 찾을 수 있습니다!
전체적으로 보면, 이는 동일한 고전적 공식입니다: 벡터 공간에 의미적 유사도를 더한 것입니다. CLIP의 중요성은 텍스트와 이미지의 의미를 통합하는 고차원 공간을 만드는 데 도움을 준다는 점이며, 이 공간에서는 텍스트와 이미지의 의미가 가까울수록 해당 벡터 간의 거리가 더 작아집니다.
텍스트-이미지 서비스의 기본 구성 요소
일반적인 텍스트-이미지 서비스는 세 부분으로 구성됩니다: 요청 측(텍스트), 검색 알고리즘(“to”), 그리고 기반 데이터베이스(이미지).
데이터베이스에는 원본 이미지, 해당 벡터, 그리고 원본 이미지를 의미 벡터로 인코딩하는 추론 모델이 포함됩니다. 이에 상응하여, 요청 측은 주로 텍스트를 의미 벡터로 인코딩하는 추론 모델을 포함합니다.
“to” 부분은 요청, 벡터 데이터베이스, 이미지 데이터베이스를 연결하는 과정입니다. 요청 측의 텍스트는 모델을 통과하여 벡터로 변환되고, 그런 다음 벡터 데이터베이스에서 가장 유사한 이미지 벡터 topK와 비교됩니다. 프로그램이 해당 벡터에 대응하는 원본 이미지를 찾으면 결과가 반환됩니다.
Figure 5 텍스트-이미지 서비스의 기본 구성 요소
결론
이제 텍스트-이미지 검색과 CLIP의 기본을 알게 되었습니다! 다음 글에서는 단 5분 만에 텍스트-이미지 서비스 프로토타입을 구축하여 여기서 배운 내용을 실습해 보겠습니다!
이 글이 마음에 드셨다면, 저희 project를 살펴보는 것은 어떨까요? 스타, 포크, 또는 여러분의 작은 클릭 하나도 감사히 여깁니다. Slack에서 언제든지 질문을 보내 주세요!
시리즈 소개
“From Text to Image”는 CLIP을 사용하여 대규모 텍스트-이미지 서비스를 구축하는 방법을 소개하는 블로그 시리즈로, 다음 내용을 포함합니다:
- 검색 알고리즘, CLIP, 텍스트-이미지 이해하기;
- 5분 만에 텍스트-이미지 데모 구축하기;
- 고급 주제 1: 대규모 벡터 리콜을 위한 벡터 데이터베이스 배포
- 고급 주제 2: 1000 QPS 이상의 추론 요청을 처리할 수 있는 추론 서비스 배포
- 고급 주제 3: 벡터 데이터 압축
계속 읽기

Introducing Zilliz CLI and Agent Skills for Zilliz Cloud
Manage your vector database from your terminal or AI coding agent. Zilliz CLI and Agent Skills work with Claude Code, Cursor, Codex, and Copilot.

Vector Databases vs. Document Databases
Use a vector database for similarity search and AI-powered applications; use a document database for flexible schema and JSON-like data storage.

Zilliz Cloud BYOC Upgrades: Bring Enterprise-Grade Security, Networking Isolation, and More
Discover how Zilliz Cloud BYOC brings enterprise-grade security, networking isolation, and infrastructure automation to vector database deployments in AWS



