Retrieval 시스템은 대규모 데이터셋에서 관련 정보를 효율적으로 식별하는 데 필수적인 기술로, 다양한 AI 애플리케이션에서 핵심적인 역할을 합니다. 이러한 시스템은 다양한 데이터 형식을 처리할 수 있도록 설계되었습니다:
- 비정형 텍스트(예: 문서)는 주로 벡터 스토어나 어휘 검색 색인(lexical search index)에 저장됩니다.
- 구조화된 데이터는 관계형 데이터베이스나 그래프 데이터베이스와 같은 정의된 스키마를 가진 저장소에 보관됩니다.
데이터 형식의 다양성이 증가하고 있음에도 불구하고, 현대 AI 애플리케이션은 모든 유형의 데이터를 자연어 인터페이스를 통해 접근 가능하게 만드는 것을 목표로 하고 있습니다. 모델은 자연어 쿼리를 검색 색인 또는 데이터베이스와 호환 가능한 형식으로 변환하는 데 중요한 역할을 합니다. 이러한 변환 과정을 통해 복잡한 데이터 구조와의 상호작용이 더욱 직관적이고 유연하게 이루어질 수 있습니다.
이번 글에서는 Retrieval 시스템에 사용되는 여러가지 컴포넌트들을 겉핥기식으로 알아보겠습니다.
주요 개념
(1) Query Analysis: 모델이 검색 쿼리를 변환하거나 구성하여 검색을 최적화하는 프로세스입니다.
(2) Information Retrieval: 검색 쿼리는 다양한 검색 시스템으로부터 정보를 가져오는 데 사용됩니다.
Query analysis
사용자들은 Retrieval 시스템과 자연어로 상호작용하는 것을 선호하지만, 이러한 시스템은 종종 특정한 쿼리 문법을 요구하거나 특정 키워드의 사용으로 이점을 얻을 수 있습니다. 쿼리 분석(Query Analysis)은 사용자 입력과 최적화된 검색 쿼리 사이의 다리를 제공하는 역할을 합니다. 쿼리 분석의 일반적인 적용 사례는 다음과 같습니다:
- 쿼리 재작성(Query Re-writing): 쿼리를 재작성하거나 확장하여 의미론적 또는 어휘적 검색 성능을 향상시킵니다.
- 쿼리 생성(Query Construction): 검색 색인이 구조화된 쿼리(SQL 등)를 필요로 하는 경우 이를 생성합니다.
쿼리 분석은 모델을 활용하여 사용자 입력을 변환하거나 최적화된 검색 쿼리를 생성하는 데 사용됩니다. 이를 통해 Retrieval 시스템은 더욱 효율적이고 정확한 검색을 수행할 수 있습니다.
Query Re-writing
Retrieval 시스템은 단순하고 부정확한 쿼리부터 복잡하고 다면적인 질문에 이르기까지 다양한 사용자 입력을 처리할 수 있어야 합니다. 이를 위해 널리 사용되는 접근 방식은 사용자 쿼리를 보다 효과적인 검색 쿼리로 변환하는 모델을 사용하는 것입니다. 이러한 변환은 간단한 키워드 추출에서부터 정교한 쿼리 확장 및 재구성에 이르기까지 다양합니다. 쿼리 재작성을 통한 주요 이점은 다음과 같습니다:
- 쿼리 명확화(Query Clarification): 모호하거나 부정확한 쿼리를 명확하게 재구성합니다.
- 의미론적 이해(Semantic Understanding): 쿼리의 의도를 파악하여 단순한 키워드 매칭을 넘어서는 검색을 가능하게 합니다.
- 쿼리 확장(Query Expansion): 검색 범위를 넓히기 위해 관련 용어나 개념을 생성합니다.
- 복잡한 쿼리 처리(Complex Query Handling): 다중 부분으로 이루어진 질문을 더 간단한 하위 쿼리로 분해합니다.
이를 위해 다양한 기술이 개발되었으며, 이러한 기술은 Retrieval 시스템에서 쿼리 분석과 재작성을 효과적으로 지원합니다.
이름 | 사용 시기 | 설명 |
Multi-query | 높은 검색 재현율을 위해 질문을 여러 표현으로 제공해야 할 때 | 사용자 쿼리를 여러 표현으로 다시 작성하고, 각 표현에 대해 문서를 검색한 후 모든 쿼리에 대해 고유한 문서를 반환합니다. |
Decomposition | 질문이 더 작은 하위 문제로 나눌 수 있을 때 | 질문을 하위 문제/질문 세트로 분해하며, 이를 순차적으로 해결하거나(첫 번째 답변 + 검색 결과를 사용해 두 번째 해결) 병렬로 해결한 후 통합합니다. |
Step-back | 더 높은 수준의 개념적 이해가 필요할 때 | 먼저 LLM에 상위 수준 개념 또는 원칙에 대한 일반적인 "스텝백" 질문을 요청한 후, 이에 대한 관련 사실을 검색합니다. 이를 기반으로 사용자 질문에 답변합니다. |
HyDE | 원시 사용자 입력을 사용한 관련 문서 검색에 어려움이 있을 때 | LLM을 사용해 질문을 가상의 문서로 변환하고, 이를 내장해 실제 문서를 검색합니다. 문서 간 유사성 검색을 통해 더 관련성 높은 결과를 생성합니다. |
Query Construction
쿼리 분석은 자연어 쿼리를 특화된 쿼리 언어나 필터로 변환하는 데 중점을 둘 수 있습니다. 이러한 변환은 구조화된 데이터나 반구조화된 데이터를 저장하는 다양한 데이터베이스와 효과적으로 상호작용하기 위해 매우 중요합니다.
구조화된 데이터 예시
- Text-to-SQL: 자연어를 관계형 데이터베이스의 SQL로 변환합니다.
- Text-to-Cypher: 자연어를 그래프 데이터베이스의 Cypher로 변환합니다.
반구조화된 데이터 예시
- 자연어에서 메타데이터 필터로 변환: 사용자 쿼리를 적절한 메타데이터 필터로 변환합니다. 이는 벡터 스토어에서 의미론적 검색과 메타데이터 필터링을 결합하는 데 사용됩니다.
이러한 접근 방식은 사용자 의도와 다양한 데이터 저장 시스템의 특정 쿼리 요구사항 간의 간극을 메우기 위해 모델을 활용합니다. 다음은 널리 사용되는 몇 가지 기법입니다:
- 구조화된 언어 생성: SQL 또는 Cypher와 같은 도메인별 언어로의 변환.
- 메타데이터 기반 필터링: 검색 결과를 보다 정교하게 만들기 위해 메타데이터를 기반으로 필터 생성.
이를 통해 Retrieval 시스템은 더욱 유연하고 효과적인 검색 기능을 제공할 수 있습니다. 다음은 널리 사용되는 몇 가지 기법입니다:
이름 | 사용 시기 | 설명 |
Self Query | 질문이 문서의 메타데이터에 대한 정보일 때 | LLM을 사용하여 사용자 입력을 (1) 의미론적 검색을 위한 문자열, (2) 메타데이터 필터로 변환합니다. 이는 질문이 문서의 내용이 아니라 메타데이터에 관한 경우 유용합니다. |
Text-to-SQL | 관계형 데이터베이스에서 정보를 검색해야 할 때 | LLM을 사용하여 사용자 입력을 SQL 쿼리로 변환합니다. |
Text-to-Cypher | 그래프 데이터베이스에서 정보를 검색해야 할 때 | LLM을 사용하여 사용자 입력을 Cypher 쿼리로 변환합니다. |
Information retrieval
어휘 검색 색인(Lexical Search Indexes)
많은 검색 엔진은 쿼리의 단어를 문서의 단어와 매칭시키는 방식으로 작동합니다. 이러한 접근 방식은 어휘 검색(lexical retrieval)이라고 불리며, 일반적으로 단어 빈도를 기반으로 하는 검색 알고리즘을 사용합니다. 기본 개념은 간단합니다: 어떤 단어가 사용자 쿼리와 특정 문서 모두에서 자주 나타난다면, 해당 문서는 좋은 일치 결과일 가능성이 높습니다.
이 방식을 구현하는 데 사용되는 주요 데이터 구조는 역색인(inverted index)입니다. 역색인은 단어 목록과 해당 단어가 발생하는 문서 내 위치를 매핑한 데이터를 포함합니다. 이를 통해 검색 쿼리의 단어를 문서에 효율적으로 매칭시킬 수 있습니다. 대표적인 어휘 검색 알고리즘으로는 BM25와 TF-IDF가 있습니다.
Lexical Search의 특징
- 단순성과 속도: 단어의 정확한 매칭을 기반으로 하므로 구현이 상대적으로 간단하고 빠릅니다.
- 정확한 매칭: 쿼리에 포함된 정확한 단어나 구문을 찾는 데 효과적입니다.
- 한계점: 맥락이나 의미를 고려하지 않아 동의어, 다의어 처리에 제한이 있습니다.
주요 알고리즘
Lexical Search에서 사용되는 대표적인 알고리즘은 다음과 같습니다:
BM25 (Best Matching 25)
- 문서 내 단어 빈도와 중요도를 고려하여 관련성을 측정합니다.
- 쿼리와 문서 간의 유사도를 계산하는 데 사용됩니다.
TF-IDF (Term Frequency-Inverse Document Frequency)
- 단어의 빈도(TF)와 역문서 빈도(IDF)를 결합하여 단어의 중요도를 계산합니다.
- 문서 집합 내에서 특정 단어의 중요성을 평가하는 데 사용됩니다.
벡터 색인(Vector Indexes)
벡터 색인은 비정형 데이터를 색인화하고 저장하는 대안적인 방법입니다. 벡터 색인은 문서를 고차원 벡터 표현으로 압축하는 임베딩 모델을 사용합니다. 이를 통해 코사인 유사도(cosine similarity)와 같은 간단한 수학적 연산을 이용하여 임베딩 벡터 간의 유사성을 효율적으로 검색할 수 있습니다.
벡터 기반 검색의 특징
- 의미 기반 검색: 쿼리와 문서를 벡터로 변환하여 의미적 유사성을 기반으로 검색하므로, 동의어나 유사한 표현도 효과적으로 처리할 수 있습니다.
- 맥락 이해: 문장의 전후 문맥을 이해하여 단어의 의미를 다르게 해석할 수 있습니다. 예를 들어, "apple"이 과일인지 회사인지를 문맥에 따라 구분합니다.
- 확장성과 유연성: 쿼리와 문서를 고차원 벡터 공간에 매핑하여, 비정확하거나 부분적인 매칭에도 의미적으로 가까운 문서를 검색할 수 있습니다.
- 복잡성과 비용: 대규모 언어 모델(LLM) 기반의 인코더 사용으로 인해 구현이 복잡하고 계산 비용이 높습니다. 대용량 데이터셋 검색 시 고성능 하드웨어와 최적화가 필요합니다.
- 유사도 계산: 단어 매칭 대신 코사인 유사도 등 벡터 간 유사도 계산을 사용하여 검색하므로, 쿼리의 표현이 다르더라도 의미적으로 관련된 문서를 찾을 수 있습니다.
주요 방법론
Word2Vec
- 주변 단어의 분포를 학습하여 단어를 벡터로 표현하는 모델입니다.
- CBOW와 Skip-Gram 방식을 사용하여 단어 간 의미적 유사성을 학습합니다.
GloVe (Global Vectors for Word Representation)
- 단어 쌍의 동시 등장 빈도를 기반으로 벡터를 학습합니다.
- 전역적인 통계 정보를 반영해 문맥을 포착하는 단어 임베딩을 생성합니다.
FastText
- 단어를 subword(부분 단어) 단위로 나누어 벡터를 학습하는 모델입니다.
- 철자 기반 학습으로 희귀 단어 및 형태소 변형에도 강한 성능을 보입니다.
BERT (Bidirectional Encoder Representations from Transformers)
- 문장의 양방향 문맥을 학습하여 더 정확한 의미를 이해하는 모델입니다.
- Masked Language Model(MLM)과 Next Sentence Prediction(NSP) 기법을 사용하여 사전 학습됩니다.
SBERT (Sentence-BERT)
- BERT를 문장 임베딩에 최적화하여 문장 간 유사도를 효율적으로 계산하는 모델입니다.
- 문장을 벡터로 변환하여 코사인 유사도로 비교할 수 있게 합니다.
DPR (Dense Passage Retrieval)
- 질문과 문서를 각각 독립적으로 벡터화하여 유사도를 기반으로 검색하는 모델입니다.
- 질문과 문서에 각각 BERT 인코더를 사용하여 효율적으로 검색합니다.
DistilBERT
- BERT 모델을 경량화하여 더 빠르고 효율적인 검색이 가능하도록 설계된 모델입니다.
- 작은 모델 크기에도 불구하고 BERT 수준의 높은 성능을 제공합니다.
ColBERT
- Late Interaction 방식을 사용해 쿼리와 문서의 각 토큰을 독립적으로 매칭합니다.
- 대규모 검색 시스템에서도 높은 효율성과 정확도를 제공합니다.
BM25 + Dense Retrieval 하이브리드
- BM25의 전통적인 키워드 기반 검색과 Dense 벡터 기반 검색을 결합한 모델입니다.
- 두 가지 검색 결과를 결합하여 더욱 높은 검색 품질을 제공합니다.
관계형 데이터베이스(Relational Databases)
관계형 데이터베이스는 많은 애플리케이션에서 사용되는 기본적인 구조화된 데이터 저장 방식입니다. 이 데이터베이스는 사전 정의된 스키마를 사용하여 데이터를 테이블 형태로 구성하며, 각 테이블은 엔터티 또는 관계를 나타냅니다. 데이터는 행(레코드)과 열(속성)으로 저장되며, SQL(Structured Query Language)을 통해 효율적으로 쿼리하고 조작할 수 있습니다. 관계형 데이터베이스는 데이터 무결성을 유지하고 복잡한 쿼리를 지원하는 데 강점을 가지고 있습니다.
그래프 데이터베이스(Graph Databases)
그래프 데이터베이스는 고도로 연결된 데이터를 저장하고 관리하도록 설계된 특수한 데이터베이스 유형입니다. 전통적인 관계형 데이터베이스와 달리, 그래프 데이터베이스는 노드(엔터티), 엣지(관계), 속성으로 구성된 유연한 구조를 사용합니다. 이러한 구조는 복잡하고 상호 연결된 데이터를 효율적으로 표현하고 쿼리할 수 있게 합니다. 그래프 데이터베이스는 소셜 네트워크, 공급망 관리, 사기 탐지, 추천 서비스와 같은 분야에서 유용하게 사용됩니다.
Reranking
Reranking은 검색 증강 생성(RAG) 시스템에서 검색된 문서들의 순위를 재조정하여 질문과의 관련성을 높이는 기법입니다. 기존의 벡터 검색은 질문과 문서를 독립적으로 임베딩하는 Bi-encoder 방식을 사용하지만, Reranker는 질문과 문서를 함께 입력으로 받아들이는 Cross-encoder 방식을 활용합니다. 이를 통해 질문과 문서 간의 유사도를 더욱 정확하게 측정할 수 있습니다. 이러한 Reranking 과정을 통해 질문과 가장 관련성 높은 문서들이 상위에 배치되어, 최종적으로 생성되는 답변의 정확도와 일관성을 향상시킬 수 있습니다.
그러나 Reranker는 모든 문서에 대해 질문과의 유사도를 계산해야 하므로 연산 비용이 높습니다. 따라서 일반적으로는 먼저 Bi-encoder를 사용하여 관련 문서 후보군을 선정한 후, Reranker를 통해 이들 문서의 순위를 재조정하는 두 단계 전략이 사용됩니다. 이러한 접근법은 검색 속도와 정확도 간의 균형을 맞추는 데 효과적입니다.
주요 Reranker
CohereAI의 rerank-multilingual-v2.0 모델
- 특징: 다국어 지원(한국어 포함) / 유료 제공(서비스형 API 모델) / 고성능의 Cross-encoder 기반 모델
- 장점: 다국어 데이터셋을 학습하여 다양한 언어에서 우수한 성능을 보임 / 한국어 지원 기능이 공식적으로 포함
- 단점: 사용 비용 발생 / 클라우드 API를 통해 제공되므로, 호출량에 따라 추가 비용 발생 가능
Beijing Academy of Artificial Intelligence (BAAI)의 bge-reranker-large 모델
- 특징: 영어와 중국어 공식 지원 / 무료 제공 / 학습 데이터셋에 한국어가 일부 포함되어 있어 한국어 문서에 대해 부분적인 성능 제공
- 장점: 무료 사용 가능(오픈 소스) / 대규모 모델로 질문과 문서의 의미적 관계를 효과적으로 파악
- 단점: 한국어에 대한 최적화 부족(학습 데이터 내 한국어 비중이 낮음) / 특정 사용 환경에서 다국어 성능이 제한될 수 있음
'AI > 어플리케이션 개발' 카테고리의 다른 글
Retrieval을 위한 zero-shot LLM Ranker (2) | 2024.12.27 |
---|---|
Retrieval 시스템 평가 매트릭 (0) | 2024.12.19 |
LangChain을 활용한 Tool Calling # 4 (3) | 2024.11.29 |
LangChain을 활용한 Tool Calling # 3 (0) | 2024.11.29 |
LangChain을 활용한 Tool Calling # 2 (3) | 2024.11.29 |