한국어 토크나이저(형태소 분석기)를 사용하여 우선적으로 문서들을 tokenizing한 후에, 임베딩하는 방법이다.
먼저 토크나이저 함수를 미리 정의한다.
from konlpy.tag import Komoran
komoran = Komoran()
def komoran_tokenize(text):
return komoran.morphs(text)
BM25Retriever의 preprocess_func 파라미터에 전처리 함수인 토크나이저를 전달한다.
BM25Retirever와 같은 sparse retriever에 형태소 분석이 필요한 이유 : sparse retriever는 유사한 키워드를 검색하는 것에 초점을 두기 때문에 한국어의 원형을 알수록 유리하다. 따라서 형태소 분석을 통해 최대한 원형을 추출하는 것이 키워드 검색에 좋다.
그러나 dense retriever에 형태소 분석같은 전처리를 적용하면 오히려 문장의 의미를 해칠 수 있다.
bm25_retriever = BM25Retriever.from_documents(
documents=splitted_docs,
preprocess_func=komoran_tokenize
)
bm25_retriever.k = 5
ensemble_retriever = EnsembleRetriever(
retrievers=[bm25_retriever, retriever],
weight=[0.3, 0.7]
)