일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- triu
- RNN
- tril
- Chrome Remote Desktop
- error
- kernel density estimation
- 네이버 부스트캠프
- tensorflow
- forward
- ubuntu
- 크롬 원격 데스크톱
- Til
- kde
- band_part
- nn.Sequential
- Linux
- GRU
- ai tech
- pytorch
- LSTM
- Today
- Total
무슨 생각을 해 그냥 하는거지
[학습정리] 2021-10-14 본문
※ 정보전달이 목적인 포스트가 아니라 개인 학습 기록 및 정리가 목적인 포스트입니다 ※
해당 포스트는 네이버 커넥트 재단의 부스트캠프 마스터님이신 서민준 교수님의 강의를 바탕으로 작성되었습니다.
1. 강의 복습 내용
[Passage Retrieval - Scaling Up]
passage의 개수가 늘어날수록 passage embedding이 많아지는데, 어떻게 효율적으로 가장 가까운 문서를 찾을 수 있을까? ⇒ Similarity Search !
MIPS (Maximum Inner Product Search)
: 주어진 query 벡터(q)에 대해 passage 벡터(v)들 중 가장 질문과 관련된 벡터를 찾는 방법. 이때 얼마나 관련되어 있는가는 내적값의 크기로 볼 수 있음.
앞선 강의들에서는 brute-force (exhausive) search로, 모든 sparse/dense 임베딩에 대해 내적값을 계산하여 찾았음
하지만 real-time으로 사용하려면 좀 더 빠르게, 효율적으로 찾아야 할 필요가 있음.
세 가지의 Tradeoff가 존재: Accuracy, Memory, Speed
accuracy를 증가시키기 위해 exhausive search를 사용하면 많은 memory 용량과 느려지는 speed를 감당해야 하고,
memory를 줄이기 위해 compression을 사용하거나 속도를 향상시키기 위해 pruning을 사용하게 되면 당연히 accuracy가 exhausive search에 비해 줄어들게 될 것이다.
Memory를 줄이는 기법(Compression) - Scalar Quantization (SQ)
: 4-byte floating point를 1-byte (8bit) unsigned integer로 압축하여 메모리를 아끼는 기법
Speed를 향상시키는 기법(Pruning) - Inverted File (IVF)
: Cluster를 만들어 query와 근접한 cluster만 search. (파일 구조를 바꾸는 방법)
cluster에 속해 있는 points을 역으로 인덱스로 가지고 있기 때문에 inverted list structure
(각 cluster의 centroid id와 해당 cluster의 vector들이 연결되어있는 형태)
query 벡터와 근접한 centroid 벡터를 찾고, 찾은 cluster의 inverted list 내 vector들에 대해 서치를 수행
FAISS
similary search를 효율적으로 만들어주는 라이브러리
FAISS index를 결정하는 두 단계
- Train 단계: 적절한 clustering을 찾기 위해 + quantize할 때 얼마나 조절할건지 찾기 위해 train.
- Add 단계: Train 단계 후 정의가 되면 실제로 cluster를 생성하고 cluster 내에 벡터를 투입(SQ8 형태로).
FAISS index를 바탕으로 search
[Linking MRC and Retrieval]
MRC와 Retrieval을 연결해보자!
Retriever-Reader Approach
가장 흔히 쓰는 approach
Retreiver
- 입력: 문서셋(document corpus)과 질문(query)
- 출력: 관련성 높은 문서(document)
- TF-IDF, BM25 같은 방법은 학습이 없지만, Dense는 학습이 있음
Reader
- 입력: Retrieved된 문서(document)과 질문(query)
- 출력: 답변
- MRC 데이터셋(e.g. SQuAD)으로 학습.
- 학습 데이터를 추가하기 위해서 Distant supervision 활용
Distant supervision?
: 질문-답변만 있는 데이터셋에서 MRC 학습 데이터를 만드는 방법.
사담) 이번 대회에서는 외부 데이터셋을 사용할 수 없기 때문에 이 방법은 사용 못할 것. 하지만 다음에 기회가 된다면 사용해보면 좋을 것 같다.
Retriever-Reader Approach의 Inference 단계
- Retriever가 질문과 가장 관련성 높은 5개의 문서를 출력 (하나의 문서에서만 하는 줄 알았는데 아니었다)
- Reader는 5개 문서를 읽고 답변 예측
- Reader가 예측한 답변 중 가장 score가 높은 답을 최종 답으로 선정
2. 과제 수행 과정 / 결과물 정리
negative sampling에 대한 이해 - 정리 필요(in-batch일 때와 아닐 때 정리 필요)
targets을 왜 모두 0? → positive example은 전부 첫 번째에 위치하므로 (첫 번째가 ground truth)
targets = torch.zeros(batch_size).long()
...
sim_scores = F.log_softmax(sim_scores, dim=1)
loss = F.nll_loss(sim_scores, targets)
'Naver AI Tech 2기 > Today I Learned' 카테고리의 다른 글
[학습정리] 2021-10-22 (2) | 2021.10.24 |
---|---|
[학습정리] 2021-10-20 (0) | 2021.10.21 |
[학습정리] 2021-10-13 (0) | 2021.10.13 |
[학습정리] 2021-09-23/24 특강 (1) | 2021.10.07 |
[학습정리] 2021-09-13 ~ (0) | 2021.09.23 |