---
id: [[P-Reinforce|P-Reinforce]]-AUTO-VSR-001
category: AI_and_ML
confidence_score: 1.00
tags: [auto-reinforced, vector-search, ann, semantic-similarity, information-retrieval]
last_reinforced: 2026-05-04
---

# [[Vector Search|Vector Search]]

## 📌 한 줄 통찰 (The Karpathy Summary)
> "키워드 매칭에서 의미 매칭으로: 단순한 단어의 일치 여부를 넘어, 고차원 벡터 공간에서의 거리를 계산함으로써 사용자의 '의도'와 가장 유사한 맥락의 정보를 찾아내는 수학적 검색 기법."

## 📖 구조화된 지식 (Synthesized Content)
벡터 검색(Vector Search)은 데이터를 다차원 공간의 벡터로 표현하고, 질의 벡터와의 거리(Similarity)를 계산하여 가장 관련성 높은 항목을 반환하는 기술입니다.

1.  **전통적 검색 vs 벡터 검색**:
    *   **전통적 검색 ([[Keyword Search|Keyword Search]])**: 단어의 존재 유무(TF-IDF, BM25)에 의존합니다. '사과'를 검색하면 'Apple'이 포함된 문서를 놓칠 수 있습니다.
    *   **벡터 검색 ([[Semantic Search|Semantic Search]])**: 의미적 유사성을 파악합니다. '아이폰 제조사'를 검색해도 'Apple' 관련 문서를 정확히 찾아낼 수 있습니다.

2.  **핵심 알고리즘: [[ANN (Approximate Nearest Neighbor)|ANN]]**:
    대규모 데이터셋에서 모든 벡터를 전수 조사(Brute-force)하는 것은 불가능하므로, 근사치를 빠르게 찾는 알고리즘을 사용합니다.
    *   **[[HNSW|HNSW]]**: 노드 간의 근접 그래프를 계층적으로 구성하여 고속 탐색을 지원합니다.
    *   **[[Product Quantization (PQ)|PQ]]**: 벡터를 압축하여 메모리 효율성을 극대화합니다.
    *   **[[IVF|IVF]]**: 공간을 클러스터로 분할하여 검색 범위를 국소화합니다.

3.  **유사도 측정 지표 (Distance Metrics)**:
    *   **Cosine Similarity**: 두 벡터 사이의 각도를 측정 (가장 널리 사용).
    *   **Euclidean Distance (L2)**: 두 점 사이의 직선 거리를 측정.
    *   **Dot Product**: 벡터의 크기와 방향을 모두 고려.

## ⚖️ Trade-offs & Caveats
*   **정확도와 속도의 균형**: [[ANN|ANN]] 알고리즘을 사용하면 검색 속도는 비약적으로 빨라지지만, 100% 완벽한 최적해를 보장하지 못하는 트레이드오프가 발생합니다.
*   **컴퓨팅 오버헤드**: 벡터 변환(Embedding) 및 고차원 연산 과정에서 기존 검색 대비 훨씬 많은 리소스를 소모합니다.
*   **단순 쿼리의 비효율성**: 모델명이나 특정 ID 검색과 같은 Exact Match 작업에서는 오히려 전통적인 [[BM25|BM25]]보다 느리거나 부정확할 수 있습니다. (이 때문에 최근에는 두 방식을 결합한 [[Hybrid Search|Hybrid Search]]가 권장됩니다.)

## 💻 실전 구현 코드 (Boilerplate)
`scikit-learn`을 사용하여 두 벡터 간의 유사도를 측정하는 핵심 로직 예시입니다.

```python
from sklearn.metrics.pairwise import cosine_similarity
import numpy as np

# 1. 예시 벡터 (임베딩 모델에서 출력된 값이라고 가정)
query_vector = np.array([[0.1, 0.2, 0.8]]) # "인공지능 지식"
doc_vector_1 = np.array([[0.12, 0.18, 0.75]]) # "AI 지식 강화"
doc_vector_2 = np.array([[0.9, 0.1, 0.05]]) # "오늘의 날씨"

# 2. 유사도 계산
sim_1 = cosine_similarity(query_vector, doc_vector_1)
sim_2 = cosine_similarity(query_vector, doc_vector_2)

print(f"Similarity with Doc 1 (Related): {sim_1[0][0]:.4f}")
print(f"Similarity with Doc 2 (Unrelated): {sim_2[0][0]:.4f}")

# 3. 결과 해석
if sim_1 > 0.85:
    print("문맥적으로 매우 유사한 문서입니다.")
```

## 🔗 지식 연결 (Graph)
*   **기반 기술**: [[Vector Embedding|Vector Embedding]], [[Vector Database|Vector Database]]
*   **활용 분야**: [[Retrieval-Augmented Generation (RAG)|RAG]], [[Semantic Search|Semantic Search]], [[Hybrid Search|Hybrid Search]]
*   **고도화 알고리즘**: [[ANN|ANN]], [[HNSW|HNSW]], [[Product Quantization|PQ]]

---
*Last updated: 2026-05-04*
