| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
- seaborn
- ODQA
- Bart
- nlp
- Attention
- passage retrieval
- N21
- 현대자동차
- RNN
- 데이터 시각화
- matplotlib
- Bert
- pyTorch
- word2vec
- Ai
- 데이터 구축
- Data Viz
- 딥러닝
- AI Math
- Transformer
- mrc
- Self-attention
- 2023 현대차·기아 CTO AI 경진대회
- GPT
- Optimization
- 기아
- AI 경진대회
- N2N
- KLUE
- dataset
- Today
- Total
쉬엄쉬엄블로그
(MRC) Passage Retrieval-Scaling Up 본문
이 색깔은 주석이라 무시하셔도 됩니다.
Passage Retrieval - Scailing Up
Passage Retrieval and Similarity Search
복습 Retrieval with dense embedding

인퍼런스 : Passage와 query를 각각 임베딩한 후 query로부터 거리가 가까운 순서대로 passage에 순위를 매김


MIPS(Maximum Inner Product Search)
주어진 질문(query) 벡터 q에 대해 Passage 벡터 v들 중 가장 질문과 관련된 벡터를 찾아야함
여기서 관련성은 내적(inner product)이 가장 큰 것

4, 5강에서 사용한 검색 방법 : brute-force(exhaustive) search
- 저장해둔 모든 Sparse/Dense 임베딩에 대해 일일히 내적값을 계산하여 가장 값이 큰 passage를 추출
MIPS in Passage Retrieval

MIPS & Challenges
- 실제로 검색해야할 데이터는 훨씬 방대함
- 5백만 개(위키피디아)
- 수십억, 조 단위까지 커질 수 있음
- ⇒ 따라서 더이상 모든 문서 임베딩을 일일히 보면서 검색할 수 없음
- 실제로 검색해야할 데이터는 훨씬 방대함
Tradeoffs of similarity search
Search Speed
- 쿼리당 유사한 벡터를 k개 찾는데 얼마나 걸리는지?
- ⇒ 가지고 있는 벡터량이 클 수록 더 오래 걸림
Memory Usage
- 벡터를 사용할 때, 어디에서 가져올 것 인지?
- ⇒ RAM에 모두 올려둘 수 있으면 빠르지만, 많은 RAM 용량을 요구함
- ⇒ 디스크에서 계속 불러와야한다면 속도가 느려짐
Accuracy
- brute-force 검색 결과와 얼마나 비슷한지?
- ⇒ 속도를 증가시키려면 정확도를 희생해야하는 경우가 많음

Tradeoff of search speed and accuracy
속도(search time)와 재현율(recall)의 관계
더 정확한 검색을 하려면 더 오랜 시간이 소모됨

Increasing search space by bigger corpus
- 코퍼스(corpus)의 크기가 커질 수록
- 탐색 공간이 커지고 검색이 어려워짐
- 저장해 둘 Memory space 또한 많이 요구됨
- Sparse Embedding의 경우 이러한 문제가 훨씬 심함
- 예) 1M docs, 500K distint terms = 2TB
- 각 문서를 768차원의 벡터로 표현한 경우
- 코퍼스(corpus)의 크기가 커질 수록

Approximating Similarity Search
Compression - Scalar Quantization (SQ)
Compression : vector를 압축하여, 하나의 vector가 적은 용량을 차지 ⇒ 압축량↑ ⇒ 메모리↓, 정보 손실↑
ex) Scalar quantization : 4-byte floating point ⇒ 1-byte (8bit) usigned integer로 압축

Pruning - Inverted File (IVF)
- Pruning : Search space를 줄여 search 속도 개선 (dataset의 subset만 방문)
- ⇒ Clustering + Inverted file을 활용한 search
Clustering : 전체 vector space를 k개의 cluster로 나눔 (ex. k-means clustering)

Inverted file (IVF)
Vector의 index = inverted list structure
⇒ (각 cluster의 centroid id)와 (해당 cluster의 vector들)이 연결되어있는 형태

Searching with clustering and IVF
주어진 query vector에 대해 근접한 centroid 벡터를 찾음
찾은 cluster의 inverted list 내 vector들에 대해 서치 수행

Introduction to FAISS
What is FAISS
tutorial : https://github.com/facebookresearch/faiss/tree/main/tutorial/python

FAISS : Library for efficient similarity search
indexing쪽 도움을 주고 encoding쪽 도움을 주고 있는 부분은 아님

Passage Retrieval with FAISS
Train index and map vectors

- train과 add 단계가 있음
Search based on FAISS index
nprobe : 몇 개의 가장 가까운 cluster를 방문하여 search 할 것인지

Scaling up with FAISS
FAISS Basics
brute-force로 모든 벡터와 쿼리를 비교하는 가장 단순한 인덱스 만들기
준비하기

인덱스 만들기

검색하기

IVF with FAISS
IVF 인덱스 만들기
클러스터링을 통해서 가까운 클러스터 내 벡터들만 비교함
빠른 검색 가능
클러스터 내에서는 여전히 전체 벡터와 거리 비교(Flat)
IVF 인덱스

IVF-PQ with FAISS
벡터 압축 기법(PQ) 활용하기
전체 벡터를 저장하지 않고 압축된 벡터만을 저장
메모리 사용량을 줄일 수 있음
IVF-PQ 인덱스

Using GPU with FAISS
GPU의 빠른 연산 속도를 활용할 수 있음
- 거리 계산을 위한 행렬곱 등에서 유리
다만, GPU 메모리 제한이나 메모리 random access 시간이 느린 것 등이 단점
단일 GPU 인덱스

Using Multiple GPUs with FAISS
여러 GPU를 활용하여 연산 속도를 한층 더 높일 수 있음
다중 GPU 인덱스

출처: 부스트캠프 AI Tech 4기(NAVER Connect Foundation)
'부스트캠프 AI Tech 4기' 카테고리의 다른 글
| (MRC) Reducing Training Bias (0) | 2023.09.15 |
|---|---|
| (MRC) Linking MRC and Retrieval (0) | 2023.09.14 |
| (MRC) Passage Retrieval-Dense Embedding (0) | 2023.09.12 |
| (MRC) Passage Retrieval-Sparse Embedding (0) | 2023.09.11 |
| (MRC) Generation-based MRC (0) | 2023.09.08 |