Chroma - Vector database

기본 사용법

본 토픽은 현재 준비중입니다.공동공부에 참여하시면 완성 되었을 때 알려드립니다.

목적

여기서는 chroma에 데이터를 저장하고, 시멘틱 서치를 하는 방법을 알아보겠습니다.

Colab

google colab에서 실습 하실 것을 권장합니다. 로컬에 설치하는 것이 다소 까다롭습니다. 아래는 colab의 예제입니다. 

chroma db 기본 사용법.ipynb - Colaboratory (google.com)

설치

먼저 Chroma DB를 설치합시다. 아래의 Python pip 명령어를 이용하여 설치할 수 있습니다.

pip install chromadb

Chroma 클라이언트 생성

다음으로, Chroma DB를 이용하기 위해 Chroma 클라이언트를 생성합니다. 이 클라이언트는 Chroma DB 서버와 통신해서, 데이터를 생성, 조회, 수정, 삭제하는 방법을 제공합니다. 

import chromadb
client = chromadb.PersistentClient()

PersistentClient는 데이터를 파일에 저장합니다. 그 외에 메모리에 저장하는 EphmeralClient, 네트워크를 통해서 접속하는 HttpClient가 있습니다. 실제 서비스에서는 HttpClient가 권장됩니다. 참조

컬렉션 생성

Chroma에서 각각의 데이터를 document라고 합니다. 이 문서를 그룹핑해서 관리하는 개념이 collection입니다. document를 만들기 전에 collection을 생성해야 합니다. 

posts = client.create_collection(
    name="posts"
)

텍스트 문서를 컬렉션에 추가

이제 생성한 컬렉션에 텍스트 문서를 추가해봅시다. 

post1 = 'apple is delicious'
post2 = 'banana is sweet'
post3 = 'New York is big'
post4 = 'Paris is romantic'

posts.add(
    documents=[post1, post2, post3, post4],
    ids=["1", "2", "3", "4"]
)

documents에 document의 내용이 들어가고, ids에 각 문서의 식별자가 들어갑니다.  

데이터 조회

마지막으로, 컬렉션에 쿼리를 보내 봅시다. query_texts의 목록을 제공하면, Chroma DB는 가장 유사한 결과를 반환합니다. n_results는 출력할 결과의 수입니다.

result = posts.query(
    query_texts=['yellow'],
    n_results=1
)

print(result)

결과

{'ids': [['2', '1']],
 'distances': [[1.1295965909957886, 1.7517341375350952]],
 'metadatas': [[{}, {}]],
 'embeddings': None,
 'documents': [['banana is sweet', 'apple is delicious']]}

distances는 검색어와 각 데이터 간의 의미론적 거리를 표현합니다. 이 값에 따라서 정렬된 결과를 출력합니다. n_results를 생략하면 모든 데이터가 출력 됩니다. 

 

 

  • 봤어요 0명

댓글

댓글 본문