23.06.15
DEVOTEE를 활성화 시키면
지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.
버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.
| 컨텐츠 유형 | 제목 | 저장일 | 삭제 |
|---|
본인인증 로그인에 실패하였습니다.
회원이 아니시거나 본인인증 등록이
완료되지 않은 사용자입니다.
OpenLab LLMOps 모임에서 살펴본 AutoRAG에서 지원하는 다양한 노드와 모듈에 대해 정리했습니다.
AutoRAG 에서 지원하는 다양한 모듈에 대해서 살펴봅니다.
사용자 쿼리를 즉시 검색에 사용하지 않고 쿼리에 담긴 표현을 변형하여 검색결과의 관련성을 향상시키는 과정 → 다양한 쿼리 유형에 대응가능 & RAG 정확도 향상
N/A
query_expansion 노드 결과만으로 노드의 성능을 측정할 수 없음
query_expansion이 적용된 쿼리로 검색 후에 검색 결과로 성능평가
Metrics
retreival_f1
retreival_recall
retrieval_precision
Speed Threshold
speed_threshold 모든 노드에 적용되어 쿼리의 평균처리 시간을 초과하는 메서드가 사용되지 않도록 한다.
Top_k
검색 평가단계에서 고려할 상위 결과의 수
Retrieval_Modules
bm25
vectordb
hybrid_rrf
hybrid_cc
쿼리를 사용해서 corpus로부터 관련있는 컨텐츠를 가져오는 과정
노드 파라미터
Top_k
노드 수준에서 코퍼스에서 검색할 상위 k개
전략(Strategy) 파라미터
Metrics
retrieval_f1, retrieval_recall, retrieval_precision
검색 과정의 효율성 평가지표
검색된 컨텐츠의 정확성, 리콜 및 정밀도 측정
Speed Threshold
쿼리의 평균 처리시간 초과 메서드 사용 X
모든 노드에 적용
- node_line_name: retrieve_node_line
node:
- node_type: retrieval
strategy:
metrics: [retrieval_f1, retrieval_recall, retrieval_precision]
speed_threshold: 10
top_k: 10
modules:
- module_type: bm25
- module_type: vectordb
embedding_model: openai
- module_type: hybrid_rrf
target_module: ('bm25', 'vectordb')
rrf_k: [3, 5, 10]
- module_type: hybrid_cc
target_modules: ('bm25', 'vectordb')
weights:
- (0.5, 0.5)
- (0.3, 0.7)
- (0.7, 0.3)단어가 문서에 얼마나 중요한지를 반영하는 검색의 가장 일반적인 TF-IDF 방법 (a.k.a sparse retrieval, ≠ dense retrieval)
단어의 수를 사용해서 유사도 검색
특정 도메인 문서를 사용하는 경우 vectordb를 사용하는 것보다 유리
passage의 랭킹과 스코어링에 BM25Okapi 알고리즘 사용
bm25_tokenizer bm25에서 사용할 토큰화 방식 선택 가능
porter_stemmer (default)
영어에 최적화된 방법
문장 → 단어 → stem 추출
studying, studies → study 가 된다
ko_kiwi
한국어에 최적화
‣
space
공백을 기준으로 토큰화
Multilingual 문서에 최적화
Huggingface AutoTokenizer
허깅페이스의 AutoTokenizer 사용가능
허깅페이스 레포 경로 입력하면 된다.
modules:
- module_type: bm25
bm25_tokenizer: [ porter_stemmer, ko_kiwi, space, gpt2 ]벡터DB를 백엔드로 사용하는 검색모듈
Dense Retrieval
임베딩 모델로 임베딩하여 벡터DB에 저장 → 검색시 쿼리가 임베딩 모델로 임베딩 되어 벡터 DB에서 가장 유사한 벡터 검색 후 반환
현재 vectordb 모듈은 ChromaDB만 지원
인터넷 연결, 서버 비용, API 키 필요 X, 오픈소스
embedding_model
지원하는 임베딩 모델 목록: openai 임베딩모델, 일부 로컬모델, 커스텀모델
import autorag
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
autorag.generator_models['kosimcse'] = HuggingFaceEmbedding("BM-K/KoSimCSE-roberta-multitask")modules:
- module_type: vectordb
embedding_model: openaimultiple retrievals에서 passage를 검색
최종 유사도 점수 계산에 RRF(Reciprocal Rank Fusion) 알고리즘 사용
각 검색에서 passage의 랭킹(순위)를 기반으로 검색 점수를 매김
Reciprocal Rank Fusion
관련성이 다른 여러 결과 집합을 결합하는 방식
각 검색의 점수가 아닌 순위만을 가지고 계산이 이루어지기 때문에 관련성이 다른 여러 결과 집합을 결합하는 것이 가능
$RRF \rm{score}(d\in D) = \sum_{r \in R} \frac{1}{k+r(d)}$
score = 0.0
for q in queries:
if d in result(q):
score += 1.0 / ( k + rank( result(q), d ) )
return score
# k는 순위에 대한 상수입니다.
# q는 질의(query)의 집합에서 하나의 질의를 의미합니다.
# d는 q의 결과 집합에서의 문서(document)를 나타냅니다.
# result(q)는 질의 q의 결과 집합을 의미합니다.
# rank(result(q), d)는 d가 result(q)에서의 순위를 나타냅니다. 순위는 1부터 시작합니다.각 쿼리(query)에 대해서 순회하면서 해당 문서(d)가 질의의 결과 집합(result(q))에 존재한다면 점수(score)에 1.0을 해당 문서의 순위의 역수로 더한다.
여기서 순위는 1부터 시작하는데 순위가 낮을수록 높은 점수를 얻게 된다.
Elasticsearch RRF(Reciprocal Rank Fusion)
[IR] RRF(Reciprocal Rank Fusion) 설명과 파이썬 코드
target_modules hybrid_rrf 모듈을 적용할 대상 모듈
rrf_k 각 검색순위가 최종 순위에 미치는 영향력
target_module_params
modules:
- module_type: hybrid_rrf
target_modules: ('bm25', 'vectordb')
rrf_k: [3, 5, 10]multiple retrievals에서 passage를 검색
CC(Convex Combination) 알고리즘 사용
각 검색 간에 가중치를 다르게 주어서 점수 계산
Convex Combination
검색 알고리즘이나 다양한 최적화 문제에서 여러 개의 후보 해답이나 데이터 포인트를 결합하여(두 개 이상의 벡터를 결합) 더나은 결과를 도출하는 방법
$y=λ_1x_1+λ_2x_2+⋯+λ_nx_n$
$x_i$ 결합하고자 하는 벡터들
$\lambda_i$ 가중치(가중치의 합은 1이 되어야함)
즉, 원래 벡터들로부터 생성된 선형 결합 중 가장 간단한 형태
target_modules
weights
target_module_params
modules:
- module_type: hybrid_cc
target_modules: ('bm25', 'vectordb')
weights:
- (0.5, 0.5)
- (0.3, 0.7)
- (0.7, 0.3)multiple retrievals에서 passage를 검색
Relative Score Fusion(RSF)
target_modules 검색으로 출력되는 메트릭을 각각 정규화하여 각 개체 점수를 도출
가장 높은 값은 1, 가장 낮은 값 0
총 점수는 정규화된 target_modules 점수의 스케일링된 합으로 계산
target_modules
weight
target_module_params
modules:
- module_type: hybrid_rsf
target_modules: ('bm25', 'vectordb')
weights:
- (0.5, 0.5)
- (0.3, 0.7)
- (0.7, 0.3)multiple retrievals에서 passage를 검색
Distribution-based Score Fusion
각 임베딩의 분포 꼬리(tails)를 고려하여 서로 다른 인코더의 검색 점수를 커스텀 피처 범위가 있는 MinMax 스케일링을 사용해 정규화
Distribution-Based Score Fusion (DBSF), a new approach to Vector Search Ranking
target_modules
weight
target_module_params
modules:
- module_type: hybrid_dbsf
target_modules: ('bm25', 'vectordb')
weights:
- (0.5, 0.5)
- (0.3, 0.7)
- (0.7, 0.3)
DEVOTEE를 활성화 시키면
지금 작성한 댓글에 AI가 댓글을 달아줍니다.