anpigon commited on
Commit
7b40096
1 Parent(s): e272fa2

Replaced HuggingFaceEmbeddings with HuggingFaceBgeEmbeddings, updated embedding normalization, and adjusted retriever weights.

Browse files
Files changed (1) hide show
  1. app.py +9 -9
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 HuggingFaceEmbeddings
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
- md_documents = []
37
  for directory in directories:
38
  try:
39
  loader = ObsidianLoader(directory, encoding="utf-8")
40
- md_documents.extend(loader.load())
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
- md_docs = md_splitter.split_documents(md_documents)
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": False}
63
- embeddings = HuggingFaceEmbeddings(
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(md_docs, cached_embeddings)
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(md_docs) # 초기화에 사용할 문서 컬렉션
100
  bm25_retriever.k = 10 # 검색 시 최대 10개의 결과를 반환하도록 합니다.
101
 
102
  # EnsembleRetriever 인스턴스를 생성합니다.
103
  ensemble_retriever = EnsembleRetriever(
104
  retrievers=[bm25_retriever, faiss_retriever], # 사용할 검색 모델의 리스트
105
- weights=[0.6, 0.4], # 각 검색 모델의 결과에 적용할 가중치
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