FAISS 사용하기
RAG를 위한 FAISS 활용절차
- 1) 문서를 불러온다.
- 2) 문장을 나눈다.
- 3) 임베딩 모델로 문장을 벡터화한다 (SentenceTransformer).
- 4) FAISS 인덱스를 구성한다.
- 5) 사용자 질의(Query)를 벡터화해서 FAISS로 검색한다.
- 6) 검색된 문장들을 ChatGPT에 넣기 위한 문자열로 구성한다.
실행 준비
!pip install openai
!pip install gradio
!pip install faiss-cpu sentence-transformers
1. 한글 문서 예시
import faiss
import numpy as np
from sentence_transformers import SentenceTransformer
from typing import List
document_text = """
네이버는 한국의 대표적인 인터넷 기업 중 하나입니다.
FAISS는 벡터 기반의 유사도 검색을 빠르게 수행하는 라이브러리입니다.
KR-SBERT-V40K-klueNLI-augSTS는 한국어 문장 임베딩에 적합한 경량 모델입니다.
이 모델은 문장의 의미를 잘 반영한 벡터를 생성합니다.
ChatGPT는 OpenAI에서 개발한 언어 모델로 다양한 질문에 답할 수 있습니다.
"""
2. 문장 나누기
sentences = [line.strip() for line in document_text.split('\n') if line.strip()]
3. 한글 임베딩 모델 불러오기
model = SentenceTransformer("snunlp/KR-SBERT-V40K-klueNLI-augSTS")
4. 문장 임베딩
sentence_embeddings = model.encode(sentences, convert_to_numpy=True).astype('float32')
5. FAISS 인덱스 구성
dimension = sentence_embeddings.shape[1]
index = faiss.IndexFlatL2(dimension)
index.add(sentence_embeddings)
6. 검색할 쿼리 입력
query = "한국어 문장을 벡터화하려면 어떤 모델이 좋을까?"
query_embedding = model.encode([query], convert_to_numpy=True).astype('float32')
7. 유사 문장 검색
k = 3
distances, indices = index.search(query_embedding, k)
8. 결과 문장 가져오기
retrieved_sentences = [sentences[i] for i in indices[0]]
retrieved_sentences
9. ChatGPT용 텍스트 구성
context = "\n".join(retrieved_sentences)
final_prompt = f"""다음 문맥을 참고해서 질문에 답해줘:
[문맥]
{context}
[질문]
{query}
"""
# 출력
print("📌 ChatGPT에 보낼 최종 프롬프트:\n")
print(final_prompt)
실행 결과)
📌 ChatGPT에 보낼 최종 프롬프트:
다음 문맥을 참고해서 질문에 답해줘:
[문맥]
이 모델은 문장의 의미를 잘 반영한 벡터를 생성합니다.
FAISS는 벡터 기반의 유사도 검색을 빠르게 수행하는 라이브러리입니다.
KR-SBERT-V40K-klueNLI-augSTS는 한국어 문장 임베딩에 적합한 경량 모델입니다.
[질문]
한국어 문장을 벡터화하려면 어떤 모델이 좋을까?