벡터검색

태그: 벡터검색

이 태그가 포함된 글들입니다. (총 3개)

Faiss

Faiss - 벡터검색엔진 #

개요 - Overview #

Faiss(Facebook AI Similarity Search)는 Meta(구 Facebook)의 AI Research Lab에서 개발한 고성능 벡터 유사도 검색 라이브러리입니다. 대규모 벡터 데이터셋에서 효율적인 유사도 검색과 클러스터링을 수행할 수 있도록 설계되었습니다.

주요 특징 - Key Features #

1. 고성능 검색 #

  • 빠른 검색 속도: 수십억 개의 벡터에서도 밀리초 단위의 검색 성능
  • 메모리 효율성: 압축 기법을 통한 메모리 사용량 최적화
  • GPU 가속: CUDA를 활용한 GPU 병렬 처리 지원

2. 다양한 인덱스 타입 #

  • Flat Index: 정확한 검색을 위한 브루트 포스 방식
  • IVF (Inverted File): 클러스터 기반 근사 검색
  • HNSW (Hierarchical Navigable Small World): 그래프 기반 근사 검색
  • PQ (Product Quantization): 벡터 압축을 통한 메모리 절약

3. 확장성 #

  • 분산 처리: 여러 GPU와 노드에서의 병렬 처리
  • 대용량 데이터: 수십억 개의 벡터 처리 가능
  • 실시간 업데이트: 동적 인덱스 업데이트 지원

사용 사례 - Use Cases #

1. 추천 시스템 #

  • 사용자 임베딩 기반 유사 사용자 찾기
  • 아이템 임베딩 기반 상품 추천
  • 콘텐츠 기반 필터링

2. 자연어 처리 #

  • 문서 유사도 검색
  • 의미적 검색 (Semantic Search)
  • 질의응답 시스템

3. 컴퓨터 비전 #

  • 이미지 유사도 검색
  • 얼굴 인식 및 매칭
  • 객체 검색 및 분류

4. 정보 검색 #

  • 벡터 데이터베이스 구축
  • 임베딩 기반 검색 엔진
  • 지식 그래프 탐색

설치 및 기본 사용법 - Installation & Basic Usage #

설치 #

# CPU 버전
pip install faiss-cpu

# GPU 버전 (CUDA 필요)
pip install faiss-gpu

기본 사용 예제 #

import faiss
import numpy as np

# 벡터 데이터 준비
dimension = 128
nb = 100000
np.random.seed(1234)
xb = np.random.random((nb, dimension)).astype('float32')
xq = np.random.random((10, dimension)).astype('float32')

# 인덱스 생성 및 학습
index = faiss.IndexFlatL2(dimension)
index.add(xb)

# 검색 수행
k = 5  # 상위 5개 결과
distances, indices = index.search(xq, k)

성능 최적화 - Performance Optimization #

1. 인덱스 선택 가이드 #

  • 정확도 우선: IndexFlatL2, IndexFlatIP
  • 속도 우선: IndexIVFFlat, IndexIVFPQ
  • 메모리 절약: IndexPQ, IndexIVFPQ
  • 균형: IndexHNSWFlat

2. 파라미터 튜닝 #

  • nlist: IVF 인덱스의 클러스터 수 (√n 권장)
  • nprobe: 검색 시 탐색할 클러스터 수
  • M: PQ의 서브벡터 수
  • efConstruction/efSearch: HNSW 파라미터

3. GPU 활용 #

# GPU 리소스 설정
res = faiss.StandardGpuResources()
gpu_index = faiss.index_cpu_to_gpu(res, 0, cpu_index)

장단점 - Pros and Cons #

장점 #

  • 뛰어난 성능: 대규모 데이터에서도 빠른 검색 속도
  • 다양한 옵션: 용도에 맞는 다양한 인덱스 타입 제공
  • GPU 지원: CUDA를 통한 하드웨어 가속
  • 활발한 커뮤니티: Meta의 지속적인 개발과 지원

단점 #

  • 학습 곡선: 다양한 옵션으로 인한 초기 설정의 복잡성
  • 메모리 요구사항: 대용량 데이터 처리 시 높은 메모리 사용량
  • 정확도 트레이드오프: 속도 향상을 위한 근사 검색 시 정확도 손실

유사 도구 #

  • Annoy: Spotify에서 개발한 근사 최근접 이웃 라이브러리
  • Hnswlib: HNSW 알고리즘의 효율적인 구현
  • Milvus: 오픈소스 벡터 데이터베이스
  • Pinecone: 관리형 벡터 데이터베이스 서비스

통합 솔루션 #

  • Weaviate: GraphQL 기반 벡터 검색 엔진
  • Qdrant: Rust로 작성된 벡터 검색 엔진
  • Chroma: AI 애플리케이션을 위한 임베딩 데이터베이스

참고 자료 - References #

GPT

GPT (Generative Pretrained Transfoer) #

GPT는 “Generative Pretrained Transformer"의 줄임말로, OpenAI에서 개발한 대규모 언어모델이다. 트랜스포머(Transformer) 아키텍처를 기반으로 하여 대량의 텍스트 데이터로 사전 훈련된 생성형 인공지능 모델이다.

GPT의 발전 과정 #

GPT-1 (2018) #

  • 1억 1700만 개의 매개변수
  • 트랜스포머 디코더 구조를 사용한 최초의 GPT 모델
  • 비지도 사전 훈련과 지도 미세 조정의 두 단계 학습 방식 도입

GPT-2 (2019) #

  • 15억 개의 매개변수
  • “무서울 정도로 좋다"는 평가를 받아 처음에는 전체 모델이 공개되지 않았음
  • Zero-shot 학습 능력을 보여주며 별도의 미세 조정 없이도 다양한 작업 수행 가능

GPT-3 (2020) #

  • 1750억 개의 매개변수
  • Few-shot 학습 능력으로 몇 가지 예시만으로도 새로운 작업 수행 가능
  • API 형태로 서비스되어 다양한 응용 프로그램 개발의 기반이 됨

GPT-4 (2023) #

  • 매개변수 수는 공개되지 않았으나 GPT-3보다 훨씬 큰 규모
  • 멀티모달 기능으로 텍스트와 이미지를 함께 처리 가능
  • 더욱 향상된 추론 능력과 안전성

GPT의 핵심 기술 #

트랜스포머 아키텍처 #

GPT는 트랜스포머의 디코더 부분만을 사용하는 구조이다. 어텐션 메커니즘을 통해 문맥을 이해하고 다음 토큰을 예측하는 방식으로 작동한다.

LLM

LLM (Large Language Model) #

초거대언어모델이라고 할 수 있다. 언어모델은 원래 다른 모델에 비해서 용량이 크다. 초거대언어모델은 Large Lnaguage Model이 원어이지만 초거대언어모델이라고 하는 것이 맞다. 그 규모가 매우 크기 때문이다.

LLM의 특징 #

LLM은 수십억 개에서 수조 개의 매개변수를 가진 대규모 신경망 모델이다. 이러한 거대한 규모 덕분에 다음과 같은 특징을 보인다:

  • 창발적 능력(Emergent Abilities): 모델의 크기가 일정 임계점을 넘으면 예상치 못한 새로운 능력이 나타난다
  • 맥락 학습(In-Context Learning): 별도의 훈련 없이도 몇 가지 예시만으로 새로운 작업을 수행할 수 있다
  • 다중 작업 수행: 번역, 요약, 질의응답, 코드 생성 등 다양한 언어 작업을 하나의 모델로 처리할 수 있다

주요 LLM 모델들 #

GPT 시리즈 #

  • GPT-3: 1750억 개의 매개변수를 가진 OpenAI의 대표적인 LLM
  • GPT-4: GPT-3의 후속 모델로 멀티모달 기능을 포함
  • GPT-4.1: GPT-4의 후속 모델로 멀티모달 기능을 포함
  • ChatGPT: GPT 모델을 대화형 인터페이스로 구현한 서비스

Claude 시리즈 #

  • Claude: Anthropic에서 개발한 헌법적 AI(Constitutional AI) 기반의 안전성 중심 모델
  • Claude 2: 향상된 성능과 더 긴 컨텍스트 윈도우를 제공하는 후속 모델
  • Claude 3: Haiku, Sonnet, Opus 세 가지 버전으로 출시된 최신 시리즈
    • Claude 3 Haiku: 빠른 응답 속도에 최적화된 경량 모델
    • Claude 3 Sonnet: 성능과 속도의 균형을 맞춘 중간 모델
    • Claude 3 Opus: 가장 강력한 성능을 제공하는 플래그십 모델
  • Claude 3.5: Claude 3의 개선된 버전으로 더욱 향상된 추론 능력과 코딩 성능을 제공
    • Claude 3.5 Sonnet: 기존 Claude 3 Opus와 비슷한 성능을 더 빠른 속도로 제공하는 모델
    • Claude 3.5 Haiku: 경량화된 모델의 성능을 크게 향상시킨 버전
  • Claude 4: Claude 4
  • Claude 4: 2024년 후반에 출시 예정인 Anthropic의 차세대 모델로, 더욱 향상된 추론 능력과 안전성을 목표로 개발 중이다. 멀티모달 기능의 확장과 더 긴 컨텍스트 처리 능력이 기대되고 있다.

기타 주요 모델들 #

  • BERT: Google에서 개발한 양방향 인코더 기반 모델
  • T5: Text-to-Text Transfer Transformer
  • PaLM: Google의 5400억 매개변수 모델
  • LaMDA: Google의 대화 전용 언어모델
  • Claude: Anthropic에서 개발한 안전성에 중점을 둔 모델

LLM의 훈련 과정 #

사전 훈련 (Pre-training) #

대량의 텍스트 데이터를 사용하여 언어의 패턴과 구조를 학습하는 단계이다. 주로 다음 단어 예측(Next Token Prediction) 작업을 통해 이루어진다.