๊ฐœ์š”

HNSW(Hierarchical Navigable Small World)๋Š” ๊ณ ์ฐจ์› ๋ฒกํ„ฐ ๊ณต๊ฐ„์—์„œ ๊ทผ์‚ฌ ์ตœ๊ทผ์ ‘ ์ด์›ƒ(Approximate Nearest Neighbor, ANN) ๊ฒ€์ƒ‰์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ทธ๋ž˜ํ”„ ๊ธฐ๋ฐ˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ๊ณ„์ธต์  ๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋กœ๊ทธ ๋ณต์žก๋„์˜ ๊ฒ€์ƒ‰ ์„ฑ๋Šฅ์„ ์ œ๊ณตํ•˜๋ฉฐ, ๋น ๋ฅธ ๊ฒ€์ƒ‰ ์†๋„์™€ ๋†’์€ ์žฌํ˜„์œจ(recall)๋กœ ํ˜„๋Œ€ ๋ฒกํ„ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ์ธ๋ฑ์‹ฑ ๋ฐฉ์‹ ์ค‘ ํ•˜๋‚˜๋‹ค.

๋ฐฐ๊ฒฝ๊ณผ ์—ญ์‚ฌ

  • HNSW๋Š” 2016๋…„ Yury Malkov์™€ Dmitry Yashunin์ด ๋…ผ๋ฌธ โ€œEfficient and robust approximate nearest neighbor search using Hierarchical Navigable Small World graphsโ€์—์„œ ๋ฐœํ‘œํ–ˆ๋‹ค.
  • NSW(Navigable Small World) ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ํ™•๋ฅ ์  ์Šคํ‚ต ๋ฆฌ์ŠคํŠธ(Probabilistic Skip List)์˜ ๊ฐœ๋…์„ ๊ฒฐํ•ฉํ•˜์—ฌ ๊ฐœ๋ฐœ๋˜์—ˆ๋‹ค.
  • Pinecone, Milvus, Weaviate, Vespa ๋“ฑ ์ฃผ์š” ๋ฒกํ„ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ๊ธฐ๋ณธ ์ธ๋ฑ์Šค๋กœ ์ฑ„ํƒํ•˜๊ณ  ์žˆ๋‹ค.
  • ์ค‘๊ฐ„ ํฌ๊ธฐ์˜ ๋ฒกํ„ฐ ๋ฐ์ดํ„ฐ์…‹์—์„œ ํŠนํžˆ ๋›ฐ์–ด๋‚œ ์„ฑ๋Šฅ์„ ๋ณด์ด๋ฉฐ, ๋‹ค์–‘ํ•œ ๋„๋ฉ”์ธ(์ž„๋ฒ ๋”ฉ ๊ฒ€์ƒ‰, ์ถ”์ฒœ ์‹œ์Šคํ…œ, ์ด๋ฏธ์ง€ ๊ฒ€์ƒ‰ ๋“ฑ)์—์„œ ํ™œ์šฉ๋œ๋‹ค.

๊ธฐ๋ณธ ๊ตฌ์กฐ

๊ณ„์ธต์  ๊ทธ๋ž˜ํ”„

HNSW๋Š” ์—ฌ๋Ÿฌ ๊ณ„์ธต(layer)์œผ๋กœ ๊ตฌ์„ฑ๋œ ๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„๋‹ค:

  • ์ตœ์ƒ์œ„ ๊ณ„์ธต: ๊ฐ€์žฅ ์ ์€ ๋…ธ๋“œ, ๊ฐ€์žฅ ๊ธด ์—ฐ๊ฒฐ(long-range links)
  • ์ค‘๊ฐ„ ๊ณ„์ธต: ์ ์ง„์ ์œผ๋กœ ๋…ธ๋“œ ์ˆ˜ ์ฆ๊ฐ€
  • ์ตœํ•˜์œ„ ๊ณ„์ธต: ๋ชจ๋“  ๋…ธ๋“œ ํฌํ•จ, ๊ฐ€์žฅ ์งง์€ ์—ฐ๊ฒฐ(short-range links)

๊ฐ ๋…ธ๋“œ๋Š” ๋ฒกํ„ฐ ํ•˜๋‚˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ๊ณ„์ธต ๊ฐ„ ์—ฐ๊ฒฐ์„ ํ†ตํ•ด ๋น ๋ฅธ ํƒ์ƒ‰ ๊ฒฝ๋กœ๋ฅผ ํ˜•์„ฑํ•œ๋‹ค.

Small World ์†์„ฑ

  • Small World ๋„คํŠธ์›Œํฌ: ๋†’์€ ํด๋Ÿฌ์Šคํ„ฐ๋ง ๊ณ„์ˆ˜์™€ ์งง์€ ํ‰๊ท  ๊ฒฝ๋กœ ๊ธธ์ด๋ฅผ ๊ฐ€์ง„ ๋„คํŠธ์›Œํฌ
  • ์†Œ์…œ ๋„คํŠธ์›Œํฌ์˜ โ€œ6๋‹จ๊ณ„ ๋ถ„๋ฆฌ ์ด๋ก โ€๊ณผ ์œ ์‚ฌํ•œ ์›๋ฆฌ
  • ๊ธด ๊ฑฐ๋ฆฌ์˜ โ€œ๋ฐ”๋กœ๊ฐ€๊ธฐโ€ ์—ฐ๊ฒฐ๊ณผ ์งง์€ ๊ฑฐ๋ฆฌ์˜ ์ง€์—ญ ์—ฐ๊ฒฐ์„ ๋™์‹œ์— ํ™œ์šฉ

๊ฒ€์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜

1. ์ง„์ž…์  ์„ ํƒ

์ตœ์ƒ์œ„ ๊ณ„์ธต์˜ ์ง„์ž…์ (entry node)์—์„œ ๊ฒ€์ƒ‰ ์‹œ์ž‘

๊ฐ ๊ณ„์ธต์—์„œ:

  1. ํ˜„์žฌ ๋…ธ๋“œ์˜ ์ด์›ƒ ์ค‘ ์ฟผ๋ฆฌ ๋ฒกํ„ฐ์™€ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋…ธ๋“œ ์„ ํƒ
  2. ๋” ๊ฐ€๊นŒ์šด ๋…ธ๋“œ๊ฐ€ ์—†์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต
  3. ์ง€์—ญ ์ตœ์†Ÿ๊ฐ’(local minimum)์— ๋„๋‹ฌํ•˜๋ฉด ๋‹ค์Œ ๊ณ„์ธต์œผ๋กœ ์ด๋™

3. ๊ณ„์ธต ํ•˜๊ฐ•

  • ์ƒ์œ„ ๊ณ„์ธต: ๊ธด ์—ฐ๊ฒฐ๋กœ ๋น ๋ฅด๊ฒŒ ๋Œ€๋žต์ ์ธ ์˜์—ญ ํƒ์ƒ‰
  • ํ•˜์œ„ ๊ณ„์ธต: ์งง์€ ์—ฐ๊ฒฐ๋กœ ์ •๋ฐ€ํ•œ ์ตœ๊ทผ์ ‘ ์ด์›ƒ ํƒ์ƒ‰

4. ์ตœ์ข… ๊ฒฐ๊ณผ

์ตœํ•˜์œ„ ๊ณ„์ธต์—์„œ k๊ฐœ์˜ ์ตœ๊ทผ์ ‘ ์ด์›ƒ ๋ฐ˜ํ™˜

์ฃผ์š” ํŒŒ๋ผ๋ฏธํ„ฐ

M (์—ฐ๊ฒฐ ์ˆ˜)

  • ๊ฐ ๋…ธ๋“œ๊ฐ€ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์–‘๋ฐฉํ–ฅ ์—ฐ๊ฒฐ ์ˆ˜
  • ๋†’์„์ˆ˜๋ก: ๋” ๋‚˜์€ ์žฌํ˜„์œจ, ๋” ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ
  • ์ผ๋ฐ˜์  ๋ฒ”์œ„: 12~48
  • ๊ธฐ๋ณธ๊ฐ’: 16

efConstruction (๊ตฌ์ถ• ์‹œ ํƒ์ƒ‰ ํฌ๊ธฐ)

  • ๊ทธ๋ž˜ํ”„ ๊ตฌ์ถ• ์ค‘ ํ›„๋ณด ์ด์›ƒ ํƒ์ƒ‰ ๋ฒ”์œ„
  • ๋†’์„์ˆ˜๋ก: ๋” ๋‚˜์€ ๊ทธ๋ž˜ํ”„ ํ’ˆ์งˆ, ๋” ๊ธด ๊ตฌ์ถ• ์‹œ๊ฐ„
  • ์ผ๋ฐ˜์  ๋ฒ”์œ„: 100~500

efSearch (๊ฒ€์ƒ‰ ์‹œ ํƒ์ƒ‰ ํฌ๊ธฐ)

  • ๊ฒ€์ƒ‰ ์ค‘ ํƒ์ƒ‰ํ•  ํ›„๋ณด ๋…ธ๋“œ ์ˆ˜
  • ๋†’์„์ˆ˜๋ก: ๋” ๋‚˜์€ ์žฌํ˜„์œจ, ๋” ๊ธด ๊ฒ€์ƒ‰ ์‹œ๊ฐ„
  • ๋™์ ์œผ๋กœ ์กฐ์ • ๊ฐ€๋Šฅ

๋ณต์žก๋„ ๋ถ„์„

์—ฐ์‚ฐ์‹œ๊ฐ„ ๋ณต์žก๋„๊ณต๊ฐ„ ๋ณต์žก๋„
์‚ฝ์ž…
๊ฒ€์ƒ‰
์‚ญ์ œ-
  • : ๋ฐ์ดํ„ฐ์…‹ ํฌ๊ธฐ
  • : ์—ฐ๊ฒฐ ์ˆ˜ ํŒŒ๋ผ๋ฏธํ„ฐ

HNSW์™€ ๋‹ค๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋น„๊ต

์•Œ๊ณ ๋ฆฌ์ฆ˜๊ฒ€์ƒ‰ ์†๋„์žฌํ˜„์œจ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰๊ตฌ์ถ• ์‹œ๊ฐ„
HNSW๋งค์šฐ ๋น ๋ฆ„๋†’์Œ๋†’์Œ๋ณดํ†ต
IVF (Inverted File)๋น ๋ฆ„๋ณดํ†ต๋‚ฎ์Œ๋น ๋ฆ„
NSW๋น ๋ฆ„๋†’์Œ๋†’์Œ๋น ๋ฆ„
LSH (Locality Sensitive Hashing)๋ณดํ†ต๋ณดํ†ต๋‚ฎ์Œ๋งค์šฐ ๋น ๋ฆ„
Brute Force๋А๋ฆผ์™„๋ฒฝ๋งค์šฐ ๋‚ฎ์Œ์—†์Œ

์žฅ์ ๊ณผ ๋‹จ์ 

์žฅ์ 

  • ๋กœ๊ทธ ๋ณต์žก๋„์˜ ๋น ๋ฅธ ๊ฒ€์ƒ‰ ์„ฑ๋Šฅ
  • ๋†’์€ ์žฌํ˜„์œจ (95~99% ์ด์ƒ ๊ฐ€๋Šฅ)
  • ๊ณ ์ฐจ์› ๋ฐ์ดํ„ฐ์—์„œ๋„ ์„ฑ๋Šฅ ์œ ์ง€
  • ๋™์  ์‚ฝ์ž…/์‚ญ์ œ ์ง€์›
  • ํŒŒ๋ผ๋ฏธํ„ฐ ํŠœ๋‹์„ ํ†ตํ•œ ์„ฑ๋Šฅ-๋ฉ”๋ชจ๋ฆฌ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„ ์กฐ์ ˆ

๋‹จ์ 

  • ๋†’์€ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ (๊ฐ ๋…ธ๋“œ๋‹น ๊ฐœ์˜ ์—ฐ๊ฒฐ ์ €์žฅ)
  • ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ์…‹์—์„œ ๋ฉ”๋ชจ๋ฆฌ ์ œ์•ฝ
  • ๊ตฌ์ถ• ์‹œ๊ฐ„์ด ์ƒ๋Œ€์ ์œผ๋กœ ๊ธธ ์ˆ˜ ์žˆ์Œ
  • ์™„์ „ํ•œ ์ •ํ™•๋„๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š์Œ (๊ทผ์‚ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜)

์ตœ์ ํ™” ๋ฐ ๋ณ€ํ˜•

์••์ถ• ๊ธฐ๋ฒ•

  • Quantization: ๋ฒกํ„ฐ๋ฅผ ์–‘์žํ™”ํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ์ ˆ๊ฐ
  • Product Quantization (PQ): ๋ฒกํ„ฐ๋ฅผ ์„œ๋ธŒ๋ฒกํ„ฐ๋กœ ๋ถ„ํ• ํ•˜์—ฌ ์••์ถ•
  • DiskANN: ๋””์Šคํฌ ๊ธฐ๋ฐ˜ ์ €์žฅ์œผ๋กœ ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ์…‹ ์ง€์›

ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์ ‘๊ทผ

  • HNSW + IVF: 1์ฐจ ํด๋Ÿฌ์Šคํ„ฐ๋ง ํ›„ HNSW ์ ์šฉ
  • HNSW + PQ: ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์„ฑ๊ณผ ๊ฒ€์ƒ‰ ์„ฑ๋Šฅ ๊ท ํ˜•

๊ตฌํ˜„ ์‹œ ๊ณ ๋ ค ์‚ฌํ•ญ

๋ฒกํ„ฐ ์ •๊ทœํ™”

  • ์ฝ”์‚ฌ์ธ ์œ ์‚ฌ๋„ ์‚ฌ์šฉ ์‹œ ๋ฒกํ„ฐ ์ •๊ทœํ™” ๊ถŒ์žฅ
  • L2 ๊ฑฐ๋ฆฌ ์‚ฌ์šฉ ์‹œ ์ •๊ทœํ™” ๋ถˆํ•„์š”

ํŒŒ๋ผ๋ฏธํ„ฐ ํŠœ๋‹ ์ „๋žต

  1. M ์„ ํƒ: ๋ฐ์ดํ„ฐ์…‹ ํฌ๊ธฐ์™€ ๋ฉ”๋ชจ๋ฆฌ ์ œ์•ฝ ๊ณ ๋ ค

    • ์†Œ๊ทœ๋ชจ (<100K): M=16
    • ์ค‘๊ทœ๋ชจ (100K~1M): M=32
    • ๋Œ€๊ทœ๋ชจ (>1M): M=48+
  2. efConstruction: ๊ทธ๋ž˜ํ”„ ํ’ˆ์งˆ ์šฐ์„  ์‹œ ๋†’๊ฒŒ ์„ค์ •

    • ๋น ๋ฅธ ๊ตฌ์ถ•: 100~200
    • ๊ท ํ˜•: 200~400
    • ์ตœ๊ณ  ํ’ˆ์งˆ: 400~800
  3. efSearch: ์‹ค์‹œ๊ฐ„ ์กฐ์ • ๊ฐ€๋Šฅ

    • ๋น ๋ฅธ ๊ฒ€์ƒ‰: k * 1~2
    • ๊ท ํ˜•: k * 10~20
    • ๋†’์€ ์žฌํ˜„์œจ: k * 50~100

๊ฑฐ๋ฆฌ ๋ฉ”ํŠธ๋ฆญ ์„ ํƒ

  • L2 (Euclidean): ์ ˆ๋Œ€ ๊ฑฐ๋ฆฌ ์ค‘์š” ์‹œ
  • IP (Inner Product): ๋‚ด์  ๊ธฐ๋ฐ˜ ์œ ์‚ฌ๋„
  • Cosine: ๋ฐฉํ–ฅ ์œ ์‚ฌ๋„ (์ •๊ทœํ™”๋œ IP)

๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ

  • ์ธ๋ฉ”๋ชจ๋ฆฌ vs. ๋””์Šคํฌ ๊ธฐ๋ฐ˜ ์ €์žฅ์†Œ ์„ ํƒ
  • ๋ฒกํ„ฐ ์••์ถ• ๊ธฐ๋ฒ• ์ ์šฉ (PQ, Scalar Quantization)
  • ๋ฐฐ์น˜ ์‚ฝ์ž…์œผ๋กœ ๊ตฌ์ถ• ํšจ์œจ์„ฑ ํ–ฅ์ƒ

๋ชจ๋‹ˆํ„ฐ๋ง ์ง€ํ‘œ

  • ์žฌํ˜„์œจ(Recall): ์ •ํ™•๋„ ์ธก์ •
  • QPS(Queries Per Second): ์ฒ˜๋ฆฌ๋Ÿ‰
  • P99 ๋ ˆ์ดํ„ด์‹œ: ์‘๋‹ต ์‹œ๊ฐ„
  • ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰: ๋ฆฌ์†Œ์Šค ํšจ์œจ์„ฑ

ํ™œ์šฉ ์‚ฌ๋ก€

์‹œ๋งจํ‹ฑ ๊ฒ€์ƒ‰

  • ํ…์ŠคํŠธ ์ž„๋ฒ ๋”ฉ ๊ธฐ๋ฐ˜ ๋ฌธ์„œ ๊ฒ€์ƒ‰
  • ์งˆ์˜-์‘๋‹ต ์‹œ์Šคํ…œ
  • BM25์™€ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰

์ถ”์ฒœ ์‹œ์Šคํ…œ

  • ์•„์ดํ…œ ์œ ์‚ฌ๋„ ๊ธฐ๋ฐ˜ ์ถ”์ฒœ
  • ์‚ฌ์šฉ์ž ์ž„๋ฒ ๋”ฉ ๋งค์นญ

์ด๋ฏธ์ง€/๋น„๋””์˜ค ๊ฒ€์ƒ‰

  • ์‹œ๊ฐ์  ์œ ์‚ฌ๋„ ๊ฒ€์ƒ‰
  • ์–ผ๊ตด ์ธ์‹
  • ์ค‘๋ณต ๊ฐ์ง€

๋ฉ€ํ‹ฐ๋ชจ๋‹ฌ ๊ฒ€์ƒ‰

  • ํ…์ŠคํŠธ-์ด๋ฏธ์ง€ ํฌ๋กœ์Šค ๊ฒ€์ƒ‰
  • CLIP ๋“ฑ ๋ฉ€ํ‹ฐ๋ชจ๋‹ฌ ์ž„๋ฒ ๋”ฉ ํ™œ์šฉ

์ฐธ๊ณ  ์ž๋ฃŒ

๋…ผ๋ฌธ ๋ฐ ํ•™์ˆ  ์ž๋ฃŒ

๊ธฐ์ˆ  ๋ฌธ์„œ ๋ฐ ํŠœํ† ๋ฆฌ์–ผ

๊ตฌํ˜„ ๋ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

  • hnswlib - C++ ๊ธฐ๋ฐ˜ ๊ณ ์„ฑ๋Šฅ HNSW ๊ตฌํ˜„์ฒด (Python ๋ฐ”์ธ๋”ฉ ํฌํ•จ)
  • FAISS - Meta์˜ ๋ฒกํ„ฐ ๊ฒ€์ƒ‰ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ (HNSW ํฌํ•จ)