반응형
SBERT(Sentence-BERT)는 문장 수준의 임베딩을 생성하여 자연어 처리(NLP)에서 문장 간 유사도를 효율적으로 계산할 수 있도록 도와주는 강력한 도구입니다. 이번 블로그에서는 SBERT 모델 중 distiluse-base-multilingual-cased-v1을 활용하여 문장을 벡터화하고, FAISS(Vector Search Library)를 사용하여 효율적으로 유사 문장을 검색하는 시스템을 구축하는 방법을 알아보겠습니다.
SBERT와 FAISS를 활용한 주요 작업 흐름
- 문서 리스트 준비: 검색 대상이 되는 문서를 리스트 형태로 준비합니다.
- SBERT로 문장 임베딩 생성: 사전 학습된 다국어 SBERT 모델을 사용해 각 문장을 벡터화합니다.
- FAISS로 벡터 저장소 구성: 생성된 벡터를 FAISS 벡터 저장소에 저장하여 유사도 기반 검색이 가능하도록 설정합니다.
- 질의(Query) 처리: 검색 쿼리를 입력하면, 가장 유사한 문장을 검색합니다.
# SentenceTransformerEmbeddings: SBERT 모델을 활용한 문장 임베딩 생성
from langchain_community.embeddings.sentence_transformer import SentenceTransformerEmbeddings
# FAISS: 효율적인 유사성 검색을 위한 벡터 데이터베이스 라이브러리
from langchain_community.vectorstores import FAISS
# 1. 문서 리스트 준비
doc_list = [
"우리나라는 2022년에 코로나가 유행했다.",
"우리나라 2024년 GDP 전망은 3.0%이다.",
"우리나라는 2022년 국내총생산 중 연구개발 예산은 약 5%이다."
]
# 2. SBERT 모델 초기화
# 사용 모델: distiluse-base-multilingual-cased-v1 (다국어 지원 모델)
embedding = SentenceTransformerEmbeddings(model_name="distiluse-base-multilingual-cased-v1")
# 3. FAISS 벡터 저장소 구성
# - doc_list의 각 문장을 벡터화하여 FAISS 데이터베이스에 저장
# - 각 문서에 메타데이터를 부여하여 추적 가능하도록 설정
faiss_vectorstore = FAISS.from_texts(
doc_list, embedding, metadatas=[{"source": 1}] * len(doc_list)
)
# 4. FAISS 검색기(FaissRetriever) 설정
# - k=1: 가장 유사한 문장 1개만 검색
faisss_retriever = faiss_vectorstore.as_retriever(search_kwargs={"k": 1})
# 5. 검색 쿼리 입력
query = "2022년 우리나라 GDP대비 R&D 규모는?"
# 6. 유사 문서 검색 수행
docs = faisss_retriever.invoke(query)
# 7. 검색 결과 출력
print(docs)
# 결과: "우리나라는 2022년 국내총생산 중 연구개발 예산은 약 5%이다." 문장이 가장 유사한 결과로 반환
반응형
'투자 어시스턴트 개발' 카테고리의 다른 글
HuggingFace를 활용한 42dot_LLM-PLM-1.3B로 한국어 문장 생성 [18] (2) | 2024.12.19 |
---|---|
HuggingFace를 활용한 한국어 sLLM 모델 사용법 [17] (2) | 2024.12.19 |
Sentence Transformers로 한국어 모델 사용해보기 [15] (4) | 2024.12.13 |
Sentence Transformers 활용하기 [14] (0) | 2024.12.13 |
RAG 코드 구현하기: 효율적인 정보 검색 [13] (2) | 2024.11.27 |