HNSW (Hierarchical Navigable Small World) - 1

HanJu Han·2024년 11월 20일

RAG

목록 보기
3/9

HNSW는 스킵 리스트의 개념을 확장해서 사용합니다.

  1. 기본 구조 차이:
스킵 리스트:
- 1차원적 구조
- 순차적으로만 이동
- 위/아래/왼쪽/오른쪽 이동

HNSW:
- 다차원적 구조
- 모든 방향 이동 가능
- 더 자유로운 연결
  1. 연결 방식 차이:
스킵 리스트 연결:
3 -> 22 -> 30 -> 55 (한 방향)

HNSW 연결:
상품 A가 가진 연결:
- 비슷한 가격 상품들
- 같은 브랜드 상품들
- 비슷한 스타일 상품들
- 함께 구매되는 상품들
(다양한 방향으로 연결)
  1. 검색 방식 차이:
스킵 리스트 검색 (91 찾기):
레벨2: 3 -> 68 -> 96
레벨1: 68 -> 77 -> 88
레벨0: 88 -> 91
(정해진 경로로만 이동)

HNSW 검색 (검은색 운동화 찾기):
- 아무 운동화에서 시작
- 검은색 방향으로 이동
- 운동화 스타일 방향으로 이동
- 가격대 방향으로 이동
(다차원적으로 자유롭게 이동)
  1. 실제 활용 예시:
온라인 쇼핑몰에서:

스킵 리스트:
- 가격순 정렬
- 인기도순 정렬
- 하나의 기준으로만 정렬/검색

HNSW:
- 가격 + 스타일 + 브랜드 + 색상
- 여러 기준 동시 고려
- 복합적인 검색 가능
  1. 장단점 비교:
스킵 리스트:
장점:
- 구현이 단순
- 메모리 사용 적음
- 1차원 데이터에 효율적

단점:
- 다차원 검색 어려움
- 복합 조건 처리 어려움

HNSW:
장점:
- 다차원 검색 가능
- 복합 조건 처리 가능
- 더 유연한 검색

단점:
- 구현이 복잡
- 메모리 사용 많음
  1. 실제 검색 예시:
"나이키 검은색 운동화 (10만원대)" 검색:

스킵 리스트 방식:
1. 가격으로 먼저 검색
2. 필터링으로 나이키 선택
3. 필터링으로 검은색 선택
(여러 단계 필요)

HNSW 방식:
1. 가격, 브랜드, 색상을 
   동시에 고려해서 이동
2. 가장 유사한 상품으로
   바로 이동 가능
(한 번에 처리 가능)
  1. 확장성 차이:
100만개 → 1000만개 증가 시:

스킵 리스트:
- 레벨만 늘리면 됨
- 단순하게 확장

HNSW:
- 새로운 연결 생성
- 더 복잡한 구조로 확장
- 더 효율적인 검색 유지

이처럼 HNSW는 스킵 리스트의 개념을 차용하되, 다차원 데이터를 더 효율적으로 처리할 수 있도록 확장한 구조입니다. 특히 복잡한 조건의 유사도 검색에서 큰 강점을 보입니다.

profile
시리즈를 기반으로 작성하였습니다.

0개의 댓글