전문가 수준의 로컬 소재 및 음악 라이브러리를 구축할 때 기존의 검색 아키텍처는 종종 심각한 문제에 직면합니다. 사용자가 검색창에 "서사적이고 웅장한 기세"나 "고요한 피아노"를 입력할 때 키워드 분할 기반의 데이터베이스 검색(예: SQLite FTS5)은 필드에 해당 단어가 정확히 포함된 트랙만 정확하게 일치시킬 수 있습니다. 이로 인해 풍부한 태그(하지만 용어가 다름)가 있는 방대한 오디오 자료가 묻혀버리게 됩니다.
이러한 문제점을 근본적으로 해결하기 위해 최신 하위 계층 리팩토링에서 우리는 LanceDB 벡터 데이터베이스와 BGE-M3 에지 모델을 결합한 하이브리드 검색(Hybrid Search) 아키텍처로 완전히 업그레이드했습니다.
I. SQLite FTS5의 한계 돌파
이전 버전의 PureLab에서 핵심 검색은 SQLite의 전체 텍스트 검색 모듈(FTS5)에 전적으로 의존했습니다. 이 아키텍처는 간단하고 매우 빠르지만 실제 비즈니스 시나리오에서 병목 현상에 부딪혔습니다.
- 의미론적 격차: 사용자의 검색어와 실제 오디오의 태그(예: genre / mood)가 완전히 일치하지 않는 경우가 많습니다(예: "행복"을 검색하면 "happy"로 태그된 트랙을 놓침).
- 약한 언어 간 매칭: 음악 메타데이터는 다국어 설명에 걸쳐 극도로 분산되어 있습니다. 단순한 토크나이저는 언어 간에 의미론적 연관성을 설정할 수 없습니다.
II. 듀얼 레인 검색 및 하이브리드 아키텍처
의미론적 계층을 도입하기 위해 우리는 어휘 검색을 포기하지 않았습니다. 대신 듀얼 레인 검색 및 RRF 융합 (Dual-Lane Retrieval & RRF) 모델을 채택하여 기존 SQLite 아키텍처 위에 LanceDB를 깊숙이 내장했습니다.
1. 독립적인 프로젝션 테이블 및 BGE-M3 임베딩
정규화된 각 사용자 라이브러리(Root)에 대해 해당 .lancedb/ 디렉토리에 독립적인 text_vectors 프로젝션 테이블을 설정했습니다.
- 로컬 ONNX 추론: 인덱스 재구축 메커니즘이 트리거되면(Phase B) 시스템은
ort기반의 백그라운드 엔진을 스케줄링하고 메타데이터 텍스트를 로컬 BGE-M3 Int8 ONNX 모델에 전달하여 고품질 1024차원f32벡터를 생성하고 데이터베이스에 업서트합니다. - 원장 및 재시도 메커니즘 (Ledger): 기기 성능 제한으로 인해 대규모 벡터화 작업이 강제로 중단되는 것을 방지하기 위해 SQLite에
text_vector_index_ledger테이블을 설계했습니다. 이는 각 텍스트 행의 상태(pending,indexed,failed)를 추적하여 프로그램이 예기치 않게 다시 시작되더라도 시스템이 중단점에서 원활하게 재개하고 Lease를 재시도할 수 있도록 합니다.
2. Lexical 및 Semantic 듀얼 Provider
사용자가 검색어를 입력하면 아키텍처는 백엔드에서 두 개의 핵심 Provider로 나뉩니다.
- LexicalRetrievalProvider: FTS5를 통해 계속해서 강력한 하드 매칭을 제공합니다(파일 이름과 명확한 태그의 직접 검색이 100% 호출되도록 보장합니다).
- SemanticRetrievalProvider: BGE 추론 환경을 로드하고 사용자의 Query 벡터를 계산한 다음 이를 LanceDB의 ANN(근사 최근접 이웃)에 전달하여 의미론적 검색을 실행합니다.
III. 랭크 융합의 예술: Text-Priority RRF
두 레인의 결과를 결합하고 최종 목록(ResultList)을 제시하는 것이 진정한 과제입니다.
대기 시간이 긴 Cross-encoder 리랭커를 사용하는 대신 조정된 Text-Priority RRF(Reciprocal Rank Fusion) 알고리즘을 사용하여 후처리를 수행합니다.
$$
Score_{RRF} = \frac{1}{K + \text{Rank}{Lexical}} + \frac{W{Semantic}}{K + \text{Rank}_{Semantic}}
$$
[!NOTE]
우리 구현에서는:
- $K = 60$
- 어휘(Lexical) 매칭 가중치 $W_{Lexical} = 1.0$
- 의미론적(Semantic) 매칭 가중치 $W_{Semantic} = 0.95$
의미론적 측면에 약간의 가중치 할인(0.95)을 적용함으로써 오디오 파일의 어휘 단어가 직접 일치할 때 단순히 “의미론적으로 유사한” 결과보다 항상 더 높은 순위를 차지하도록 보장합니다. 이는 "검색"에 대한 기존의 기대치 복원을 극대화하는 동시에 롱테일의 의미론적 관련 숨겨진 명곡을 보완합니다.
IV. 듀얼 라이브러리 병렬 처리: 음악 및 소재 필터링
적용 시나리오가 다르면 인덱싱 요구 사항도 완전히 다릅니다. LanceDB가 검색한 결과(TextVectorSearchHit)에서 library_type(“music” 또는 “material”) 및 surface에 기능을 바인딩했습니다.
이는 사용자가 수백 GB의 무손실 음악 앨범과 음향 효과 자료 컬렉션을 동시에 관리하더라도 검색 파이프라인이 ANN 검색 중에 정확한 기능 분할을 실행하여 환경 음향 효과가 음악 장르 재생 목록에 섞이지 않도록 보장할 수 있음을 의미합니다.
결론
수백만 곡의 로컬 라이브러리 검색 과제는 본질적으로 제한된 에지 컴퓨팅 리소스 하에서 정확성과 포괄성 사이의 균형을 찾는 것입니다. LanceDB와 경량 ONNX 모델을 결합한 하이브리드 검색 아키텍처는 사용자의 데이터 개인 정보 보호를 희생하지 않을 뿐만 아니라 검색 경험을 전례 없는 높이로 끌어올렸습니다. 향후 버전에서는 더 긴 설명 필드의 검색을 지원하기 위해 메타데이터 청킹 탐색도 계획하고 있습니다.
