목적
여기서는 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를 생략하면 모든 데이터가 출력 됩니다.