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가 있습니다.
벡터 색인(Vector Indexes)
벡터 색인은 비정형 데이터를 색인화하고 저장하는 대안적인 방법입니다. 벡터 색인은 문서를 고차원 벡터 표현으로 압축하는 임베딩 모델을 사용합니다. 이를 통해 코사인 유사도(cosine similarity)와 같은 간단한 수학적 연산을 이용하여 임베딩 벡터 간의 유사성을 효율적으로 검색할 수 있습니다.
관계형 데이터베이스(Relational Databases)
관계형 데이터베이스는 많은 애플리케이션에서 사용되는 기본적인 구조화된 데이터 저장 방식입니다. 이 데이터베이스는 사전 정의된 스키마를 사용하여 데이터를 테이블 형태로 구성하며, 각 테이블은 엔터티 또는 관계를 나타냅니다. 데이터는 행(레코드)과 열(속성)으로 저장되며, SQL(Structured Query Language)을 통해 효율적으로 쿼리하고 조작할 수 있습니다. 관계형 데이터베이스는 데이터 무결성을 유지하고 복잡한 쿼리를 지원하는 데 강점을 가지고 있습니다.
그래프 데이터베이스(Graph Databases)
그래프 데이터베이스는 고도로 연결된 데이터를 저장하고 관리하도록 설계된 특수한 데이터베이스 유형입니다. 전통적인 관계형 데이터베이스와 달리, 그래프 데이터베이스는 노드(엔터티), 엣지(관계), 속성으로 구성된 유연한 구조를 사용합니다. 이러한 구조는 복잡하고 상호 연결된 데이터를 효율적으로 표현하고 쿼리할 수 있게 합니다. 그래프 데이터베이스는 소셜 네트워크, 공급망 관리, 사기 탐지, 추천 서비스와 같은 분야에서 유용하게 사용됩니다.
'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 |