한국어는 교착어 특성상 영어 기반 벡터 검색만으로는 정확한 결과를 얻기 어렵습니다. 이 블로그에서는 Amazon Aurora PostgreSQL에서 pg_bigm(바이그램 키워드 검색)과 pgvector(벡터 시맨틱 검색)를 RRF(Reciprocal Rank Fusion)로 결합한 하이브리드 검색을 구현하여, 한국어 RAG 애플리케이션의 검색 품질을 개선하는 방법을 소개합니다. 왜 한국어에는 하이브리드 검색이 필요한가? RAG(Retrieval-Augmented Generation) 애플리케이션에서 검색 품질은 최종 답변의 정확도를 결정합니다. 벡터 검색(pgvector)은 의미적으로 유사한 […] ||
한국어는 교착어 특성상 영어 기반 벡터 검색만으로는 정확한 결과를 얻기 어렵습니다. 이 블로그에서는 Amazon Aurora PostgreSQL에서 pg_bigm(바이그램 키워드 검색)과 pgvector(벡터 시맨틱 검색)를 RRF(Reciprocal Rank Fusion)로 결합한 하이브리드 검색을 구현하여, 한국어 RAG 애플리케이션의 검색 품질을 개선하는 방법을 소개합니다.
왜 한국어에는 하이브리드 검색이 필요한가?
RAG(Retrieval-Augmented Generation) 애플리케이션에서 검색 품질은 최종 답변의 정확도를 결정합니다. 벡터 검색(pgvector)은 의미적으로 유사한 문서를 찾는 데 탁월하지만, 한국어 환경에서는 다음과 같은 한계가 있습니다:
고유명사/전문 용어 누락: “pgvector”나 “HNSW”와 같은 기술 용어를 검색할 때, 벡터 검색은 의미적으로 유사한 다른 문서를 반환할 수 있지만, 정확히 해당 키워드가 포함된 문서를 놓칠 수 있습니다.
한국어 조사/어미 변화: “데이터베이스를”, “데이터베이스에서”, “데이터베이스의” 등 조사가 붙은 형태가 다양하여, 키워드 기반 검색이 여전히 중요합니다.
복합어 처리: “클라우드컴퓨팅”, “인공지능” 등 한국어 복합어는 임베딩 모델이 제대로 분리하지 못하는 경우가 있습니다.
반면 키워드 검색(pg_bigm)은 정확한 문자열 매칭에 강하지만, “데이터베이스 성능을 높이려면?”과 같은 자연어 질문에는 대응하지 못합니다. 두 방식을 결합하면 각각의 약점을 보완할 수 있습니다.
검색 방식
강점
약점
인프라 관점
pg_bigm (키워드)
정확한 용어 매칭, 한국어 조사 처리
동의어/문맥 이해 불가
GIN 인덱스 스토리지 사용
pgvector (시맨틱)
의미적 유사도, 자연어 질문 대응
정확한 키워드 매칭 약함
HNSW 인덱스 메모리 의존
하이브리드 (RRF)
두 방식의 상호 보완
튜닝 포인트 증가
복합 연산 필요
아키텍처 개요
위 다이어그램은 한국어 하이브리드 RAG 시스템의 전체 데이터 흐름을 보여줍니다.
Data Ingestion Pipeline (데이터 수집)
Amazon S3에 저장된 원본 문서를 AWS Lambda/ECS가 적절한 크기로 청킹합니다.
Amazon Bedrock Titan Embeddings V2가 각 청크를 1024차원 벡터로 변환합니다.
원본 텍스트와 벡터 임베딩이 Amazon Aurora PostgreSQL에 저장되며, pg_bigm GIN 인덱스와 pgvector HNSW 인덱스가 생성됩니다.
Retrieval & Generation Pipeline (검색 및 응답 생성)
사용자가 한국어 질문을 입력하면, Application/API 레이어에서 키워드 추출과 인텐트 분석을 수행합니다.
추출된 키워드(query_text)는 pg_bigm 키워드 검색에, 자연어 질문 전체는 Bedrock Titan을 통해 쿼리 임베딩(query_embedding)으로 변환되어 pgvector 시맨틱 검색에 사용됩니다.
Aurora PostgreSQL 내부에서 두 검색 결과가 RRF로 결합되어 Top-K 관련 문서가 반환됩니다.
반환된 문서 컨텍스트를 기반으로 Amazon B