Spaces:
Sleeping
Sleeping
Replaced HuggingFaceEmbeddings with HuggingFaceBgeEmbeddings, updated embedding normalization, and adjusted retriever weights.
Browse files
app.py
CHANGED
@@ -6,7 +6,7 @@ from langchain_text_splitters import RecursiveCharacterTextSplitter, Language
|
|
6 |
|
7 |
from langchain.embeddings import CacheBackedEmbeddings
|
8 |
from langchain.storage import LocalFileStore
|
9 |
-
from langchain_community.embeddings import
|
10 |
from langchain_community.vectorstores import FAISS
|
11 |
|
12 |
from langchain_community.retrievers import BM25Retriever
|
@@ -33,11 +33,11 @@ directories = ["./docs/obsidian-help", "./docs/obsidian-developer"]
|
|
33 |
|
34 |
|
35 |
# 1. 문서 로더를 사용하여 모든 .md 파일을 로드합니다.
|
36 |
-
|
37 |
for directory in directories:
|
38 |
try:
|
39 |
loader = ObsidianLoader(directory, encoding="utf-8")
|
40 |
-
|
41 |
except Exception:
|
42 |
pass
|
43 |
|
@@ -49,7 +49,7 @@ md_splitter = RecursiveCharacterTextSplitter.from_language(
|
|
49 |
chunk_size=2000,
|
50 |
chunk_overlap=200,
|
51 |
)
|
52 |
-
|
53 |
|
54 |
|
55 |
# 3. 임베딩 모델을 사용하여 문서의 임베딩을 계산합니다.
|
@@ -59,8 +59,8 @@ if platform.system() == "Darwin":
|
|
59 |
else:
|
60 |
model_kwargs = {"device": "cpu"}
|
61 |
model_name = "BAAI/bge-m3"
|
62 |
-
encode_kwargs = {"normalize_embeddings":
|
63 |
-
embeddings =
|
64 |
model_name=model_name,
|
65 |
model_kwargs=model_kwargs,
|
66 |
encode_kwargs=encode_kwargs,
|
@@ -87,7 +87,7 @@ if os.path.exists(FAISS_DB_INDEX):
|
|
87 |
else:
|
88 |
# combined_documents 문서들과 cached_embeddings 임베딩을 사용하여
|
89 |
# FAISS 데이터베이스 인스턴스를 생성합니다.
|
90 |
-
db = FAISS.from_documents(
|
91 |
# 생성된 데이터베이스 인스턴스를 지정한 폴더에 로컬로 저장합니다.
|
92 |
db.save_local(folder_path=FAISS_DB_INDEX)
|
93 |
|
@@ -96,13 +96,13 @@ else:
|
|
96 |
faiss_retriever = db.as_retriever(search_type="mmr", search_kwargs={"k": 10})
|
97 |
|
98 |
# 문서 컬렉션을 사용하여 BM25 검색 모델 인스턴스를 생성합니다.
|
99 |
-
bm25_retriever = BM25Retriever.from_documents(
|
100 |
bm25_retriever.k = 10 # 검색 시 최대 10개의 결과를 반환하도록 합니다.
|
101 |
|
102 |
# EnsembleRetriever 인스턴스를 생성합니다.
|
103 |
ensemble_retriever = EnsembleRetriever(
|
104 |
retrievers=[bm25_retriever, faiss_retriever], # 사용할 검색 모델의 리스트
|
105 |
-
weights=[0.
|
106 |
search_type="mmr", # 검색 결과의 다양성을 증진시키는 MMR 방식을 사용
|
107 |
)
|
108 |
|
|
|
6 |
|
7 |
from langchain.embeddings import CacheBackedEmbeddings
|
8 |
from langchain.storage import LocalFileStore
|
9 |
+
from langchain_community.embeddings import HuggingFaceBgeEmbeddings
|
10 |
from langchain_community.vectorstores import FAISS
|
11 |
|
12 |
from langchain_community.retrievers import BM25Retriever
|
|
|
33 |
|
34 |
|
35 |
# 1. 문서 로더를 사용하여 모든 .md 파일을 로드합니다.
|
36 |
+
md_docs = []
|
37 |
for directory in directories:
|
38 |
try:
|
39 |
loader = ObsidianLoader(directory, encoding="utf-8")
|
40 |
+
md_docs.extend(loader.load())
|
41 |
except Exception:
|
42 |
pass
|
43 |
|
|
|
49 |
chunk_size=2000,
|
50 |
chunk_overlap=200,
|
51 |
)
|
52 |
+
splitted_docs = md_splitter.split_documents(md_docs)
|
53 |
|
54 |
|
55 |
# 3. 임베딩 모델을 사용하여 문서의 임베딩을 계산합니다.
|
|
|
59 |
else:
|
60 |
model_kwargs = {"device": "cpu"}
|
61 |
model_name = "BAAI/bge-m3"
|
62 |
+
encode_kwargs = {"normalize_embeddings": True}
|
63 |
+
embeddings = HuggingFaceBgeEmbeddings(
|
64 |
model_name=model_name,
|
65 |
model_kwargs=model_kwargs,
|
66 |
encode_kwargs=encode_kwargs,
|
|
|
87 |
else:
|
88 |
# combined_documents 문서들과 cached_embeddings 임베딩을 사용하여
|
89 |
# FAISS 데이터베이스 인스턴스를 생성합니다.
|
90 |
+
db = FAISS.from_documents(splitted_docs, cached_embeddings)
|
91 |
# 생성된 데이터베이스 인스턴스를 지정한 폴더에 로컬로 저장합니다.
|
92 |
db.save_local(folder_path=FAISS_DB_INDEX)
|
93 |
|
|
|
96 |
faiss_retriever = db.as_retriever(search_type="mmr", search_kwargs={"k": 10})
|
97 |
|
98 |
# 문서 컬렉션을 사용하여 BM25 검색 모델 인스턴스를 생성합니다.
|
99 |
+
bm25_retriever = BM25Retriever.from_documents(splitted_docs) # 초기화에 사용할 문서 컬렉션
|
100 |
bm25_retriever.k = 10 # 검색 시 최대 10개의 결과를 반환하도록 합니다.
|
101 |
|
102 |
# EnsembleRetriever 인스턴스를 생성합니다.
|
103 |
ensemble_retriever = EnsembleRetriever(
|
104 |
retrievers=[bm25_retriever, faiss_retriever], # 사용할 검색 모델의 리스트
|
105 |
+
weights=[0.5, 0.5], # 각 검색 모델의 결과에 적용할 가중치
|
106 |
search_type="mmr", # 검색 결과의 다양성을 증진시키는 MMR 방식을 사용
|
107 |
)
|
108 |
|