Cohere 임베딩 소개

Cohere 임베딩 소개

임베딩(embedding)은 텍스트·이미지·정보의 의미를 숫자 목록으로 바꾸는 방식이에요. 두 임베딩 벡터의 유사도를 계산하면 두 정보가 비슷한 이야기를 하는지 수치로 알 수 있어요. 의미 검색(semantic search), 클러스터링, 분류 같은 작업이 전형적인 임베딩 활용 사례예요. Cohere의 Embed API로는 모델 하나로 텍스트뿐 아니라 이미지까지 벡터로 만들 수 있어서 복잡한 ETL 없이도 검색·RAG 파이프라인을 꾸릴 수 있어요.

출처: Introduction to Embeddings at Cohere

기본 사용법

embed-v4.0 모델로 여러 문장의 임베딩을 만들고, 내적(numpy dot) 기반 유사도 함수로 비교해 볼게요. 비슷한 의미의 두 문장은 높은 유사도를, 무관한 문장끼리는 낮은 유사도를 보여요.

import cohere
import numpy as np

co = cohere.ClientV2(api_key="YOUR_API_KEY")

phrases = ["i love soup", "soup is my favorite", "london is far away"]

res = co.embed(
    texts=phrases,
    model="embed-v4.0",
    input_type="search_query",
    output_dimension=1024,
    embedding_types=["float"],
)

soup1, soup2, london = res.embeddings.float


def calculate_similarity(a, b):
    return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))

input_type 파라미터

Cohere 임베딩은 입력의 용도에 따라 최적화가 달라져요. input_type으로 이를 지정하면 돼요.

  • 의미 검색 — 검색 질의(query)는 search_query, 검색 대상 텍스트는 search_document로 임베딩해요.
  • 분류·클러스터링classification 또는 clustering으로 지정해서 각 작업에 맞게 임베딩을 최적화할 수 있어요.
  • 이미지embed-v3.0에서 input_type='image'를 주면 이미지를 입력으로 받아요. embed-v4.0에서 images를 쓰면 기본값은 search_document예요.

다국어 지원

embed-v4.0은 100개 이상의 언어를 지원하는 다국어 모델이에요. 한국어, 일본어, 아랍어, 중국어, 스페인어, 프랑스어를 포함해요. 언어와 무관하게(language-agnostic) 의미 유사도 검색이 가능해지는 게 큰 장점이에요.

이미지 임베딩

embed-v4.0embed-v3.0 계열은 이미지 임베딩을 지원해요. 이미지는 base64로 인코딩한 뒤 Data URL 형태로 전달해요. 파일 형식은 png, jpeg, webp, gif 중 하나여야 하고 크기는 최대 5MB예요. input_type='image'를 쓸 때는 texts 필드가 비어 있어야 해요. 배치 이미지 임베딩은 embed-v3.0에서는 지원되지 않고, embed-v4.0에서는 한 번에 최대 96장까지 넣을 수 있어요.

혼합 콘텐츠 임베딩(Mixed Content)

embed-v4.0은 피규어, 슬라이드, 문서 스크린샷(예: PDF 페이지) 같은 이미지와 텍스트를 함께 처리할 수 있어요. 텍스트와 이미지를 하나의 벡터 표현으로 압축하므로, 복잡한 텍스트 추출이나 ETL 파이프라인이 필요 없어져요. embed-v3.0과 달리 이미지와 텍스트를 하나의 호출에서 같이 처리하는 게 특징이에요.

Matryoshka 임베딩

embed-v4.0은 하나의 벡터 안에 coarse-to-fine 표현을 담는 Matryoshka 학습을 지원해요. output_dimension 파라미터로 [256, 512, 1024, 1536] 중 원하는 차원을 고를 수 있어요. 이렇게 하면 저장 공간을 줄이면서도 필요에 따라 임베딩 정밀도를 조절할 수 있어요.

압축 수준(Compression)

Embed API의 embedding_types 파라미터로 출력 벡터를 다양한 방식으로 압축할 수 있어요. 지원되는 타입은 float, int8, unint8, binary, ubinary예요. 한 번의 호출에 여러 타입을 함께 요청해서(예: ["int8", "float"]) 동시에 받을 수도 있어요.

더 알아보기 (Learn more)