1. Sparse vs Dense
지난시간 공부한 sparse embedding의 대표적인 예로 TF-IDF를 알아보았다. 말 그대로 spase하기 때문에 벡터 내에 0이 아닌 값이 적다. 메모리 낭비가 심한 편이다. 물론 0이 아닌 값의 idx와 value만 저장해서 0인 부분을 줄이는 방법으로 개선이 가능하다.
이 뿐만 아니라 sparse embedding에는 유사한 의미를 가진 단어의 유사성을 알지 못한다는 단점도 있다. 따라서 이를 개선한, 작은 차원의 고밀도 벡터로 변환하는 , dense embedding에 대해 알아보자.
sparse embedding은 정확히 용어가 일치해야 하는 문서를 찾는 경우에 더 장점이 있긴하다. 주로 BoW나 term frequency로 계산을 통해 구한다. dense embedding은 사전학습 모델들이 등장하면서 그 장점들이 더 돋보이기 시작했다.
질문과 문서를 각 사전학습 모델에 통과시켜 dense embedding을 얻는 모습이다.
2. Training Dense Encoder
사전 학습된 언어 모델에 sequence를 입력으로 넣고 나온 output중 cls 토큰에 해당하는 부분을 사용한다.
문서, 질문 각각의 vector를 얻은 후 유사도를 측정하는데 활용할 수 있다.
그럼 encoder를 학습시키는 구체적인 방법을 살펴보자.
기존 MRC 데이터셋에서 query, context를 encoder가 인코딩한 결과 v1, v2는 높은 유사도를 갖도록 학습한다.
그리고 corpus내에서 random하게 뽑은 context와 query를 인코딩한 결과 v1, v2는 서로 낮은 유사도를 갖도록 학습힌다. (negative sampling)
문제를 조금 더 어렵게하기 위해 TF-IDF 스코어는 높지만 정답을 포함하지 않는 context와 query를 인코딩한 결과 v1, v2가 서로 낮은 유사도를 갖도록 negative sampling을 할 수도 있다.
Top-k passage retrieval accuray를 통해 선별해서 가져온 k개의 문서 중에 정답문장을 포함하는 passage의 수가 몇개인가를 계산하여 evaluation으로 사용할 수 있다.
3. Objective Function
질문을 인코딩하는 모델과 문서를 인코딩하는 모델을 각각 학습시켜도 되고 동일한 모델을 사용해도 된다. 각각 학습시키는 예를 들어 살펴보자.
negative log likelihood loss를 사용한다. positive와의 sim과 negative들과의 sim 합으로 나눈 값이 분모로 들어간다. negative들과의 유사도는 낮고 positive와의 유사도는 키우도록 학습되어 NLL을 낮추게 된다.
파이토치로 이를 구현하는 방법은 다음과 같다.
q_tensors (batch_size, emb_dim)
p_tensors (batch_size, emb_dim)
sim_scores = matmul(q_tensors, p_tensors) // query에 대한 모든 문서들간의 유사도가 담겨있다.
sim_scores = F.log_softmax(sim_scores, dim=1) // log softmax를 취해서 확률값으로 바꿔준다.
// diagonal위치가 prediction label(target)의 위치이다.
// sim score와 target의 위치를 전달해서 loss를 구한다.
targets = torch.zeros(args.per_device_train_batch_size).long()
if torch.cuda.is_available():
batch = tuple(t.cuda() for t in batch)
targets = targets.cuda()
loss = F.nll_loss(sim_scores, targets)
4. Passage Retrieval
dense embedding을 활용해서 retrieval을 수행하는 방법을 살펴보았다. 여기서 더 개선할 수 있는 방법론들을 소개만한다.
- 학습 방법 개선 (ex. DPR)
- 인코더 모델 개선 (더 큰 pretrained model활용)
- 데이터를 더 모으거나 전처리를 수행
'boostcamp AI tech > boostcamp AI' 카테고리의 다른 글
Closed Book Question Answering (0) | 2024.02.22 |
---|---|
Passage Retrieval - Scaling up, FAISS (0) | 2024.02.19 |
Passage Retrieval - Sparse Embedding, TF-IDF (1) | 2024.02.14 |
Generation-based MRC (1) | 2024.02.07 |
Extraction-based MRC (0) | 2024.02.06 |