SeRF: Segment Graph for Range-Filtering Approximate Nearest Neighbor Search
SeRF: Segment Graph for Range-Filtering Approximate Nearest Neighbor Search
About Paper
- 제목: SeRF: Segment Graph for Range-Filtering Approximate Nearest Neighbor Search
- 저널: ACM Manag. Data, Vol. 2, No. 1 (SIGMOD, Special Interest Group on Management of Data), Article 69. Feb 2024.
- 저자: Chaoji Zuo, Miao Qiao, Wenchao Zhou, Feifei Li, Dong Deng
Introduction
ANN Search가 사용되는 분야
- image, document, graph와 같은 실세계 데이터를 고차원 벡터로 임베딩하는 기술이 계속 발전하고 있음
- 한편, 이러한 데이터는 timestamps, prices, quantities와 같은 structured data와 함께 연관되어 사용되곤 했음
- 예시 1: 상품 탐색
- 200달러 미만의 주어진 이미지와 비슷한 상품 탐색
- 예시 2: 자동차 탐색
- 도로 위 카메라는 주어진 이미지를 임베딩하여 벡터 생성
- 생성된 벡터는 database timestamp에 저장 및 탐색
- 번호판 없이, (time, space, image) 정보로 차량 특정
- 예시 1: 상품 탐색
- 그러나, 기존 RDBMS 기반 Filtering과 벡터 탐색을 동시에 수행하는 것은 여전히 데이터공학에서 도전적인 과제
- 해당 문제 해결을 위한 다양한 질의 최적화 기법, 인덱싱 기법이 연구 중에 있음
- 아직 많이 미흡한 상황..
한번 떠올려보자. 이미지 검색과 동시에 다양한 필터링 조건을 붙여본 경험이 있던가?
RFANNS(Range-Filtering Approximate Nearest Neighbor Search)
- 위 설명과 같이, 조건을 붙여 벡터를 탐색하는 기법을 RFANNS(Range-Filtering Approximate Nearest Neighbor Search)라 칭함
- Range-Filtering ANNS(Approximate Nearest Neighbor Search)는 query range(질의 범위)와 query vector(질의 벡터)로 구성됨
- 도전적인 과제인 이유는 생각보다 단순하다
- 전체 벡터에 대한 인덱스는 존재하나, 필터링 된 벡터에 대한 인덱스는 없기 때문
- 한편, 기존 range-filtering ANNS는 크게 2가지로 분류가 가능하다
- ANNS-first (vectorDB-first)
- ANNS-first는 주어진 query range에 부합할 때까지 ANN Search 수행
- 주어진 query range에 부합하는 vector들을 반환
- query range가 작은 경우, 조건에 부합하는 vector를 지속적으로 탐색하므로 수행 속도가 느리다
- range-first (RDBMS-first)
- 주어진 range에 따른 structured database에서 우선 탐색
- structured database에서 필터링된 레코드에 대한 vector index가 구축되어 있지 않아 filtering 된 vector들은 naive한 탐색을 수행
- 특히, range-first는 query range가 클 때, 비효율적
- 주어진 상황에 어떤 전략을 취해야 할지에 대한 연구는 아래 논문을 참고하자
- Jianguo Wang, et al. “Milvus: A Purpose-Built Vector Data Management System”. ACM SIGMOD ‘21.
- https://dl.acm.org/doi/10.1145/3448016.3457550
- ANNS-first (vectorDB-first)
HNSW(Hierarchical Navigable Small World)
- Paper
- Yu. A. Malkov, D. A. Yashunin. “Efficient and robust approximate nearest neighbor search using Hierarchical Navigable Small World”. IEEE Transactions on pattern analysis and machine intelligence. 2018.
- http://arxiv.org/pdf/1603.09320
- My Paper Review
Proposing Solution: Segment Graph
- Half-bounded Range-Filtering ANNS Query: Segment Graph
- Half-bounded: 주어진 set of vectors를 2개의 subset으로 분할
- attribute에 따라 n개의 half-bounded hnsw index 생성 가능
- 분할된 데이터를 통해 n개의 HNSW index 구축
- 구축된 n개의 HNSW index를 무손실 압축하여 Segment Graph 구축
- General Range-Filtering ANNS Query: 2D Segment Graph
- N개의 Segment Graph를 통해 2D Segment Graph 구축
Preliminary
Segment
Segment의 사전적 의미
- 명사: 부분, 단편, 분절(分節), 구분, 마디(division, section), 계층
- 동사 전문 용어: (여러 부분으로)나누다, 분할하다
컴퓨터 공학에서 Segment
- 컴퓨터 공학에서 Segment의 의미도 동일하다.
- OS에서 Segmentation은 메모리 공간을 프로세스 단위로 나누어 관리하는 기법을 말하고
- CV에서 Image Segmentation는 이미지에서 특정 개체를 추출(구분, 분할)하는 방법을 말한다
- 또한, 자료구조에서 Segment Tree는 부분 질의에 대한 집계 결과들을 트리 형태로 관리하는 것을 말한다
- 결론적인 기능 자체는 범위 질의에 대한 최대, 최소, 합, 곱 연산 결과를 미리 연산하면서 효율적인 접근이 가능한 형태의 트리로 관리하는 것이다
Segment Tree
- Segment Tree에 대해 잠깐 짚어보고 넘어가자. 이번 포스팅에 꼭 필요한 지식은 아니나 아이디어 자체는 비슷하다고 생각한다
- 길이가 1000인 array에서 10~100번 idx의 부분합을 구하려면 결국 해당 범위만큼의 복잡도가 따른다
- 시작 범위를 $i$, 마지막 범위를 $j$라 하면, 시간복잡도는 $T(j-i+1)$ 이다
- 한편, 아래와 같은 Segment Tree의 형태로 합 연산을 미리 저장해두면 $O(\log N)$ 의 복잡도를 보장해준다
- 원하는 범위를 적절하게 포함하고 있는 노드 하나를 선택한 후 해당되지 않는 일부 범위를 빼거나 해당되는 일부 범위를 더하는 방식이다
Range-Filtering
- 특정 애트리뷰트에 조건을 달거나, 범위를 지정하여 필터링 한 후 다른 애트리뷰트를 다시 탐색하는 것
- 질의최적화를 설명하라 할 때, 흔히 등장하는 예시이기도 하다(Column Oriented Database)
- 경기도의 모든 인구(1400만)를 관리하는 테이블이 있다
-
해당 테이블에서 14세 미만(160만)의 모든 남성(700만)을 찾고싶다
- 이때, 14세 미만의 인구를 찾은 뒤 남성을 찾는게 빠를까
-
아니면 남성을 찾은 뒤 그 중에서 14세 미만의 사람을 찾는게 빠를까
- 전자는 1400만명 중에서 160만명을 찾고 160만명 중에서 80만명을 찾는다
- 순차탐색을 진행한다 하였을 때, 1400만개의 레코드를 조회한 후 160만개의 레코드를 조회하니 총 1560만번의 조회가 발생했다
- 후자는 1400만명 중에서 700만명을 찾고 700만명 중에서 80만명을 찾는다
- 순차탐색을 진행한다 하였을 때, 1400만개의 레코드를 조회한 후 700만개의 레코드를 조회하니 총 2100만번의 조회가 발생했다
- 결론적으로 전자가 더 효율적인 접근이다!
- 얘기가 산으로 간 느낌이 강하지만, 결론적으로 위와 같은 상황을 Range-Filtering이라 한다
ANNS(Approximate Nearest Neighbor Search)
- kNN(k-Nearest Neighbors, 최근접 이웃 알고리즘)의 일종이다
- 인공지능 모델로 임베딩된 벡터들을 다시 조회하고 싶을 때 사용하는 알고리즘이다
- 비슷한 이미지 찾기, 비슷한 음성 찾기, …
- 그러나, 기존 kNN의 경우 임베딩 벡터의 차원이 증가함에 따라 복잡도가 선형적으로 증가하여 바로 적용하기 무리인 부분이 존재한다(k-D Tree, Ball Tree)
- 이에 새로 등장하는 대안이 ANNS이고 대표적인 알고리즘으로는 HNSW, Vamana, NSG, ANNOY, IVFPQ 등이 존재한다
- Graph-Based ANNS
- HNSW, Vamana, NSG
- 자료구조 상에서의 dimension에 따른 penalty를 회피하는 방식
- Greedy Search를 주로 사용(Approximate Navigating)
- 이웃 간 거리를 비교하여 당장의 최선의 후보를 선택하는 방식
- 거리 비교 시에는 dimension에 의존적이나, k-D트리와 같이 구조 자체가 dimension에 의존적이지 않다
- Tree-Based ANNS
- ANNOY
- 트리를 계층적으로 생성하여 비교군의 개수 자체를 줄이는 방식
- IVFPQ(Inverted File index & Product Quantization)
- PQ를 통해 클러스터를 나눈 후, 해당 클러스터 내에서 최근접 이웃을 탐색
- Qunatized Vector를 통해 적절한 Voronoi Cell(클러스터)에 접근, 해당 클러스터 내에서 최근접 이웃을 탐색
- Qunatized Vector는 원본 벡터의 차원을 손실 압축한 것
- 즉, PQ는 dimension 자체를 낮춘다
- Graph-Based ANNS
- kNN과 달리, ANNS 알고리즘은 정확한 k개의 최근접 이웃을 반환하지 않지만, 고차원 벡터 데이터를 보다 효율적으로 접근할 수 있게 한다
Notations with Attribute Filtering
RFANNS with Half-bounded Query Ranges
RFANNS with Arbitrary Query Ranges
Experiment
Conclusion
References
- Chaoji Zuo, et al. (2024). “SeRF: Segment Graph for Range-Filtering Approximate Nearest Neighbor Search”. Proc. ACM Manag. Data 2, 1, Article 69. https://dl.acm.org/doi/10.1145/3639324.
- Yu. A. Malkov, D. A. Yashunin. “Efficient and robust approximate nearest neighbor search using Hierarchical Navigable Small World”. IEEE Transactions on pattern analysis and machine intelligence. 2018. http://arxiv.org/pdf/1603.09320.
- Jianguo Wang, et al. “Milvus: A Purpose-Built Vector Data Management System”. ACM SIGMOD ‘21. https://dl.acm.org/doi/10.1145/3448016.3457550.
- dunno.log. (2021.08.27). “[딥러닝] 이미지 세그멘테이션(Image Segmentation)”. https://velog.io/@dongho5041/딥러닝-이미지-세그멘테이션Image-Segmentation.
- gang_shik.log. (2022.04.02). “페이징(Paging)과 세그먼테이션(Segmentation)”. https://velog.io/@gang_shik/페이징Paging과-세그먼테이션Segmentation.
- Nesoy Blog. (2019.10.01). “Column Oriented DBMS란?”https://nesoy.github.io/articles/2019-10/Column-Oriented-DBMS.
댓글남기기