Study/AI

[LangChain] 벡터스토어(VectorStore)란, Chroma DB

hongeeii 2025. 8. 21.
728x90
반응형

VectorStore 이란

텍스트를 임베딩모델을 거쳐 변환을 한 결과물을 Vector라고 한다. 이 데이터를 저장하고 빠르게 유사한 벡터를 검색할 수 있게 해주는 데이터베이스

실습 데이터 만들기

  • Documents 배열 만들기
from langchain_community.document_loaders import TextLoader
from langchain_text_splitters import CharacterTextSplitter

text_splitter = CharacterTextSplitter(
    chunk_size=100,
    chunk_overlap=20
)

loader = TextLoader("../docs/news.txt", encoding="utf-8")
documents = loader.load_and_split(text_splitter=text_splitter)
 

=>

[Document(metadata={'source': '../docs/news.txt'}, page_content='정치 : 최근 대선 후보 토론에서 양당의 입장이 강하게 충돌했습니다. 후보들은 세금 정책과 사회 복지 확대 여부를 두고 팽팽한 신경전을 벌였습니다. 전문가들은 이번 선거가 향후 10년간 정치 지형을 크게 변화시킬 것이라고 전망합니다.'),
 Document(metadata={'source': '../docs/news.txt'}, page_content='경제 : 세계적인 인플레이션 압박으로 각국 중앙은행들이 금리 인상에 나섰습니다. 특히 미국 연방준비제도는 예상보다 더 강력한 금리 인상을 단행하며 시장에 충격을 주었습니다. 이로 인해 주식과 채권 시장에서 대규모 매도세가 발생했습니다.'),
 Document(metadata={'source': '../docs/news.txt'}, page_content='과학 : 새로운 암 치료법이 임상시험에서 획기적인 성과를 거두었습니다. 연구팀은 유전자 편집 기술을 이용해 특정 암세포만을 표적으로 삼는 방법을 개발했습니다. 이 치료법이 상용화된다면 기존 치료법보다 부작용이 크게 줄어들 것으로 기대됩니다.'),
 Document(metadata={'source': '../docs/news.txt'}, page_content='기술 : 인공지능(AI) 기반 번역 서비스가 급속도로 발전하면서 글로벌 소통의 장벽이 낮아지고 있습니다. 최근 출시된 AI 번역기는 실시간으로 음성을 번역해주는 기능을 제공하며, 다양한 언어를 지원합니다. 이에 따라 다국적 비즈니스와 국제 회의의 효율성이 크게 향상될 것으로 보입니다.'),
 Document(metadata={'source': '../docs/news.txt'}, page_content='환경 : 지구 온난화로 인한 극단적인 기후 변화가 전 세계적으로 심각한 피해를 초래하고 있습니다. 북극 해빙이 급격히 녹고 있으며, 이로 인해 해수면 상승이 가속화되고 있습니다. 환경 단체들은 즉각적인 탄소 배출 감축이 필요하다고 경고하고 있습니다.'),
 Document(metadata={'source': '../docs/news.txt'}, page_content='사회 : 최근 젊은 층 사이에서 미니멀리즘 라이프스타일이 인기를 끌고 있습니다. 불필요한 물건을 줄이고 필수품만을 소유하는 이 방식은 스트레스 감소와 심리적 안정에 도움을 준다고 알려져 있습니다. 이에 따라 관련 제품과 서비스 시장도 확대되고 있습니다.'),
 Document(metadata={'source': '../docs/news.txt'}, page_content='국제 : 아시아-태평양 지역에서의 경제 협력이 강화되고 있습니다. 주요 국가들은 무역 장벽을 낮추고 공동 개발 프로젝트를 추진하며 상호 이익을 추구하고 있습니다. 그러나 중국과 미국 간의 갈등이 여전히 지역 안정에 큰 변수로 작용하고 있습니다.'),
 Document(metadata={'source': '../docs/news.txt'}, page_content='보건 : 최근 신종 바이러스의 확산이 일부 국가에서 급격히 증가하고 있습니다. 이에 따라 각국 정부는 예방접종 캠페인과 함께 강력한 방역 조치를 시행하고 있습니다. 보건 전문가들은 지속적인 모니터링과 빠른 대응이 필요하다고 강조하고 있습니다.'),
 Document(metadata={'source': '../docs/news.txt'}, page_content='문화 : 전통 예술과 현대 기술이 결합된 새로운 형태의 공연 예술이 인기를 끌고 있습니다. 디지털 기술을 활용한 무대 연출과 실시간 인터랙티브 요소가 관객의 몰입감을 높이고 있습니다. 이 같은 시도가 예술계에 신선한 변화를 가져오고 있습니다.'),
 Document(metadata={'source': '../docs/news.txt'}, page_content='우주 : NASA가 새롭게 발사한 우주 망원경이 태양계 외곽의 신비로운 행성을 발견했습니다. 과학자들은 이 행성의 대기에서 생명체의 존재를 암시하는 화합물을 발견했다고 발표했습니다. 이 발견은 우주 탐사에 새로운 이정표가 될 것으로 기대됩니다.')]
 

Chroma에 Vector 데이터 저장하기

  • chroma vector store 설치
!pip3 install langchain_chroma==0.2.2
 
  • HuggingFace Embedding 모델 만든다
from langchain_chroma import Chroma
from langchain_huggingface import HuggingFaceEmbeddings

model_name = "klue/bert-base" # korea embedding model
hf_embeddings = HuggingFaceEmbeddings(model_name=model_name)
 
  • Chroma에 백터데이터 저장
# chroma에 hf_embeddings를 통해 documents를 임베딩하여 저장하겠다
# 벡터데이터를 만들고 그걸 저장한 db가 만들어진다.
db = Chroma.from_documents(documents=documents, embedding=hf_embeddings)
 

유사도 검색

Chroma DB에 저장된 인덱싱되어있는 문서들 중 유사한 문서를 찾는 방법이다.

# 유사한 것을 찾는 메서드
result = db.similarity_search("대선 후보 토론")
result
 

4개의 문서를 찾았고, 첫 번째 Page_content만 가져왔다.
embedding model에 따라 결과는 바뀌었다.

정치 : 최근 대선 후보 토론에서 양당의 입장이 강하게 충돌했습니다. 후보들은 세금 정책과 사회 복지 확대 여부를 두고 팽팽한 신경전을 벌였습니다. 전문가들은 이번 선거가 향후 10년간 정치 지형을 크게 변화시킬 것이라고 전망합니다.
 

similarity_search 함수에서 default로 4개의 문서를 찾는것을 볼 수 있다.

result = db.similarity_search("해수면이 높아지고 있다", k = 1)
result
 

=>

[Document(id='9a97507e-3ac2-42e4-9458-8229c7b1a0d5', metadata={'source': '../docs/news.txt'}, page_content='환경 : 지구 온난화로 인한 극단적인 기후 변화가 전 세계적으로 심각한 피해를 초래하고 있습니다. 북극 해빙이 급격히 녹고 있으며, 이로 인해 해수면 상승이 가속화되고 있습니다. 환경 단체들은 즉각적인 탄소 배출 감축이 필요하다고 경고하고 있습니다.')]
 

가장 유사도가 높은 문서 하나만 가져온다.

결과를 보면 유사도가 어느정도 되는지는 알 수 가 없다.

유사도 확인하기

원본문서와 질의의 거리가 가까울수록 유사도가 높고, 유사도 점수가 높을수록 유사도가 높다!

유사도 거리 확인하기

result = db.similarity_search_with_score("신종 바이러스")
result
 

=>
결과를 확인해보면 뒤의 문서의 숫자가 더 큰것을 볼 수 있다.
이 숫자는 원본문서와의 거리이다.
따라서 숫자가 작을수록 가깝기 때문에 유사도가 높다.

[(Document(id='149e89e7-d542-40ad-a32c-43cd4be1c7ef', metadata={'source': '../docs/news.txt'}, page_content='보건 : 최근 신종 바이러스의 확산이 일부 국가에서 급격히 증가하고 있습니다. 이에 따라 각국 정부는 예방접종 캠페인과 함께 강력한 방역 조치를 시행하고 있습니다. 보건 전문가들은 지속적인 모니터링과 빠른 대응이 필요하다고 강조하고 있습니다.'),
  411.9826354980469),
 (Document(id='708fe531-ced3-4976-9385-4a47746b4889', metadata={'source': '../docs/news.txt'}, page_content='우주 : NASA가 새롭게 발사한 우주 망원경이 태양계 외곽의 신비로운 행성을 발견했습니다. 과학자들은 이 행성의 대기에서 생명체의 존재를 암시하는 화합물을 발견했다고 발표했습니다. 이 발견은 우주 탐사에 새로운 이정표가 될 것으로 기대됩니다.'),
  442.4527587890625),
 (Document(id='84573a92-f4ed-460f-80a0-5ff60ad3fb00', metadata={'source': '../docs/news.txt'}, page_content='사회 : 최근 젊은 층 사이에서 미니멀리즘 라이프스타일이 인기를 끌고 있습니다. 불필요한 물건을 줄이고 필수품만을 소유하는 이 방식은 스트레스 감소와 심리적 안정에 도움을 준다고 알려져 있습니다. 이에 따라 관련 제품과 서비스 시장도 확대되고 있습니다.'),
  454.6402893066406),
 (Document(id='0cec6014-08c5-4c0f-b7ee-eb1446d40888', metadata={'source': '../docs/news.txt'}, page_content='과학 : 새로운 암 치료법이 임상시험에서 획기적인 성과를 거두었습니다. 연구팀은 유전자 편집 기술을 이용해 특정 암세포만을 표적으로 삼는 방법을 개발했습니다. 이 치료법이 상용화된다면 기존 치료법보다 부작용이 크게 줄어들 것으로 기대됩니다.'),
  455.4779968261719)]
 

유사도 점수 확인하기

result = db.similarity_search_with_relevance_scores("신종 바이러스")
result
 

=> 유사도는 점수가 높을수록 유사도가 높다.

[(Document(id='149e89e7-d542-40ad-a32c-43cd4be1c7ef', metadata={'source': '../docs/news.txt'}, page_content='보건 : 최근 신종 바이러스의 확산이 일부 국가에서 급격히 증가하고 있습니다. 이에 따라 각국 정부는 예방접종 캠페인과 함께 강력한 방역 조치를 시행하고 있습니다. 보건 전문가들은 지속적인 모니터링과 빠른 대응이 필요하다고 강조하고 있습니다.'),
  -290.31571529177455),
 (Document(id='708fe531-ced3-4976-9385-4a47746b4889', metadata={'source': '../docs/news.txt'}, page_content='우주 : NASA가 새롭게 발사한 우주 망원경이 태양계 외곽의 신비로운 행성을 발견했습니다. 과학자들은 이 행성의 대기에서 생명체의 존재를 암시하는 화합물을 발견했다고 발표했습니다. 이 발견은 우주 탐사에 새로운 이정표가 될 것으로 기대됩니다.'),
  -311.8613460944419),
 (Document(id='84573a92-f4ed-460f-80a0-5ff60ad3fb00', metadata={'source': '../docs/news.txt'}, page_content='사회 : 최근 젊은 층 사이에서 미니멀리즘 라이프스타일이 인기를 끌고 있습니다. 불필요한 물건을 줄이고 필수품만을 소유하는 이 방식은 스트레스 감소와 심리적 안정에 도움을 준다고 알려져 있습니다. 이에 따라 관련 제품과 서비스 시장도 확대되고 있습니다.'),
  -320.4792315693394),
 (Document(id='0cec6014-08c5-4c0f-b7ee-eb1446d40888', metadata={'source': '../docs/news.txt'}, page_content='과학 : 새로운 암 치료법이 임상시험에서 획기적인 성과를 거두었습니다. 연구팀은 유전자 편집 기술을 이용해 특정 암세포만을 표적으로 삼는 방법을 개발했습니다. 이 치료법이 상용화된다면 기존 치료법보다 부작용이 크게 줄어들 것으로 기대됩니다.'),
  -321.0715802370509)]
 

직접 임베딩된 벡터와 비교하기

embedded_query = hf_embeddings.embed_query("AI 번역 기술")
result = db.similarity_search_by_vector(embedded_query)
result
728x90
반응형

추천 글