본문 바로가기

Upstage AI Lab 2기

Upstage AI Lab 2기 [Day126] Information Retrieval (4) ANN

Upstage AI Lab 2기
2024년 6월 14일 (금) Day_126

 

Embedding 생성과 ANN

ANN 알고리즘 (Approximate Nearest Neighbor)

1. LSH (Loclity Sensitive Hashing) - 여러 벡터를 하나의 버켓으로 군집화

2. Tree/Space Partitioning - ANNOY : vectorspace → subspace로 분할, 트리에 저장

ref:

https://speakerdeck.com/matsui_528/cvpr20-tutorial-billion-scale-approximate-nearest-neighbor-search

https://erikbern.com/2015/10/01/nearest-neighbors-and-vector-models-part-2-how-to-search-in-high-dimensional-spaces.html

 

3. Graph-based Methods

- NSW (Navigable Small World Graphs)

문서 데이터를 graph에 저장, graph-traversal을 통해 가장 가까운 노드 찾기

embedding도 node와 edge로 표현할 수 있다는 idea에 착안. but! edge가 너무 많으면 비효율적

 

- Hierarchical NSW : edge 길이별로 계층을 나눔. 가장 긴 edge부터 탐색, 검색 복잡도를 줄임

ref:

https://medium.com/towards-data-science/similarity-search-part-4-hierarchical-navigable-small-world-hnsw-2aad4fe87d37

 

4. Inverted File Index

K-means Algorithm + Vector Quantization

query 벡터가 클러스터 엣지 근처에 위치할 경우 성능상 문제 발생 → 주변의 여러 클러스터를 포함해서 검색

 

 

상용 Vector DB 비교 분석

유사도 기반 검색, 효율적인 데이터 관리

색인(Indexing) : 인코더를 직접 제공하지는 않음. ANN 알고리즘 사용

검색 : 유사도 계산시 ANN 알고리즘 사용.

Elasticsearch, Faiss, Pinecone

 

ref:

https://www.elastic.co/what-is/vector-search/

 

실습 - Elasticsearch

(한글 형태소 분석기는 vector 유사도 기반과 비교하기 위함)

sparse retrieve : 기존 역색인

dense retrieve : embedding을 이용. 너무 긴 text는 embedding 생성시 효과가 떨어질 수 있음

vector 유사도는 오탈자에 대해서도 강건함

 

실습 - Faiss : 특정 embedding field 하나만 저장

Faiss 는 CPU 버전과 GPU 버전이 있음

문서 전체를 색인하는 방식이 아니라 embedding만 색인. return 값인 offset 사용해서 색인해야 함.

 

실습 - Pinecone

임베딩 이외의 필드를 딕셔너리 포맷으로 같이 넣어줄 수 있음.

문서를 namespace 로 나눠서 저장 가능

 

ColBERT

벡터 인코딩이지만 Bi-encoder와 다름

Cross-encoder : 성능 good, 속도 bad

Bi-encoder : 속도 good, 성능 bad

질의, 문서 각각 임베딩 but 모든 토큰을 이용해서 유사도 계산

차원 축소에 따른 성능 폭이 크진 않음

Poly-Encoder - 미리 임베딩해둬서 연산을 줄임

Late Interaction

 

유사도 계산 방식 : query-document pair에 대해 같은 파라미터를 가지는 BERT 모델로 토큰 레벨 임베딩해 MaxSim 계산

query 개수에 대해 평균

 

Token Level Soft Interaction - TF-IDF 와 유사

triplet 활용, positive, negative에 대해 softmax cross-entropy loss 계산

결국 학습 데이터 구축이 문제

weak supervision - iteratively - 처음부터 고품질 데이터 구축은 어렵다.

 

 

LLM 어플리케이션 구현

고성능의 어플리케이션

JSON mode, function calling

JSON mode : prompting 에 JSON 명시 또는 JSON mode 사용

response-format = {"type" : "json-object"}

+ description에도 JSON으로 추력하라 명시

 

OpenAI API function calling

tools 에 사용할 함수들의 명세를 작성

JSON 출력 → parsing에 용이

function calling 더 다양하게 활용 가능

 

 

 

 

 

ref :

https://web.stanford.edu/class/cs224u/slides/cs224u-neuralir-2023-handout.pdf

 

 

 

 

ref : 

https://matsui528.github.io/cvpr2020_tutorial_retrieval/

https://www.pinecone.io/learn/series/faiss/vector-indexes/