(10강) QA with Phrase Retrieval
Last updated
Was this helpful?
Last updated
Was this helpful?
phrase retrieval을 활용한 real-time ODQA
retriever - reader구조와 비교
[Reference & Further Reading]
추가적인 아이디어를 소개. 대회에는 1~8강을 중점적으로 해보면 좋을 것 같음.
Error Propagation: 5-10개의 문서만 reader에게 전달됨
retriever에 의존도가 높아짐
Query-dependent encoding: query에 따라 정답이 되는 answer span에 대한 encoding이 달라짐
Query와 cotext를 concate해서 encoding을 하다보니 query가 달라지면 모두 다시 encoding을 해야한다.
문서 검색을 하듯이 phrase (절)을 바로 검색할 순 없을까 라는 아이디어에서 나왔다.
문장에서 각 Phrase마다 나누어 key vectors를 생성해둔다면 Query Vector만 encoding하여서 Nearest Neighbor Search를 통해 정답을 바로 구할 수 있다는 것이다. 즉, Query벡터가 변해도 큰 작업이 필요가 없다는 것.
위 식의 경우 q가 변함에 따로 F 모델을 다시 정의해야한다.
아래처럼 F를 G와 H로 분리하는 방법론이다.
q가 변함에 따라 H를 다시 정의할 필요가 없어 속도가 매우 빠르다.
하지만 F가 G와 H로 나눌수 있다는 보장이 없다.
어떻게 각 phrase를 vector space상에 잘 mapping 할 수 있을지??
Dense와 Sparse 임베딩을 둘다 사용해보자!
Dense vectors: 통사적, 의미적 정보를 담는데 효과적
Sparse vectors: 어휘적 정보를 담는데 효과적
key vector를 생성함에 있어 dense와 sparse를 결합하여 사용한다.
Dense vector를 만드는 방법
Pre-trained LM (BERT)를 이용
Start vector와 end vector를 재사용해서 메모리 사용량을 줄임
Coherency vector
phrase가 한 단위의 문장 구성 요소에 해당하는지를 나타냄
구를 형성하지 않는 phrase를 걸러내기 위해 사용함
start vector와 end vector를 이용하여 계
선택된 Phrase가 좋은 Phrase 여부를 판단하는 값.
Question embedding
Question을 임베딩할 때는 [CLS] 토큰 (BERT)를 활
Sparse Vector를 만드는 방법
문백화된 임베딩(contextualized embedding)을 활용하여 가장 관련성이 높은 n-gram으로 sparse vector 구
target phrase의 주변 단어들과의 유사성을 구해서 그 유사성을 각 단어 해당하는 sparse vector 상에 dimention에 넣어준다. 일종의 TF-IDF와 비슷하지만 각 phrase마다 weight가 변하는 벡터의 형태로 만들 줄 수 있다.
Wikipedia만해도 60 billion개의 phrase가 존재하여서 저장소의 크기가 고려되어야한다...
SQuAD-open
s/Q: second per query on CPU
#D/Q: number of documents visited per query
Retriever-reader 보다 3.6% 성능향상과 68배의 속도향상을 확
다른 task에서는 낮은 성능을 보여주기도 한다.
고성능 장비가 필요하다.
Decomposability Gab F -> G+H라는게 사실 성립하지 않기 때문에 발생