1. Embedding
LangChain에서 지원하는 주요 Embedding 모델은 아래와 같습니다.
1) Hugging Face Embedding
Hugging Face에서는 Transformers 모델을 사용하여 문서 임베딩을 생성할 수 있습니다. Hugging Face의 모델들은 여러 종류의 사전 훈련된 모델을 제공하며, 그 중 일부는 BERT, RoBERTa, DistilBERT, T5, GPT 등 다양한 종류의 임베딩을 제공합니다.
2) Google Generative Embedding
Google의 Generative Embedding은 특정 NLP 작업에서 효율적인 임베딩을 생성하는 모델입니다. Google API를 통해 Embedding을 생성할 수 있으며, 특히 T5, BERT와 같은 사전 훈련된 모델을 기반으로 합니다.
3) OpenAI Embedding
OpenAI의 GPT-3 모델을 기반으로 한 임베딩은 생성형 모델에서의 벡터 표현을 제공합니다. OpenAI의 임베딩은 특히 텍스트 생성 및 검색 태스크에서 유용합니다.
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.vectorstores import FAISS
from langchain.text_splitter import CharacterTextSplitter
from langchain.document_loaders import TextLoader
# 1. 텍스트 파일 로드
loader = TextLoader("example.txt")
docs = loader.load()
# 2. 텍스트 분할
splitter = CharacterTextSplitter(chunk_size=200, chunk_overlap=50)
split_docs = splitter.split_documents(docs)
# 3. Hugging Face 모델을 사용한 임베딩 생성
embedding_model = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")
vector_store = FAISS.from_documents(split_docs, embedding_model)
2. Vector DB 저장
벡터 저장소는 Faiss(Facebook AI Similarity Search), Chroma, Elasticsearch, Pinecone 등 다양하게 존재하는데요, 목적(속도, 비용, 클라우드 지원 여부가 각각 다릅니다)에 맞게 선택해서 vector DB에 저장해야겠죠? 위의 예시 마지막 줄이 사실은 Vector DB저장 코드였습니다.
Vector DB | 특징 |
FAISS | 로컬에서 빠르게 벡터 검색 수행 |
ChromaDB | LangChain과 쉽게 연동 가능 |
Pinecone | 클라우드 기반 대규모 검색 지원 |
Weaviate | AI 기반으로 스칼라+벡터 검색 가능 |
FAISS (Facebook AI Similarity Search) 사용 예시
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.vectorstores import FAISS
from langchain.text_splitter import CharacterTextSplitter
from langchain.document_loaders import TextLoader
# 1. 문서 로드
loader = TextLoader("example.txt")
docs = loader.load()
# 2. 문서 분할
splitter = CharacterTextSplitter(chunk_size=200, chunk_overlap=50)
split_docs = splitter.split_documents(docs)
# 3. HuggingFace Embedding 사용
embedding_model = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")
# 4. FAISS 벡터 저장소에 문서 저장
vector_store = FAISS.from_documents(split_docs, embedding_model)
# 5. 저장된 DB를 로컬에 저장
vector_store.save_local("faiss_index")
# 6. 저장된 DB를 불러오기
new_vector_store = FAISS.load_local("faiss_index", embedding_model)
# 7. 벡터 검색 수행
query = "What is LangChain?"
results = new_vector_store.similarity_search(query, k=3)
for res in results:
print(res.page_content)
ChromaDB 사용 예시
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.document_loaders import TextLoader
from langchain.text_splitter import CharacterTextSplitter
# 1. 문서 로드
loader = TextLoader("example.txt")
docs = loader.load()
# 2. 문서 분할
splitter = CharacterTextSplitter(chunk_size=200, chunk_overlap=50)
split_docs = splitter.split_documents(docs)
# 3. OpenAI Embeddings 사용
embedding_model = OpenAIEmbeddings()
# 4. ChromaDB에 저장
vector_store = Chroma.from_documents(split_docs, embedding_model, persist_directory="chroma_db")
# 5. 저장된 DB 불러오기
new_vector_store = Chroma(persist_directory="chroma_db", embedding_function=embedding_model)
# 6. 벡터 검색 수행
query = "What is LangChain?"
results = new_vector_store.similarity_search(query, k=3)
for res in results:
print(res.page_content)
사실 마지막의 "벡터 검색 수행"은 Retriever인데요, 이 부분은 다음 포스팅에서 이어가겠습니다.
'Data & Research' 카테고리의 다른 글
[LLM & RAG] Langchain 기초 - Chain (0) | 2025.04.03 |
---|---|
[LLM & RAG] Langchain 기초 - Retriever (2) | 2025.04.02 |
[LLM & RAG] Langchain 기초 - Splitter (0) | 2025.04.01 |
[LLM & RAG] Langchain 기초 - 데이터 로드 (0) | 2025.04.01 |
[LLM & RAG] RAG Procedure (0) | 2025.04.01 |