1. 강의 내용
Scaling up with FAISS (서민준 교수님)
1) Passage Retrieval and Similarity Search
MIPS(Maximum Inner Product Search)
주어진 질문(query) 벡터 q에 대해 Passage 벡터 v들 중 가장 질문과 관련된 벡터를 찾아야함
-> 여기서 관련성은 내적(inner product)이 가장 큰 것
4, 5 강에서는 brute-force(exhaustive) search 방식의 검색을 사용했는데, 이때 저장해둔 모든 Sparse/Dense 임베딩에 대해 일일히 내적값을 계산하여 가장 값이 큰 passage를 추출했습니다. 하지만 이 방식은 passage의 개수가 많아질수록 비효율적이게 됩니다.
실제로 검색해야할 데이터는 훨씬 방대해 모든 문서 임베딩을 일일히 보면서 검색할 수는 없습니다.
Tradeoffs of similarity search
1) Search Speed
쿼리 당 유사한 벡터를 k개 찾는데 얼마나 걸리는지? -> 벡터량이 클수록 더 오래 걸림
2) Memory Usage
벡터를 사용할 때, 어디에서 가져올 것 인지? -> RAM에 올려둘 경우 빠르지만 많은 RAM용량이 필요하고 디스크에서 불러오면 속도가 느림
3) Accuracy
brute-force 검색 결과와 얼마나 비슷한지? -> 속도를 증가시키려면 정확도를 희생해야할 수 있음
Increasing search space by bigger corpus
코퍼스(corpus)의 크기가 커질수록 탐색 공간이 커지고 검색이 어려워지며 Memory space 또한 많이 요구됩니다. 또한 Sparse Embedding의 경우 이러한 문제가 훨씬 심합니다.
2) Approximating Similarity Search
Compression - Scalar Quantization (SQ)
Compression: vector를 압축하여, 하나의 vector가 적은 용량 차지 -> 압축량이 커질수록 메모리는 적게 들지만 정보는 더 많이 손실 됩니다.
e.g.) Scalar quantization: 4-byte floating point -> 1-byte (8bit) unsigned integer
Pruning - Inverted File (IVF)
- Pruning: 점들을 정해진 cluster로 소속시켜 군집을 일으키는 형태. Search space를 줄여 search 속도 개선
점이 속한 클러스터와 가까운 top-k 개의 클러스터 내의 점들에 대해 exhaustive search를 적용합니다. 이를 통해 훑어보는 수를 줄일 수 있습니다.
1) Clustering: 전체 vector space를 k 개의 cluster로 나눔 (ex, k-means)
2) Inverted File (IVF): 각 클러스터에 속해 있는 점들을 역으로 인덱스로 가지고 있기 떄문에 이렇게 부름. Vector의 index = inverted list structure -> 각 cluster의 centroid id와 해당 cluster의 vector들이 연결되어있는 형태
3) Searching with clustering and IVF
* 주어진 query vector에 대해 근접한 centroid 벡터를 찾음
* 찾은 cluster의 inverted list 내 vector들에 대해 서치 수행
3) Introduction to FAISS
dense vector의 클러스터링과 유사도 측정을 효율적으로 할 수 있도록 해주는 라이브러리
Passage Retrieval with FAISS
1) Train index and map vectors: 클러스터링을 진행하기 위해 학습이 필요. Scalar quantization 과정에서 scale하는 기준을 파악하기 위해 학습.
2) Search based on FAISS index
-> nprobe: 몇 개의 가장 가까운 cluster를 방문하여 search 할 것인지.
-> nprobe개의 cluster를 방문해 SQ8 베이스로 search 후 top-k개를 result로 내보내 줌
4) Scaling up with FAISS
FAISS Basics
- brute-force로 모든 벡터와 쿼리를 비교하는 가장 단순한 인덱스 만들기
IVF with FAISS
- IVF 인덱스 만들기
- 클러스터링을 통해 가까운 클러스터 내 벡터들만 비교
- 빠른 검색 가능
- 클러스터 내에서는 여전히 전체 벡터와 거리 비교
IVF-PQ with FAISS
- 벡터 압축 기법 (PQ) 활용하기
- 전체 벡터를 저장하지 않고 압축된 벡터만을 저장
- 메모리 사용량을 줄일 수 있음
Using GPU with FAISS
Using Multi GPUs with FAISS
Linking MRC and Retrieval (서민준 교수님)
1) Introduction to Open-domain Question Answering (ODQA)
Linking MRC and Retrieval: Open-domain Question Answering (ODQA)
- MRC: 지문이 주어진 상황에서 질의응답
- ODQA: 지문이 따로 주어지지 않음. 방대한 World Knowledge에 기반해서 질의응답
- Ex) Modern search engines: 연관문서 뿐만 아니라 질문의 답을 같이 제공
History of ODQA
- Text retrieval conference (TREC) – QA Tracks (1999-2007): 연관문서만 반환하는 information retrieval (IR)에서 더 나아가서, short answer with support 형태가 목표
1) Question processing
* Query formulation: 질문으로부터 키워드를 선택 / Answer type selection (ex. LOCATION: country)
2) Passage retrieval: 기존의 IR 방법을 활용해서 연관된 document를 뽑고, passage 단위로 자른 후 선별 (Named entity / Passage 내 question 단어의 개수 등과 같은 hand-crafted features 활용)
3) Answer processing: Hand-crafted features와 heuristic을 활용한 classifier를 만들어 주어진 question과 선별된 passage들 내에서 답을 선택
Recent ODQA Research
2) Retriever-Reader Approach
Retriever-Reader 접근 방식
- Retriever: 데이터베이스에서 관련있는 문서를 검색(search) 함
- Reader: 검색된 문서에서 질문에 해당하는 답을 찾아냄
Retriever | Reader | |
---|---|---|
입력 | 문서셋(Document corpus), 질문(query) | Retrieved된 문서(document), 질문(query) |
출력 | 관련성높은문서(document) | 답변(answer) |
학습 단계
- Retriever:
- TF-IDF, BM25 -> 학습 없음
- Dense -> 학습 있음
- Reader
- SQuAD와 같은 MRC 데이터셋으로 학습
- 학습 데이터를 추가하기 위해서 Distant supervision 활용
Distant supervision
질문-답변만 있는 데이터셋 (CuratedTREC, WebQuestions, WikiMovies)에서 MRC 학습 데이터 만들기. Supporting document가 필요함
- 위키피디아에서 Retriever를 이용해 관련성 높은 문서를 검색
- 너무 짧거나 긴 문서, 질문의 고유명사를 포함하지 않는 등 부적합한 문서 제거
- answer가 exact match로 들어있지 않은 문서 제거
- 남은 문서 중에 질문과 (사용 단어 기준) 연관성이 가장 높은 단락을 supporting evidence로 사용함
Inference
- Retriever가 질문과 가장 관련성 높은 5개 문서 출력
- Reader는 5개 문서를 읽고 답변 예측
- Reader가 예측한 답변 중 가장 score가 높은 것을 최종 답으로 사용함
3) Issues and Recent Approaches
Different granularities of text at indexing time
위키피디아에서 각 Passage의 단위를 문서, 단락, 또는 문장으로 정의할지 정해야 함.
- Article: 5.08 million
- Paragraph: 29.5 million
- Sentence: 75.9 million
Retriever 단계에서 몇개 (top-k)의 문서를 넘길지 정해야 하는데, 이렇게 되면 Granularity에 따라 k 가 다를 수 밖에 없습니다.
(e.g. article -> k=5, paragraph -> k=29, sentence -> k=78)
Single-passage training vs Multi-passage training
- Single-passage: 현재 우리는 k 개의 passages 들을 reader이 각각 확인하고 특정 answer span에 대한 예측 점수를 나타냄. 그리고 이 중 가장 높은 점수를 가진 answer span 을 고르도록 함
- -> 이 경우 각 retrieved passages 들에 대한 직접적인 비교라고 볼 수 없음
- Multi-passage: retrieved passages 전체를 하나의 passage 로 취급하고, reader 모델이 그 안에서 answer span 하나를 찾도록 함
- -> 문서가 너무 길어지므로 GPU에 더 많은 메모리를 할당해야함 & 처리해야하는 연산량이 많아짐
Importance of each passage
Retriever 모델에서 추출된 top-k passage들의 retrieval score를 reader 모델에 전달
2. 과제 수행 과정 / 결과물 정리
3. 피어세션 정리
- 스몰톡, 진행상황 공유
- 강의 내용 질의응답
- 베이스라인 코드 분석 진도 공유
- 아이디어, EDA, 프로젝트 관리 관련 논의
- 팀 구성 완료
- 아이디어보드 정리 및 역할 분담
- 논문 리뷰
- 코드 구조 및 일정 논의
4. 학습 회고
이번 한 주는 베이스라인 코드를 익히고, 전체적인 리서치 및 흐름을 정리하는 주 였습니다.
기초를 탄탄하게 하고 지난 대회와 달리 리더보드에 매몰되지 않기 위해 이런 계획을 세웠지만, 그만큼 나태해진 느낌이 들어 피어세션 시간에 아이디어 정리 및 일정을 확정 지었고, 앞으로 2주 조금 넘게 남은 시간동안 달려볼 예정입니다.
'네이버 부스트캠프 > LEVEL-2' 카테고리의 다른 글
[부스트캠프][P-stage][WK11 / Day48] MRC 2 (0) | 2021.10.16 |
---|---|
[부스트캠프][P-stage][WK11 / Day47] MRC 1 (0) | 2021.10.16 |
[부스트캠프][P-stage][WK10] P-stage level2 KLUE RE 결산 및 개인회고 (0) | 2021.10.10 |
[부스트캠프][P-stage][WK09 / Day41] KLUE RE 5 (0) | 2021.10.02 |
[부스트캠프][P-stage][WK09 / Day40] KLUE RE 4 (0) | 2021.10.02 |