[RAG] 한국어 Reranker 모델을 사용하여 RAG 성능 올리기
ReRanking 모델을 사용하여 RAG의 출력 품질을 향상시킬 수 있습니다.
개요
아래 자료를 참고하여 테스트하고 작성하였습니다.
최근 LLM 모델의 성능 향상을 위해 RAG를 연결하여 최신 정보를 반영시키고 부정확성이나 환각을 줄이고자 노력하고 있습니다. 하지만 RAG 시스템이 다양하고 복잡한 애플리케이션에 적용되면서 단순한 시멘틱 벡터 검색 및 답변은 기본적인 파이프라인 만으로는 프로덕션 레벨의 성능과 요구 사항을 만족시키는게 불가능합니다.따라서 LLM 모델의 성능을 향상시키기 위해 RAG 방식에 더해 다양한 기법들이 출시되고 있습니다. 여러 방법 중 하나로 대표적인 것이 바로 Reranking 입니다.RAG가 참조한 후보 문서들의 관련성 및 일관성을 판단하여 우선 순위를 재정렬 하는 것으로, 질문과 관련성 있는 문서들을 context 상위권에 위치시킴으로써, 답변의 정확도를 올리는 방법입니다.
기본적인 RAG 방식의 문제
기존 RAG는 텍스트 데이터의 의미적 유사성을 기반으로 검색을 수행하는 과정을 수행합니다.이러한 방식에서 일반적으로 Vector 검색을 활용하고 있는데, 이러한 과정에서 두 가지의 정보 손실이 발생하게 됩니다.
- 문서를 임베딩 벡터로 변환하는 과정에서의 손실
임베딩 벡터 변환은 문서를 n개의 숫자로 재표현하는 것을 의미하는데, 문서가 긴 경우에는 정해진 벡터의 차원으로 표현하기 어려워지며 정보의 손실이 발생하게 됩니다.
- 검색 과정에서의 손실
RAG 방식은 검색 시간 단축을 위해 Approximate Nearnest Neighbor search (ANNs) 기술을 활용하고 있습니다.이러한 방법은 질문과 문서 사이의 관련성 체크 횟수를 줄이기때문에 검색속도를 높힐 순 있지만 관련성 정확도 하락이 정보의 손실로 나타나게 됩니다.이러한 정보 손실로 인해 LLM으로 전달되는 컨텍스트의 상위 k개 이내의 질문에 대한 정보가 누락되는 경우가 발생합니다.정보 누락을 해결하기 위해 단순히 검색 후 반환되는 문서(k)를 늘림으로써 간단히 해결할 수 있습니다.하지만 기본적으로 LLM에 전달하는 컨텍스트가 늘어나고, 전체 내용 자체가 성능 및 비용 효율적이지 않습니다.동시에 RAG의 정확도는 관련 정보의 컨텍스트 존재 유무가 아닌 관련 정보가 컨텍스트 자체 상위권에 위치하고 있을 때 좋은 답변을 얻을 수 있습니다.

1st 문서일 수록 정확도가 늘어나고,그 뒤 문서는 정확도가 낮아집니다.즉, 단순히 관련 정보가 존재하는 것과는 관련없이, 관련 정보가 컨텍스트 내 상위권에 위치하고 있을 때 좋은 답변을 얻을 수 있다는 뜻 입니다
문제 해결을 위한 Reranker
RAG의 성능을 향상 시키기 위해서는 질문에 대한 관련 문서가 컨텍스트에 존재 할 뿐만 아니라, 컨텍스트 내에서 그 순서 또한 상위권에 위치하고 있어야 함을 알 수 있었습니다.Reranker를 통해 질문과 문서 사이의 유사도를 측정하는 것을 목표로 합니다.하지만 질문과 문서에 대한 독립적인 임베딩을 활용하는 Bi-encoder 형태 (그림 A)의 벡터 검색과는 다르게 Reranker는 질문과 문서를 하나의 인풋으로 활용하는 Cross-encoder 형태 (그림 B)라는 점에서 차이를 보이고 있습니다.Bi-encoder 구조
- Document A와 Document B를 하나는 질문, 하나는 문서라고 생각한다면 각 encoder를 돌린 후 유사도를 계산하여 관련성을 평가합니다.
Cross-encoder 구조
- 하나의 인코더를 사용하여 두 입력을 결합한 후 한 번에 처리합니다. 이 접근 방식은 입력 간의 상호작용을 모델링할 수 있으며, 이를 통해 더 정교한 관계를 이해할 수 있습니다.

검색된 문서를 cross-encoder로 구성된 reranking으로 넣어 최종적으로 쿼리에 대한 유사도로 정렬하게 됩니다.Reranker는 질문과 문서를 동시에 분석 (Self-attention) 함으로써, 독립적인 임베딩 벡터 기반의 Bi-encoder 방식에 비해 더욱 정확한 유사도 측정이 가능하다는 장점을 가지고 있습니다. 질문과 문서를 동시에 인풋으로 활용하는 Reranker의 특성 상, 사용자가 질문을 하는 시점에서 모든 문서들에 대해 주어진 질문과 관련성이 측정되어야합니다.
Sentence-BERT [2]에서는 4천만개 문서에 대해 V100 GPU기반으로 연관성 측정을 수행했을 때 약 50시간이 소요 된다고 합니다.
하지만 이렇게 구성하게 된다면 시간이 매우 오래 걸리게 되므로, 이러한 문제를 해결하기 위해 두 단계 전략을 적용할 수 있습니다.우선 Vector 검색을 진행하여 많은 문서 중 관련성이 높은 후보군을 검색하고, 두 번째 단계에서 검색된 문서들에 대해서만 reranker 기반으로 관련성을 재측정하는 방식입니다.

이렇게 진행하게 된다면 문서의 검색 속도를 높이는 동시에 정확한 측정을 하는 것이 가능해집니다.
Reranker 모델과 RAG 통합 테스트
- Opensearch가 설정되어야합니다.
- Dongjin-kr/ko-reranker
- 한국어 파인튜닝 모델을 사용하였습니다.
전체적인 RAG 통합을 확인하기 위해선 위 코드를 다운받고 실행해야합니다.
Reranker 모델 배포하기
deploy = True
if deploy:
try:
role = sagemaker.get_execution_role()
except ValueError:
iam = boto3.client('iam')
role = iam.get_role(RoleName='bjc_sagemaker_execution_role')['Role']['Arn']
# Hub Model configuration. https://huggingface.co/models
hub = {
'HF_MODEL_ID':'Dongjin-kr/ko-reranker',
'HF_TASK':'text-classification'
}
# create Hugging Face Model Class
huggingface_model = HuggingFaceModel(
transformers_version='4.28.1',
pytorch_version='2.0.0',
py_version='py310',
env=hub,
role=role,
)
# deploy model to SageMaker Inference
predictor = huggingface_model.deploy(
initial_instance_count=1, # number of instances
instance_type='ml.g5.xlarge' # instance type
)
print(f'Accept: {predictor.accept}')
print(f'ContentType: {predictor.content_type}')
print(f'Endpoint: {predictor.endpoint}')
Reranker Deploy & Invocation
runtime_client = boto3.Session().client('sagemaker-runtime')
print (f'runtime_client: {runtime_client}')payload = json.dumps(
{
"inputs": [
{"text": "I hate you", "text_pair": "I don't like you"},
{"text": "He hates you", "text_pair": "He like you"},
{"text": "그는 너를 싫어해", "text_pair": "그는 너를 좋아해"}
]
}
)%%time
response = runtime_client.invoke_endpoint(
EndpointName=endpoint_name,
ContentType="application/json",
Accept=deserializer,
Body=payload
)
## deserialization
out = json.loads(response['Body'].read().decode()) ## for json
print (f'Response: {out}')text와 text_paier간 비교를 진행했을 때 결과는 다음과 같습니다. score가 높으면 높을 수록 서로 유사한 단어라는 것을 의미합니다.{'label': 'LABEL_0', 'score': 0.9987371563911438},
{'label': 'LABEL_0', 'score': 0.0028581616934388876},
{'label': 'LABEL_0', 'score': 0.004707992542535067}
CPU times: user 17.8 ms, sys: 153 µs, total: 18 ms
Wall time: 990 msopensearch에서 검색된 결과를 Reranking합니다.Reranking 모델
참조: https://huggingface.co/Dongjin-kr/ko-reranker
Retriever based on Hybrid Search 정의
Opensearch Hybrid는 아래와 같은 방식으로 작동합니다.
- Sematic serch를 통해 각 document별 relevant score 산출
- Lexical search를 통해 각 document별 relevant score 산출
- Rank-fusion(Hybrid) 방식이 "simple weighted" 일 경우
- 산출된 score에 대한 normalization 수행
- 전체 결과에서 가장 높은 스코어는 표준화 과정을 통하여 스코어가 1.0 이 됩니다.
- Rank-fusion 방식이 "Reciprocal Rank Fusion (RRF)" 일 경우
- RRF의 경우 score가 아닌 ranking 정보를 활용, 때문에 score normalization이 필요 없음
- RRF는 langchain에서 "Ensemble Retriever" 이름으로 api를 제공합니다.
OpenSearchHybridSearchRetriever
구조에서 reranker model의 엔드포인트를 정의합니다.
opensearch_hybrid_retriever = OpenSearchHybridSearchRetriever(
# necessary
os_client=os_client,
index_name=index_name,
llm_emb=llm_emb,
llm_text=llm_text,
vector_db=vector_db,
# option for lexical
minimum_should_match=0,
filter=[],
# option for rank fusion
fusion_algorithm="RRF", # ["RRF", "simple_weighted"], rank fusion 방식 정의
ensemble_weights=[.51, .49], # [for semantic, for lexical], Semantic, Lexical search 결과에 대한 최종 반영 비율 정의
reranker=True, # enable reranker with reranker model
reranker_endpoint_name=endpoint_name, # endpoint name for reranking model
# option for async search
async_mode=True,
# option for output
k=5, # 최종 Document 수 정의
verbose=True
)
%%time
search_hybrid_result = opensearch_hybrid_retriever.get_relevant_documents(query)
print("\n========== Results ==========\n")
print(f'1. question: {query}')
print (f'2. # documents: {len(search_hybrid_result)}')
print("3. Documents: \n")
search_hybrid_result
show_context_used(search_hybrid_result)Hybrid search > 검색된 결과를 weights에 따라 ensemble > reranker를 통한 정렬 def search_hybrid(cls, **kwargs):
if hyde:
assert "hyde_query" in kwargs, "if you use HyDE, Check your hyde_query"
......
if async_mode:
similar_docs_semantic, similar_docs_keyword = do_async()
else:
similar_docs_semantic, similar_docs_keyword = do_sync()
similar_docs = cls.get_ensemble_results(
doc_lists=[similar_docs_semantic, similar_docs_keyword],
weights=kwargs.get("ensemble_weights", [.51, .49]),
algorithm=kwargs.get("fusion_algorithm", "RRF"), # ["RRF", "simple_weighted"]
c=60,
k=kwargs.get("k", 5) if not reranker else int(kwargs["k"]*1.5),
)
if reranker:
reranker_endpoint_name = kwargs["reranker_endpoint_name"]
similar_docs = cls.get_rerank_docs(
llm_text=kwargs["llm_text"],
query=kwargs["query"],
context=similar_docs,
k=kwargs.get("k", 5),
reranker_endpoint_name=reranker_endpoint_name,
verbose=verbose
)
...lexical search query:
{'query': {'bool': {'filter': [],
'must': [{'match': {'text': {'minimum_should_match': '0%', 'operator': 'or','query': '중지된 경우 이체'}}}]}}, 'size': 5}
##############################
similar_docs_semantic
##############################
[(Document(page_content='ask: 12개월 장기미이체로 이체서비스가 중지된 경우 어떻게 해제하나요?\ninformation: 최근 12개월동안 인터넷뱅킹/폰뱅킹/모바일뱅킹에서 이체서비스를 이용하지 않은 경우 고객님의 금융자산 보호를 위하여 이체서비스가 중단됩니다. 다시 이체를 원하시는 경우에는 인터넷뱅킹/폰뱅킹/신한쏠(SOL)에서 이체정지 해제를 하실 수 있습니다.(단, 인터넷뱅킹 출금계좌가 등록되어 있는 경우) [경로] ① 당행 고객정보에 등록되어있는 연락처로 ARS 추가인증 가능한 경우: - 인터넷뱅킹 로그인→ 사용자관리→ 인터넷뱅킹관리→ 장기미사용 정지해제 (또는) - 쏠(SOL) 로그인→ 전체메뉴→ 이체 → 이체관리→ 장기미사용정지 해제 ② ARS 추가인증이 불가한 경우 (해외체류 고객등) : - 인터넷뱅킹에서는 해제 어려우며, 쏠 (SOL)에서 해제 가능합니다. 쏠(SOL)의 경로는 위와 동일하며, 비대면 실명인증후 해제 가능합니다. 비대면실명인증 - 만 14세이상 가능 - 신분증확인 (주민등록증 또는 운전면허증 또는 여권) - 본인확인 (본인명의 계좌인증 또는 영상통화) 진행 기타 궁금하신 내용은 신한은행 고객센터 1599-8000로 문의하여 주시기 바랍니다', metadata={'source': '신한은행', 'row': 37, 'type': '인터넷뱅킹', 'timestamp': 1712812972.7048588}), 1.0),
(Document(page_content='ask: 12개월 장기미이체로 이체서비스가 중지된 경우 어떻게 해제하나요?\ninformation: 최근 12개월동안 인터넷뱅킹/폰뱅킹/모바일뱅킹에서 이체서비스를 이용하지 않은 경우 고객님의 금융자산 보호를 위하여 이체서비스가 중단됩니다. 다시 이체를 원하시는 경우에는 인터넷뱅킹/폰뱅킹/신한쏠(SOL)에서 이체정지 해제를 하실 수 있습니다.(단, 인터넷뱅킹 출금계좌가 등록되어 있는 경우) [경로] ① 당행 고객정보에 등록되어있는 연락처로 ARS 추가인증 가능한 경우: - 인터넷뱅킹 로그인→ 사용자관리→ 인터넷뱅킹관리→ 장기미사용 정지해제 (또는) - 쏠(SOL) 로그인→ 전체메뉴→ 이체 → 이체관리→ 장기미사용정지 해제 ② ARS 추가인증이 불가한 경우 (해외체류 고객등) : - 인터넷뱅킹에서는 해제 어려우며, 쏠 (SOL)에서 해제 가능합니다. 쏠(SOL)의 경로는 위와 동일하며, 비대면 실명인증후 해제 가능합니다. 비대면실명인증 - 만 14세이상 가능 - 신분증확인 (주민등록증 또는 운전면허증 또는 여권) - 본인확인 (본인명의 계좌인증 또는 영상통화) 진행 기타 궁금하신 내용은 신한은행 고객센터 1599-8000로 문의하여 주시기 바랍니다', metadata={'source': '신한은행', 'row': 37, 'type': '인터넷뱅킹', 'timestamp': 1712881006.3272657}), 0.999998100961089),
(Document(page_content='ask: 홈페이지 회원가입은 어떻게 해야 하나요?\ninformation: 홈페이지 상단에 있는 [고객센터]를 클릭하여, 회원서비스 → 회원가입메뉴에서 회원가입 메뉴를 이용하시기 바랍니다. 기타 문의는 콜센터 1599-8000번으로 문의 바랍니다.', metadata={'source': '신한은행', 'row': 46, 'type': '홈페이지', 'timestamp': 1712812972.7052248}), 0.980016559619304),
(Document(page_content='ask: 홈페이지 회원가입은 어떻게 해야 하나요?\ninformation: 홈페이지 상단에 있는 [고객센터]를 클릭하여, 회원서비스 → 회원가입메뉴에서 회원가입 메뉴를 이용하시기 바랍니다. 기타 문의는 콜센터 1599-8000번으로 문의 바랍니다.', metadata={'source': '신한은행', 'row': 46, 'type': '홈페이지', 'timestamp': 1712881006.327556}), 0.980016559619304),
(Document(page_content='ask: 신탁적금(당행)으로 이체시 토요일 인터넷뱅시간 제한하는 방법은?\ninformation: "우측 상단 QUICK MENU의 이용안내를 참고하시기 바랍니다.', metadata={'source': '신한은행', 'row': 60, 'type': '인증서', 'timestamp': 1712881006.328113}), 0.9754582819132029)]
##############################
similar_docs_keyword
##############################
[(Document(page_content='ask: 12개월 장기미이체로 이체서비스가 중지된 경우 어떻게 해제하나요?\ninformation: 최근 12개월동안 인터넷뱅킹/폰뱅킹/모바일뱅킹에서 이체서비스를 이용하지 않은 경우 고객님의 금융자산 보호를 위하여 이체서비스가 중단됩니다. 다시 이체를 원하시는 경우에는 인터넷뱅킹/폰뱅킹/신한쏠(SOL)에서 이체정지 해제를 하실 수 있습니다.(단, 인터넷뱅킹 출금계좌가 등록되어 있는 경우) [경로] ① 당행 고객정보에 등록되어있는 연락처로 ARS 추가인증 가능한 경우: - 인터넷뱅킹 로그인→ 사용자관리→ 인터넷뱅킹관리→ 장기미사용 정지해제 (또는) - 쏠(SOL) 로그인→ 전체메뉴→ 이체 → 이체관리→ 장기미사용정지 해제 ② ARS 추가인증이 불가한 경우 (해외체류 고객등) : - 인터넷뱅킹에서는 해제 어려우며, 쏠 (SOL)에서 해제 가능합니다. 쏠(SOL)의 경로는 위와 동일하며, 비대면 실명인증후 해제 가능합니다. 비대면실명인증 - 만 14세이상 가능 - 신분증확인 (주민등록증 또는 운전면허증 또는 여권) - 본인확인 (본인명의 계좌인증 또는 영상통화) 진행 기타 궁금하신 내용은 신한은행 고객센터 1599-8000로 문의하여 주시기 바랍니다', metadata={'source': '신한은행', 'row': 37, 'type': '인터넷뱅킹', 'timestamp': 1712812972.7048588, 'id': 'd522bcc9-ad03-4c72-ba6c-0f7cd1cd4e9f'}), 1.0),
(Document(page_content='ask: 12개월 장기미이체로 이체서비스가 중지된 경우 어떻게 해제하나요?\ninformation: 최근 12개월동안 인터넷뱅킹/폰뱅킹/모바일뱅킹에서 이체서비스를 이용하지 않은 경우 고객님의 금융자산 보호를 위하여 이체서비스가 중단됩니다. 다시 이체를 원하시는 경우에는 인터넷뱅킹/폰뱅킹/신한쏠(SOL)에서 이체정지 해제를 하실 수 있습니다.(단, 인터넷뱅킹 출금계좌가 등록되어 있는 경우) [경로] ① 당행 고객정보에 등록되어있는 연락처로 ARS 추가인증 가능한 경우: - 인터넷뱅킹 로그인→ 사용자관리→ 인터넷뱅킹관리→ 장기미사용 정지해제 (또는) - 쏠(SOL) 로그인→ 전체메뉴→ 이체 → 이체관리→ 장기미사용정지 해제 ② ARS 추가인증이 불가한 경우 (해외체류 고객등) : - 인터넷뱅킹에서는 해제 어려우며, 쏠 (SOL)에서 해제 가능합니다. 쏠(SOL)의 경로는 위와 동일하며, 비대면 실명인증후 해제 가능합니다. 비대면실명인증 - 만 14세이상 가능 - 신분증확인 (주민등록증 또는 운전면허증 또는 여권) - 본인확인 (본인명의 계좌인증 또는 영상통화) 진행 기타 궁금하신 내용은 신한은행 고객센터 1599-8000로 문의하여 주시기 바랍니다', metadata={'source': '신한은행', 'row': 37, 'type': '인터넷뱅킹', 'timestamp': 1712881006.3272657, 'id': 'aceb8bd2-c8d8-41a4-9c97-e0a8f777e0e9'}), 1.0),
(Document(page_content='ask: 예약이체를 했는데 이체일에 송금이 안된 경우는?\ninformation: 모든 예약이체 등록건은 예약이체 지정일 지정된 시간(오전 7시, 오전 9시, 오전 11시, 오후 1시, 오후 3시, 오후 5시, 오후 7시, 오후 9시) 이전에 출금할 계좌에 송금액이 입금이 되어야 이체가 실행될 수 있습니다.\r\n이체가 되지 않았다고 판단되실 경우에는 반드시 먼저 "예약이체처리결과조회" 또는 "계좌 거래내역"을 확인 하시어 이체여부 및 출금여부를 확인하시기 바랍니다. 또한 예약이체 신청시 SMS 결과통보신청을 하셨다면 요청하신 휴대폰번호로 수신된 문자를 확인해주시기 바라며, 정해진 시간에 이체되지 않은 경우 신한은행 고객상담센터 ☎ 1599-8000번으로 문의 주시기 바랍니다.', metadata={'source': '신한은행', 'row': 34, 'type': '인터넷뱅킹', 'timestamp': 1712881006.327168, 'id': '09e35e67-0359-4404-b3f3-96ab03562d9a'}), 0.8577516565705328),
(Document(page_content='ask: 즉시/예약 이체 서비스가 안되는 경우 어떻게 해야해?\ninformation: 이체서비스가 되지 않는 경우 여러가지 사유가 있을수 있으니, 신한은행 고객상담센터 1599-8000번으로 문의 주시면 자세히 상담해드리겠습니다.', metadata={'source': '신한은행', 'row': 59, 'type': '인터넷뱅킹', 'timestamp': 1712812972.7060375, 'id': '9372d8cf-2a33-44dc-a82b-9e16e21253ff'}), 0.8231728994328118),
(Document(page_content='ask: 타행으로 자동이체를 신청하고 싶은데요\ninformation: 인터넷뱅킹을 통한 타은행 계좌로의 자동이체(납부자 자동이체)신청이 가능하며 수수료는 건당 300원 입니다. 자동이체를 신청하시려면 인터넷뱅킹에 로그인 하신후 [이체] > [자동이체] > [자동이체 등록] 메뉴를 선택하시면 타행으로의 자동이체 등록을 하실 수 있습니다. ※ 주의: 타은행 자동이체는 이체 지정일 전영업일에 고객님의 계좌에서 인출하여 이체지정일자(지정일이 휴일인 경우에는 익영업일)에 타은행 계좌로 입금됩니다. 그러므로 예금잔액이 없으면 이체처리가 안되며, 이후잔액이 채워져도 재처리를 하지 않습니다. 따라서 고객님께서 자동이체를 신청하실 때에는 충분한 잔액이 있는지 확인하시기 바랍니다.', metadata={'source': '신한은행', 'row': 85, 'type': '인터넷뱅킹', 'timestamp': 1712881006.329127, 'id': '5d832d95-e870-48b8-abee-d80b779b1220'}), 0.8074891737914539)]
##############################
similar_docs_ensemble
##############################
[(Document(page_content='ask: 12개월 장기미이체로 이체서비스가 중지된 경우 어떻게 해제하나요?\ninformation: 최근 12개월동안 인터넷뱅킹/폰뱅킹/모바일뱅킹에서 이체서비스를 이용하지 않은 경우 고객님의 금융자산 보호를 위하여 이체서비스가 중단됩니다. 다시 이체를 원하시는 경우에는 인터넷뱅킹/폰뱅킹/신한쏠(SOL)에서 이체정지 해제를 하실 수 있습니다.(단, 인터넷뱅킹 출금계좌가 등록되어 있는 경우) [경로] ① 당행 고객정보에 등록되어있는 연락처로 ARS 추가인증 가능한 경우: - 인터넷뱅킹 로그인→ 사용자관리→ 인터넷뱅킹관리→ 장기미사용 정지해제 (또는) - 쏠(SOL) 로그인→ 전체메뉴→ 이체 → 이체관리→ 장기미사용정지 해제 ② ARS 추가인증이 불가한 경우 (해외체류 고객등) : - 인터넷뱅킹에서는 해제 어려우며, 쏠 (SOL)에서 해제 가능합니다. 쏠(SOL)의 경로는 위와 동일하며, 비대면 실명인증후 해제 가능합니다. 비대면실명인증 - 만 14세이상 가능 - 신분증확인 (주민등록증 또는 운전면허증 또는 여권) - 본인확인 (본인명의 계좌인증 또는 영상통화) 진행 기타 궁금하신 내용은 신한은행 고객센터 1599-8000로 문의하여 주시기 바랍니다', metadata={'source': '신한은행', 'row': 37, 'type': '인터넷뱅킹', 'timestamp': 1712881006.3272657, 'id': 'aceb8bd2-c8d8-41a4-9c97-e0a8f777e0e9'}), 0.03252247488101534),
(Document(page_content='ask: 홈페이지 회원가입은 어떻게 해야 하나요?\ninformation: 홈페이지 상단에 있는 [고객센터]를 클릭하여, 회원서비스 → 회원가입메뉴에서 회원가입 메뉴를 이용하시기 바랍니다. 기타 문의는 콜센터 1599-8000번으로 문의 바랍니다.', metadata={'source': '신한은행', 'row': 46, 'type': '홈페이지', 'timestamp': 1712881006.327556}), 0.016063988095238096),
(Document(page_content='ask: 신탁적금(당행)으로 이체시 토요일 인터넷뱅시간 제한하는 방법은?\ninformation: "우측 상단 QUICK MENU의 이용안내를 참고하시기 바랍니다.', metadata={'source': '신한은행', 'row': 60, 'type': '인증서', 'timestamp': 1712881006.328113}), 0.007846153846153846),
(Document(page_content='ask: 예약이체를 했는데 이체일에 송금이 안된 경우는?\ninformation: 모든 예약이체 등록건은 예약이체 지정일 지정된 시간(오전 7시, 오전 9시, 오전 11시, 오후 1시, 오후 3시, 오후 5시, 오후 7시, 오후 9시) 이전에 출금할 계좌에 송금액이 입금이 되어야 이체가 실행될 수 있습니다.\r\n이체가 되지 않았다고 판단되실 경우에는 반드시 먼저 "예약이체처리결과조회" 또는 "계좌 거래내역"을 확인 하시어 이체여부 및 출금여부를 확인하시기 바랍니다. 또한 예약이체 신청시 SMS 결과통보신청을 하셨다면 요청하신 휴대폰번호로 수신된 문자를 확인해주시기 바라며, 정해진 시간에 이체되지 않은 경우 신한은행 고객상담센터 ☎ 1599-8000번으로 문의 주시기 바랍니다.', metadata={'source': '신한은행', 'row': 34, 'type': '인터넷뱅킹', 'timestamp': 1712881006.327168, 'id': '09e35e67-0359-4404-b3f3-96ab03562d9a'}), 0.0077777777777777776),
(Document(page_content='ask: 즉시/예약 이체 서비스가 안되는 경우 어떻게 해야해?\ninformation: 이체서비스가 되지 않는 경우 여러가지 사유가 있을수 있으니, 신한은행 고객상담센터 1599-8000번으로 문의 주시면 자세히 상담해드리겠습니다.', metadata={'source': '신한은행', 'row': 59, 'type': '인터넷뱅킹', 'timestamp': 1712812972.7060375, 'id': '9372d8cf-2a33-44dc-a82b-9e16e21253ff'}), 0.00765625)]
========== Results ==========
1. question: 중지된 경우 이체
2. # documents: 5
3. Documents:
-----------------------------------------------
1. Chunk: 591 Characters
-----------------------------------------------
ask: 12개월 장기미이체로 이체서비스가 중지된 경우 어떻게 해제하나요?
information: 최근 12개월동안 인터넷뱅킹/폰뱅킹/모바일뱅킹에서 이체서비스를 이용하지 않은 경우 고객님의 금융자산 보호를 위하여 이체서비스가 중단됩니다. 다시 이체를
원하시는 경우에는 인터넷뱅킹/폰뱅킹/신한쏠(SOL)에서 이체정지 해제를 하실 수 있습니다.(단, 인터넷뱅킹 출금계좌가 등록되어 있는 경우) [경로] ① 당행 고객정보에 등록되어있는
연락처로 ARS 추가인증 가능한 경우: - 인터넷뱅킹 로그인→ 사용자관리→ 인터넷뱅킹관리→ 장기미사용 정지해제 (또는) - 쏠(SOL) 로그인→ 전체메뉴→ 이체 → 이체관리→
장기미사용정지 해제 ② ARS 추가인증이 불가한 경우 (해외체류 고객등) : - 인터넷뱅킹에서는 해제 어려우며, 쏠 (SOL)에서 해제 가능합니다. 쏠(SOL)의 경로는 위와
동일하며, 비대면 실명인증후 해제 가능합니다. 비대면실명인증 - 만 14세이상 가능 - 신분증확인 (주민등록증 또는 운전면허증 또는 여권) - 본인확인 (본인명의 계좌인증 또는
영상통화) 진행 기타 궁금하신 내용은 신한은행 고객센터 1599-8000로 문의하여 주시기 바랍니다
metadata:
{'source': '신한은행', 'row': 37, 'type': '인터넷뱅킹', 'timestamp': 1712881006.3272657, 'id':
'aceb8bd2-c8d8-41a4-9c97-e0a8f777e0e9'}
-----------------------------------------------
2. Chunk: 137 Characters
-----------------------------------------------
ask: 홈페이지 회원가입은 어떻게 해야 하나요?
information: 홈페이지 상단에 있는 [고객센터]를 클릭하여, 회원서비스 → 회원가입메뉴에서 회원가입 메뉴를 이용하시기 바랍니다. 기타 문의는 콜센터 1599-8000번으로
문의 바랍니다.
metadata:
{'source': '신한은행', 'row': 46, 'type': '홈페이지', 'timestamp': 1712881006.327556}
-----------------------------------------------
3. Chunk: 90 Characters
-----------------------------------------------
ask: 신탁적금(당행)으로 이체시 토요일 인터넷뱅시간 제한하는 방법은?
information: "우측 상단 QUICK MENU의 이용안내를 참고하시기 바랍니다.
metadata:
{'source': '신한은행', 'row': 60, 'type': '인증서', 'timestamp': 1712881006.328113}
-----------------------------------------------
4. Chunk: 380 Characters
-----------------------------------------------
ask: 예약이체를 했는데 이체일에 송금이 안된 경우는?
information: 모든 예약이체 등록건은 예약이체 지정일 지정된 시간(오전 7시, 오전 9시, 오전 11시, 오후 1시, 오후 3시, 오후 5시, 오후 7시, 오후 9시)
이전에 출금할 계좌에 송금액이 입금이 되어야 이체가 실행될 수 있습니다.
이체가 되지 않았다고 판단되실 경우에는 반드시 먼저 "예약이체처리결과조회" 또는 "계좌 거래내역"을 확인 하시어 이체여부 및 출금여부를 확인하시기 바랍니다. 또한 예약이체 신청시
SMS 결과통보신청을 하셨다면 요청하신 휴대폰번호로 수신된 문자를 확인해주시기 바라며, 정해진 시간에 이체되지 않은 경우 신한은행 고객상담센터 ☎ 1599-8000번으로 문의
주시기 바랍니다.
metadata:
{'source': '신한은행', 'row': 34, 'type': '인터넷뱅킹', 'timestamp': 1712881006.327168, 'id':
'09e35e67-0359-4404-b3f3-96ab03562d9a'}
-----------------------------------------------
5. Chunk: 128 Characters
-----------------------------------------------
ask: 즉시/예약 이체 서비스가 안되는 경우 어떻게 해야해?
information: 이체서비스가 되지 않는 경우 여러가지 사유가 있을수 있으니, 신한은행 고객상담센터 1599-8000번으로 문의 주시면 자세히 상담해드리겠습니다.
metadata:
{'source': '신한은행', 'row': 59, 'type': '인터넷뱅킹', 'timestamp': 1712812972.7060375, 'id':
'9372d8cf-2a33-44dc-a82b-9e16e21253ff'}
CPU times: user 65.7 ms, sys: 0 ns, total: 65.7 ms
Wall time: 290 ms
- Semantic retrieval(의미론적 검색)
- Keyword retrieval(일치하는 키워드 검색)
- Ensemble(semantic + keyword retrieval) + RRF
- retrieval된 결과물에 RRF 알고리즘과 score를 통한 랭킹 정보로 정렬합니다.
- retrieval된 결과물에 RRF 알고리즘과 score를 통한 랭킹 정보로 정렬합니다.
RAG using RetrievalQA powered by LangChain
위 vector search로 검색해본 결과 유사도에 따라 정렬시킨 뒤 LLM에 전달합니다.
##############################
similar_docs
##############################
Score: 0.10467348759767495
['ask: 12개월 장기미이체로 이체서비스가 중지된 경우 어떻게 해제하나요?', 'information: 최근 12개월동안 인터넷뱅킹/폰뱅킹/모바일뱅킹에서 이체서비스를 이용하지 않은 경우 고객님의 금융자산 보호를 위하여 이체서비스가 중단됩니다. 다시 이체를 원하시는 경우에는 인터넷뱅킹/폰뱅킹/신한쏠(SOL)에서 이체정지 해제를 하실 수 있습니다.(단, 인터넷뱅킹 출금계좌가 등록되어 있는 경우) [경로] ① 당행 고객정보에 등록되어있는 연락처로 ARS 추가인증 가능한 경우: - 인터넷뱅킹 로그인→ 사용자관리→ 인터넷뱅킹관리→ 장기미사용 정지해제 (또는) - 쏠(SOL) 로그인→ 전체메뉴→ 이체 → 이체관리→ 장기미사용정지 해제 ② ARS 추가인증이 불가한 경우 (해외체류 고객등) : - 인터넷뱅킹에서는 해제 어려우며, 쏠 (SOL)에서 해제 가능합니다. 쏠(SOL)의 경로는 위와 동일하며, 비대면 실명인증후 해제 가능합니다. 비대면실명인증 - 만 14세이상 가능 - 신분증확인 (주민등록증 또는 운전면허증 또는 여권) - 본인확인 (본인명의 계좌인증 또는 영상통화) 진행 기타 궁금하신 내용은 신한은행 고객센터 1599-8000로 문의하여 주시기 바랍니다']
{'source': '신한은행', 'row': 37, 'type': '인터넷뱅킹', 'timestamp': 1713146741.108932, 'id': '1a452411-e4b8-47b1-921b-8bf1589c19f1'}
Score: 0.07016553729772568
['ask: 즉시/예약 이체 서비스가 안되는 경우 어떻게 해야해?', 'information: 이체서비스가 되지 않는 경우 여러가지 사유가 있을수 있으니, 신한은행 고객상담센터 1599-8000번으로 문의 주시면 자세히 상담해드리겠습니다.']
{'source': '신한은행', 'row': 59, 'type': '인터넷뱅킹', 'timestamp': 1713146741.109227, 'id': '80bf7f4b-5a35-47c3-a912-9f38baa2d919'}
Score: 0.000977621879428625
['ask: 인터넷뱅킹 자동이체해지 방법안내', 'information: 인터넷뱅킹에 로그인하신후, 좌측의 메뉴항목에서 이체 > 자동이체 > 자동이체조회 변경/취소 서비스를 통해 해지하실 수 있습니다.']
{'source': '신한은행', 'row': 65, 'type': '인터넷뱅킹', 'timestamp': 1713146741.109302, 'id': '45148e73-ddab-426b-ae08-36455aed8cde'}
Score: 0.0006172282585186866
["ask: 미래를함께하는따뜻한금융 안전한금융거래를위해준비중입니다.' 화면에서 멈춤 / 로딩중 멈추는데 어떻게 하나요?", 'information: 오류 사유는 인터넷 익스플로러 설정값의 영향이거나 이용하시는 장소의 네트워크 영향에 의해 로딩이 원활하지 않은 경우입니다. \r', '조치방법은 \r', '1. 임시 인터넷 파일 및 쿠키 삭제, 신뢰할 수 있는 사이트 추가 \r', ' 인터넷 익스플로러 상단의 [도구] > [인터넷옵션]에서\r', '① [일반Tab] > 검색기록항목의 [삭제] 버튼 클릭 "임시 인터넷 파일 및 사이트 파일" , "쿠키 및 웹사이트 데이터" 항목만 체크하고 [삭제] \r', '② [보안Tab] > 신뢰할 수 있는 사이트 > [사이트] 클릭하여 [ https://*.shinhan.com ] 추가 후 적용 및 확인하십시오. \r', ' 또는, 당행 보안프로그램 삭제 열려있는 브라우저 종료 후, 시작 > 제어판의 [프로그램 추가/제거] (총 4개이며 보이지 않으면 제거할 필요없음) \r', '- AhnLab Safe Transaction, \r', ' - iniLINE CrossEX Service, \r', '- INISAFE CrossWeb EX v3.0, \r', '- TouchEn nxKey with E2E for 32bit\r', '3. 새 브라우저 열어서 개인인터넷뱅킹 재접속 후 [통합설치] 진행 하세요. \r', '기타 궁금하신 내용은 신한은행 고객센터 1599-8000로 문의하여 주시기 바랍니다.']
{'source': '신한은행', 'row': 11, 'type': '', 'timestamp': 1713146741.108586, 'id': '2ec5db82-8108-49c6-852d-89409802f9dc'}
Score: 0.00041593104991856296
['ask: 이체한도 증액은 어떻게 하나요?', 'information: 영업점 방문하지 않아도 모바일뱅킹 신한 쏠(SOL) 에서 비대면실명 인증후 통합이체한도 증액 가능합니다. 통합이체한도는 이용하시는 보안매체에 따라, 보안등급별 최고 한도내에서 증액가능합니다.\r', 'OTP카드 창구 발급 시 5,000원(카드형 10,000원)의 수수료가 부과됩니다. 당행에서만 사용가능한 모바일OTP는 영업점 방문없이 신한 쏠(SOL) 에서 무료로 발급가능합니다. \r', '※ 모바일OTP를 이용하시는 경우 쏠(SOL)에서 이체한도 증액은 1회 1천만원 이하, 1일 5천만원 이하로 증액 가능합니다. \r', '※ 만 14세 미만의 경우 법정대리인(부모/친권자/후견인)에 의해 영업점 방문하여 증액 가능하며 1일, 1회 1백만원 이하로 이체한도 제한됩니다. \r', '통합한도란 인터넷뱅킹/신한 쏠(SOL)/폰뱅킹 등을 사용하는 경우 1일 또는 1회에 이체 가능한 통합 이체한도를 말합니다.\r', '* 인터넷뱅킹/신한 쏠(SOL)/폰뱅킹에서 거래한 이체금액의 합이 통합이체한도의 범위를 초과할 수 없습니다.\r', '기타 궁금하신 내용은 신한은행 고객센터 1599-8000로 문의하여 주시기 바랍니다.']
{'source': '신한은행', 'row': 30, 'type': '인터넷뱅킹', 'timestamp': 1713146741.108841, 'id': '1d377bb5-2aec-415b-92b5-79d4ea442831'}
prompt instruction을 작성합니다.
- 이때 프롬프트를 영어로 작성하게 된다면 정확도를 더 향상시킬 수 있습니다.
system_prompt = prompt_repo.get_system_prompt()
pprint (system_prompt)'''
You are a master answer bot designed to answer user's questions.
I'm going to give you contexts which consist of texts, tables and images.
Read the contexts carefully, because I'm going to ask you a question about it.
'''
langchain의 QAChain
을 통해 KB Retrieval > Reranking > LLM > Response의 파이프라인을 구축합니다.
# OpenSearchHybridSearchRetriever 업데이트
opensearch_hybrid_retriever.update_search_params(
k=5,
minimum_should_match=0,
#filter=[
# {"term": {"metadata.project": "KPE"}},
#],
reranker=True,
reranker_endpoint_name=endpoint_name,
verbose=True
)
qa = qa_chain(
llm_text=llm_text,
retriever=opensearch_hybrid_retriever,
system_prompt=system_prompt,
return_context=True,
verbose=False
)
query를 통해 response와 contexts 결과를 얻을 수 있습니다.
- response → LLM을 거친 응답
- contexts → Reranking된 데이터
query = "중지된 경우 이체"
#query = "vidio max size?"
response, contexts = qa.invoke(
query = query
)
print("##################################")
print("query: ", query)
print("##################################")
print (colored("\n\n### Answer ###", "blue"))
print_ww(response)
print (colored("\n\n### Contexts ###", "green"))
show_context_used(contexts)
##################################
query: 중지된 경우 이체
##################################
### Answer ###
최근 12개월동안 인터넷뱅킹/폰뱅킹/모바일뱅킹에서 이체서비스를 이용하지 않은 경우 고객님의 금융자산 보호를 위하여 이체서비스가 중단됩니다. 다시 이체를 원하시는 경우에는
인터넷뱅킹/폰뱅킹/신한쏠(SOL)에서 이체정지 해제를 하실 수 있습니다.
이체서비스가 중지된 경우 해제 방법은 다음과 같습니다.
① 당행 고객정보에 등록되어있는 연락처로 ARS 추가인증이 가능한 경우:
- 인터넷뱅킹 로그인 → 사용자관리 → 인터넷뱅킹관리 → 장기미사용 정지해제
- 쏠(SOL) 로그인 → 전체메뉴 → 이체 → 이체관리 → 장기미사용정지 해제
② ARS 추가인증이 불가한 경우 (해외체류 고객 등):
- 인터넷뱅킹에서는 해제 어려우며, 쏠(SOL)에서 비대면 실명인증 후 해제 가능합니다.
### Contexts ###
-----------------------------------------------
1. Chunk: 591 Characters
-----------------------------------------------
ask: 12개월 장기미이체로 이체서비스가 중지된 경우 어떻게 해제하나요?
information: 최근 12개월동안 인터넷뱅킹/폰뱅킹/모바일뱅킹에서 이체서비스를 이용하지 않은 경우 고객님의 금융자산 보호를 위하여 이체서비스가 중단됩니다. 다시 이체를
원하시는 경우에는 인터넷뱅킹/폰뱅킹/신한쏠(SOL)에서 이체정지 해제를 하실 수 있습니다.(단, 인터넷뱅킹 출금계좌가 등록되어 있는 경우) [경로] ① 당행 고객정보에 등록되어있는
연락처로 ARS 추가인증 가능한 경우: - 인터넷뱅킹 로그인→ 사용자관리→ 인터넷뱅킹관리→ 장기미사용 정지해제 (또는) - 쏠(SOL) 로그인→ 전체메뉴→ 이체 → 이체관리→
장기미사용정지 해제 ② ARS 추가인증이 불가한 경우 (해외체류 고객등) : - 인터넷뱅킹에서는 해제 어려우며, 쏠 (SOL)에서 해제 가능합니다. 쏠(SOL)의 경로는 위와
동일하며, 비대면 실명인증후 해제 가능합니다. 비대면실명인증 - 만 14세이상 가능 - 신분증확인 (주민등록증 또는 운전면허증 또는 여권) - 본인확인 (본인명의 계좌인증 또는
영상통화) 진행 기타 궁금하신 내용은 신한은행 고객센터 1599-8000로 문의하여 주시기 바랍니다
metadata:
{'source': '신한은행', 'row': 37, 'type': '인터넷뱅킹', 'timestamp': 1713146741.108932, 'id':
'1a452411-e4b8-47b1-921b-8bf1589c19f1'}
-----------------------------------------------
2. Chunk: 128 Characters
-----------------------------------------------
ask: 즉시/예약 이체 서비스가 안되는 경우 어떻게 해야해?
information: 이체서비스가 되지 않는 경우 여러가지 사유가 있을수 있으니, 신한은행 고객상담센터 1599-8000번으로 문의 주시면 자세히 상담해드리겠습니다.
metadata:
{'source': '신한은행', 'row': 59, 'type': '인터넷뱅킹', 'timestamp': 1713146741.109227, 'id':
'80bf7f4b-5a35-47c3-a912-9f38baa2d919'}
-----------------------------------------------
3. Chunk: 107 Characters
-----------------------------------------------
ask: 인터넷뱅킹 자동이체해지 방법안내
information: 인터넷뱅킹에 로그인하신후, 좌측의 메뉴항목에서 이체 > 자동이체 > 자동이체조회 변경/취소 서비스를 통해 해지하실 수 있습니다.
metadata:
{'source': '신한은행', 'row': 65, 'type': '인터넷뱅킹', 'timestamp': 1713146741.109302, 'id':
'45148e73-ddab-426b-ae08-36455aed8cde'}
-----------------------------------------------
4. Chunk: 702 Characters
-----------------------------------------------
ask: 미래를함께하는따뜻한금융 안전한금융거래를위해준비중입니다.' 화면에서 멈춤 / 로딩중 멈추는데 어떻게 하나요?
information: 오류 사유는 인터넷 익스플로러 설정값의 영향이거나 이용하시는 장소의 네트워크 영향에 의해 로딩이 원활하지 않은 경우입니다.
조치방법은
1. 임시 인터넷 파일 및 쿠키 삭제, 신뢰할 수 있는 사이트 추가
인터넷 익스플로러 상단의 [도구] > [인터넷옵션]에서
① [일반Tab] > 검색기록항목의 [삭제] 버튼 클릭 "임시 인터넷 파일 및 사이트 파일" , "쿠키 및 웹사이트 데이터" 항목만 체크하고 [삭제]
② [보안Tab] > 신뢰할 수 있는 사이트 > [사이트] 클릭하여 [ https://*.shinhan.com ] 추가 후 적용 및 확인하십시오.
또는, 당행 보안프로그램 삭제 열려있는 브라우저 종료 후, 시작 > 제어판의 [프로그램 추가/제거] (총 4개이며 보이지 않으면 제거할 필요없음)
- AhnLab Safe Transaction,
- iniLINE CrossEX Service,
- INISAFE CrossWeb EX v3.0,
- TouchEn nxKey with E2E for 32bit
3. 새 브라우저 열어서 개인인터넷뱅킹 재접속 후 [통합설치] 진행 하세요.
기타 궁금하신 내용은 신한은행 고객센터 1599-8000로 문의하여 주시기 바랍니다.
metadata:
{'source': '신한은행', 'row': 11, 'type': '', 'timestamp': 1713146741.108586, 'id':
'2ec5db82-8108-49c6-852d-89409802f9dc'}
-----------------------------------------------
5. Chunk: 584 Characters
-----------------------------------------------
ask: 이체한도 증액은 어떻게 하나요?
information: 영업점 방문하지 않아도 모바일뱅킹 신한 쏠(SOL) 에서 비대면실명 인증후 통합이체한도 증액 가능합니다. 통합이체한도는 이용하시는 보안매체에 따라,
보안등급별 최고 한도내에서 증액가능합니다.
OTP카드 창구 발급 시 5,000원(카드형 10,000원)의 수수료가 부과됩니다. 당행에서만 사용가능한 모바일OTP는 영업점 방문없이 신한 쏠(SOL) 에서 무료로
발급가능합니다.
※ 모바일OTP를 이용하시는 경우 쏠(SOL)에서 이체한도 증액은 1회 1천만원 이하, 1일 5천만원 이하로 증액 가능합니다.
※ 만 14세 미만의 경우 법정대리인(부모/친권자/후견인)에 의해 영업점 방문하여 증액 가능하며 1일, 1회 1백만원 이하로 이체한도 제한됩니다.
통합한도란 인터넷뱅킹/신한 쏠(SOL)/폰뱅킹 등을 사용하는 경우 1일 또는 1회에 이체 가능한 통합 이체한도를 말합니다.
* 인터넷뱅킹/신한 쏠(SOL)/폰뱅킹에서 거래한 이체금액의 합이 통합이체한도의 범위를 초과할 수 없습니다.
기타 궁금하신 내용은 신한은행 고객센터 1599-8000로 문의하여 주시기 바랍니다.
metadata:
{'source': '신한은행', 'row': 30, 'type': '인터넷뱅킹', 'timestamp': 1713146741.108841, 'id':
'1d377bb5-2aec-415b-92b5-79d4ea442831'}
파이프라인 요약
- 하이브리드 검색 실행: 렉시컬 검색과 시멘틱 검색을 병행하여 실행합니다. 이는 검색 쿼리에 대한 넓은 범위의 문서를 수집하고, 각기 다른 방식으로 쿼리와의 관련성을 평가합니다.
- RRF 또는 Simple Weights 방식으로 reranking:
- RRF (Reciprocal Rank Fusion): 벡터 검색 방식 중 하나로 관련성 지표가 서로 다른 여러 결과 세트를 단일 결과 세트로 결합하는 방법입니다. RRF에는 조정이 필요하지 않으며 고품질 결과를 얻기 위해 다양한 관련성 지표가 서로 관련될 필요가 없습니다.
- Simple Weights: 각 검색 방식의 결과에 간단한 가중치를 적용하여 최종 점수를 계산합니다. 예를 들어, 렉시컬 검색 결과에는 가중치 0.3을, 시멘틱 검색 결과에는 가중치 0.7을 적용하는 방식입니다.
이렇게 계산된 점수에 따라 문서를 정렬하고 최종 결과를 출력합니다.
- Reranker 모델 호출: 수집된 문서들을 인공지능 또는 머신러닝 기반의 재순위화 모델에 전달하여 각 문서에 대한 추가적인 평가를 수행합니다. 이 모델은 문서가 주어진 쿼리와 얼마나 관련이 있는지를 판단하고, 그에 따른 점수 또는 레이블을 반환합니다.
- LLM 전달: 최종적으로 정렬된 문서들을 언어 모델(Large Language Model, LLM)에 전달하여 추가적인 처리나 응답 생성을 할 수 있습니다.
검증을 위한 파이프라인
- Answer와 Prediction을 합쳐서 생성합니다.
- 이때 Jurrasic 모델을 사용하여 정답 데이터를 생성하는 LLM모델로 사용합니다.
- Jurrasic 모델의 결과와 Claude 모델을 비교하여 정확도를 평가합니다.

해당 파이프라인을 통해 비교하면 다음과 같은 결과를 생성할 수 있습니다.
- Hit Rate: 올바른 문서를 참조(Hit)했는지
- MRR: 문서의 순위가 주어진 쿼리의 의미와 맞게 올바르게 정렬 되었는지

정리
LLM을 구성하면서, RAG 구조를 사용하기만 해도 LLM의 성능적인 이점을 얻을 수 있습니다.
하지만 방대한 데이터를 통해 결과를 추론하는 LLM의 특성상 단순히 데이터가 많다고해도 일반화될 수 있으며, LLM 모델의 자체적인 구조상 잘못된 결과의 수렴하거나 환각 현상이 발생할 수 있습니다.이러한 현상을 방지하고자 Reranker를 도입할 필요가 있으며, Reranking 모델의 검색&분석 과정을 통해 표준적인 LLM 구조에 맞춰 input을 생성할 수 있게 되었습니다.
직접 테스트 해보며 위와같은 구조를 통해 LLM 전반적인 성능 향상을 확인할 수 있었습니다.