제4장. SQLite3를 활용한시맨틱 검색
이 작품은 AI를 사용하여 번역되었습니다. 여러분의 피드백과 의견을 환영합니다: translation-feedback@oreilly.com
이 장에서는 Reddit 콘텐츠를 대상으로 시맨틱 검색을 활용하여 개인 지식 관리 시스템을 구축해 보겠습니다. 여러분은 SQLite의 친숙한 SQL 인터페이스와 벡터 유사도 검색을 결합하여 키워드가 아닌 의미에 따라 검색하는 방법을 배우게 될 것입니다.
제3장에서는 전용 벡터 유사도 검색 엔진인 FAISS를 살펴보았습니다. 여기서는 FAISS를 래핑하여 벡터 검색을 관계형 데이터베이스 환경에 통합하는 SQLite 확장 기능인 sqlite-vss를 사용합니다. 이러한 조합을 통해 단일 SQL 워크플로우 내에서 시맨틱 검색과 관계형 메타데이터 필터링을 함께 수행할 수 있습니다. 실제로 대부분의 sqlite-vss 쿼리는 먼저 가장 가까운 후보들을 검색한 다음, 두 번째 단계로 메타데이터 필터를 적용합니다(필터는 FAISS 검색으로 전달되지 않음). 따라서 충분한 결과를 안정적으로 반환하기 위해 "과도 검색 후 필터링(overfetch-then-filter)" 패턴을 사용할 것입니다.
우리의 목표는 실용적입니다. 다양한 주제의 수백 개 Reddit 게시물을 저장해 두었다고 가정해 보십시오. 이 시스템을 사용하면 정확한 키워드에 구애받지 않고 "엣지 디바이스를 위한 Deep Learning"과 의미가 유사한 게시물을 쿼리하면서, 기간이나 커뮤니티별로 필터링할 수 있습니다. 이 장을 마치면 이러한 기능을 보여주는 작동하는 애플리케이션을 갖게 될 것입니다.
SQLite 벡터 유사도 검색 확장 기능 이해
SQLite 벡터 유사도 검색(VSS) 확장 기능(sqlite-vss)은 SQLite에 벡터 저장 및 유사도 검색 기능을 추가합니다. 이 기능은 SQLite를 개인용 애플리케이션에 적합한 강력한 벡터 데이터베이스로 변환합니다.
핵심 기능
이 확장 기능은 서로 연동되는 두 가지 구성 요소로 이루어져 있습니다( 그림 4-1 참조). 의 vector0 확장 기능은 JSON 또는 바이너리 BLOB에서 벡터를 생성하기 위한 벡터 데이터 유형과 헬퍼 함수를 제공합니다. 의 vss0 확장 기능은 FAISS 기반의 유사도 인덱스를 구축하고 쿼리하는 가상 테이블을 제공합니다. 시스템이 작동하려면 두 확장 기능을 반드시 이 순서대로 로드해야 합니다.
그림 4-1. 확장 스택 아키텍처
벡터 저장 기능을 사용하면 고차원 임베딩 벡터를 일반 SQLite 테이블에 바이너리 BLOB으로 저장할 수 있습니다. 이러한 벡터는 일반적으로 SentenceTransformers와 같은 임베딩 모델에서 생성됩니다.
거리 함수는 벡터 간의 유사도를 계산합니다. 이 확장 기능은 벡터 간의 직선 거리를 측정하는 L2(유클리드) 거리를 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access