Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

ClickHouse로 벡터 검색을 할 수 있을까요?

그렇습니다. ClickHouse로 벡터 검색을 수행할 수 있습니다.

보다 전문화된 벡터 데이터베이스 대신 벡터 검색에 ClickHouse를 사용할 때의 주요 이점은 다음과 같습니다.

  • 검색을 수행하기 전에 ClickHouse의 필터링과 전문 검색 기능을 활용해 데이터셋을 더 정교하게 추릴 수 있습니다.
  • 데이터셋에 대해 분석을 수행할 수 있습니다.
  • 기존 데이터에 대해 JOIN을 수행할 수 있습니다.
  • 데이터베이스를 또 하나 더 관리하면서 인프라를 복잡하게 만들 필요가 없습니다.

다음은 ClickHouse로 벡터 검색을 사용하는 방법을 간단히 설명하는 튜토리얼입니다.

임베딩 생성

데이터(문서, 이미지 또는 구조화된 데이터)는 _임베딩_으로 변환되어야 합니다. OpenAI Embeddings API를 사용하거나 오픈 소스 Python 라이브러리 SentenceTransformers를 사용해 임베딩을 생성하는 것을 권장합니다.

임베딩은 데이터를 나타내는 큰 부동소수점 숫자 배열이라고 생각하면 됩니다. 임베딩에 대해 자세히 알아보려면 OpenAI의 이 가이드를 확인하십시오.

임베딩 저장

임베딩을 생성한 후에는 이를 ClickHouse에 저장해야 합니다. 각 임베딩은 별도의 행에 저장해야 하며, 필터링, 집계 또는 분석을 위한 메타데이터를 포함할 수 있습니다. 다음은 캡션이 있는 이미지를 저장할 수 있는 테이블 예시입니다.

CREATE TABLE images
(
	`_file` LowCardinality(String),
	`caption` String,
	`image_embedding` Array(Float32)
)
ENGINE = MergeTree;

관련 임베딩 검색

데이터셋에서 개 사진을 검색하려고 한다고 가정해 보겠습니다. cosineDistance와 같은 거리 함수를 사용해 개 이미지의 임베딩을 기준으로 관련 이미지를 검색할 수 있습니다.

SELECT
    _file,
	caption,
	cosineDistance(
        -- "입력" 개 사진의 임베딩
        [0.5736801028251648, 0.2516217529773712, ...,  -0.6825592517852783],
        image_embedding
    ) AS score
FROM images
ORDER BY score ASC
LIMIT 10

이 쿼리는 제공한 개 이미지와 가장 관련성이 높을 가능성이 있는 상위 10개 이미지의 _file 이름과 caption을 반환합니다.

추가 참고 자료

ClickHouse를 사용한 벡터 검색에 관한 더 자세한 튜토리얼은 다음을 참조하십시오.

Navigation