Loading views...

ReSRer 연구노트 2023/10/12

Date
Date
2023 Oct 12 0:0 → 2023 Oct 13 0:0
Created by
Created by
Seonglae ChoSeonglae Cho
Created time
Created time
2023 Oct 13 4:27
Last edited by
Last edited by
Seonglae ChoSeonglae Cho
Last edited time
Last edited time
2024 Jan 14 5:9
Refs
Refs

계획

회의에서 계획한 대로 Huggingface에 올라온 facebook dpr 모델들을 활용해서 파이프라인을 간략하게 구축한 뒤 summarizer를 중간에 용이하게 사용하는 방식으로 진행한다
context encoder도 제공하지만
DPR
facebookresearchUpdated 2023 Dec 11 16:37
에서 제공하는 index를 사용할거라 qa pipeline에는 필요없다.
 

선행연구 확인

Index data

이렇게 embedding index와 context data를 따로 제공하는데, 용량이 메우 커서 develop환경에서는 nq.subset을 이용한다
 
 

개발진행

cli를 위해 google fire, 호환성있는 팀 프로젝트 관리를 위해 rye를 사용했다
dpr과 resrer폴더구조를 잡고 context 데이터에서 relative passage를 불러오기 위해 dpr retriever에서 faiss index와 retriever를 refactoring해서 resrer/retriever.py에 추가했다.
 
github.com
 
 

벡터 context 이용 문제

DPR retriever와 제공된 index에서 question을 huggingface dpr encoder로 encoding한 다음 similar vectors를 가져오는 데에는 성공했는데 paragraph들의 실제 string값이 매핑되어있지 않아서

Context data

에서 찾아 가져와서 reader에 넣어주어야 한다. 제공하는 context data 가 csv형태로 이루어져있는데 여기서 실시간으로 찾는 데에 (1000만 row로 아주 길다) 오래걸려서 vector database에 embedding과 paragraph를 tuple로 매핑하여 넣어주기로 했다.
 

Vector database

개발편의와 공유를 위해 chromadb를 사용했고 벡터 데이터 생성중이다
  1. dpr에서 제공하는 faiss에 index 순서가 순서대로 되어있다 가정했는데 아닌문제
초반에 그렇게 나와있어서 가정했는데 중간 뛰엄뛰엄 점프있고 인덱스 순서대로 있어서 sort하고 mapping새로 한 뒤에 찾은 문제
  1. float32데이터를 float변경해줘야 했던 문제
  1. faiss가 reconstruct로 id로 벡터를 불러올 수 있는데 id가 없으면 segfault나는 문제 있다
notion image
저장되있는 대로 해서 문제없는데 가끔 발생한다. 왠진 모르겠어서 시작점 끝난지점으로 해서 전부 넣는중
상당히 오래 걸린다 subset만 변환하는 데에도.. 이정도면 나중에 sota text embedding사용하기가 좀 힘들수도? 데이터 양이 너무 많아서
 
현재 hf에 chromadb file을 공유하여 git lfs pull로 사용예정인데, 추후에 subset이 아니라 full로 돌아가는 chromadb를 두면 좋을듯 해서 교수님한테 요청해봐야할듯
 
 
 
 

QA pipeline

vector shape compatibility 문제

  1. dpr faiss retriever 바로 사용할 때
만 하고
해당라인 삭제,왜있는지는 모르겠다
  1. faiss 말고 chromadb로 이동하면서 아래와 같이 변경
 
 
 

Reader title 문제

notion image
notion image
Reader에서 title을 요구하는데 사용중인 psgs_w100 dataste
notion image
passage만 있는줄 알았는데 title data도 있다 그래서 다시 indexing…
notion image
 
 

Reader input 문제

question, text, title을 넣는데 1:n:n으로 넣어야하는 게 작동이 아래 오류로 안된다 확인해보니
n:n:n이나 1:1:1로만 작동해야할거같은데 1:1:1작동만 되서 이거 반복해야한다
DPR 작동방식이 passage하나하나당 답을 찾고 넣어준다. 여러개를 같이 안넣는듯? 토큰제한때문인가 잘 모르겠지만 코드상으로 그냥 첫번째 span 답인데 top_k 늘수록 효과 좋다는 통계가 왜인지 좀더 research필요할듯
notion image
최종적으로 발견한 문제는 reader가 tensor로 answer에 대한 정보를 아주 간접적으로 준다는 것이다
 
 
 
 

문제

get_best_spans

reader가 답을 logits형태로 줘서 최종 답 영역인 span을 찾기 매우 까다롭다
DPR구조 자체가 passage, question pair로 reader에 넣고 가장 최선의 답을 찾는 형태라 summary 를 적용한 비교가 어려울 것 같다
passage를 join해서 넣을 수는 있겠지만 그러면 기존 dpr성능과 비교가 어렵거나 길이제한이 짧아서 이렇게 구현된 걸수도
 
 

retriever 매핑 이상해서 id, passsage 잘못 들어갔는지 확인해야

가져오는 document가 이상해서 확인해보니 faiss index vector와 chroma에 들어간 데이터벡터가 다른다 왜지…
 
 
 
 
 
 

Recommendations