국문과 유목민

[일일리포트] Day 76 (Lelvel2_MRC_6) 본문

IT 견문록/2022_부스트캠프 AITech 3기(100일)

[일일리포트] Day 76 (Lelvel2_MRC_6)

논곰 2022. 5. 9. 23:48
해당 일일리포트에서는 네이버 커넥트에서 진행하는 '부스트캠프 AI Tech 3기'에서 배운 내용을 다루고 있습니다. 저작권 이슈 때문에 관련 자료를 올릴 수는 없기에 핵심 이론과 코드를 요약해서 올리고 있기에 내용이 부족할 수 있습니다.

▶ Today I Learned (핵심 요약 정리)

논문 리딩(DPR, ANNA)

프로젝트에서 Reader모델의 성능을 올리기 위한 마지막 조사로 SQuAD 데이터에 대해 SOTA를 달성한 ANNA모델에 대한 논문을 봤다. 또한 Retrieval에서 마지막으로 구현해 보기 위해 DPR관련 논문을 읽었다.

ANNA: Enhanced Language Representation for Question Answering

ANNA는 Approach of Noun-phrase based language representation with Neighboraware Attention(Neighboraware Attention을 통한 명사구 기반 언어 표현 접근방식)이라는 뜻을 가지는 것으로, 현재 SQuAD1.1 기준 SOTA를 달성한 모델이다.

해당 모델은 데이터 처리(data-processing), 사전 교육 과제(pre-training task), Attention 메커니즘에 대한 포괄적인 실험 평가를 기반으로 구문 및 상황별 정보를 제공한다. ANNA가 가지는 특징은 크게 두 가지로 구분할 수 있다.
그 중 첫 번째는 기존 사전교육 작업을 진행할 때, 전체 범위에서 명사구를 예측하도록 훈련한다. 이를 통해 전체 범위 수준에서 문맥화된 표현을 학습할 수 있게 했다. 두 번째로, Transformer 아키텍처에서 새로운 novel neighbor-aware mechanism을 추가해서 Attention 접근방법을 향상시켰다. Attention매트릭스에서 대각성(diagonality)을 마스킹하여 인접 토큰 간의 관계를 더 많이 고려하는 것이 문맥화된 표현에 도움이 된다는 것을 발견해 이를 적용시켰다고 한다. 또한, 추가적으로 pre-training 모델을 larger volume corpora로 학습시킨다고 꼭 최고의 성능을 보이는 것은 아니라고 얘기했다.

ANNA의 경우 성능적인 면에서 우리 Task와 유사하다고 생각되는 SQuAD 데이터셋에 대해서 좋은 성능을 보인 모델이었다. 또한, 새로 적용한 방법이 크게 어렵지 않게 이해가 가능하다고 생각되며, 관심이 가는 부분도 있었다. 하지만 현재 구현되어 있는 코드가 없기에 첨부된 다른 논문들을 찾아가며 바닥부터 구현을 해야할 것 같았다. 또한, 해당 모델의 경우 (영어) SQuAD데이터셋을 위한 Task였다보니 Pre-train을 또 시키기 위해 새로 데이터를 수집해야하는 문제도 있어보였다. 하지만 남은 시간이 3일이 채 안되기에 현실적으로 힘들 것이라고 생각해 정보를 알아본 정도에서 마무리 하는게 좋을 것 같아서 조사로 마무리할 수 밖에 없을 것 같다.

Dense Passage Retrieval for Open-Domain Question Answering

해당 논문의 경우 다음 블로그([논문리뷰] Dense Passage Retrieval for Open-Domain Question Answering)를 참고해서 이해를 하고자 했다.

기존의 주된 연구들은 질의와 관련된 문서를 추리기 위해서 TF-IDF uni-gram/bi-gram matching이나 BM25같은 고차원의 sparse representation을 사용했었다. 이런 방법들은 inverted index를 이용해서 빠른 검색이 가능하고, 질의에 포함되어 있는 키워드를 기반으로 탐색을 할 수 있는 장점이 있다.
이와 다르게 context의 semantic한 정보를 encoding하여 dense latent vector로 표현하는 방법은 기존의 spare retrieval을 보완하는 역할을 한다. 질의와 관련있는 문서가 아예 형태적(lexical)으로 다르게 생겼어도 의미적으로 유사성을 갖는다면 dense retrieval은 이를 매칭시킬 수 있는 능력을 갖고 있기 때문이다.
해당 모델의 접근 방법은 사전학습된 BERT로 이루어진 두개의 Encoder를 사용하여서 질의와 문단을 encoding하고, 질의-문단 간의 상관관계점수는 dot-product 로 계산한다. 실제 inference시에는 주어진 질의와 후보 문서들간의 score를 계산해서 top-k개의 passage 를 retrieve 하는 방식을 사용한다.
하지만 문서의 크기가 엄청나게 크다면 추론 시간이 굉장히 오래 걸리기 때문에 ANN 라이브러리인 FAISS를 사용해서 빠르게 추론을 수행한다고 한다 (우리가 수행하려던 FAISS도 DPR에서는 이미 사용을 하게 되는 것 같다)

objective 역시 우리가 지금까지 자주 접했던 방법으로 학습이 되는데, 주어진 후보들의 모든 스코어 중에서 실제로 관련이 있는 문서(golden or positive sample)가 제일 높은 값을 갖도록 negative log-likelihood 로 학습을 수행하게 된다. 구체적으로는 아래와 같은 수식으로 표현할 수 있고 p+가 정답을, p−는 negative sample을 의미합니다.

여기서 저자는 negative sample을 만드는 총 3가지 방법을 실험해 본 것으로 나온다.

  • (1) Random: 코퍼스 내의 random한 passage를 뽑는 방법
  • (2) BM25: 실제 정답을 포함하고 있지는 않지만 코퍼스 내에서 BM25 기준으로 top-k의 문서를 사용하는 방법
  • (3) Gold: train_set 내 다른 질의의 positive passage를 가져오는 방법
    또한 학습시에 variation으로 in-batch negative 역시 variation으로 추가되었습니다.

결과적으로 보았을 때 in-batch negative sampling을 통해 연산에 필요한 메모리 양을 줄이고, 이를 통해 batch-size 를 키운 경우에 성능이 향상되었음을 보고하였다. 특히 BM25를 통해서 뽑은 negative sample을 1,2개 정도 추가하는 경우에 가장 높은 성능을 보였다. 이를 통해 얻을 수 있는 결론은 random만으로 학습 시키는 것도 중요하지만, 좀 어려운 sample도 답변 후보로 넣어주는 것이 긍정적인 효과를 이끌어 낸다는 것이다.

저자들의 예상대로, 기존의 제안하는 모델이 BM25기반 방법보다 retrieval에서 우수한 성능을 보임을 확인할 수 있었다. 특히 BM25+DPR을 사용하는 경우가 가장 성능이 좋았는데, 이떄 두 방법을 동시에 사용하는 방법으로는 BM25로 top-2000개의 후보를 추리고 이를 BM25(q,p) + λ⋅sim(q,p) 식을 이용해서 reranking 을 수행하여 최종 결과를 도출한다. 이때 λ는 1.1을 사용하였다고 한다.

DPR논문을 간단히 봤을 때, DPR 내에 우리가 하고자 하는 Dense Embedding, ReRanking, FAISS모두 사용이 되고 있는 것 같다. 또한, 해당 모델에 대해 관련된 official code도 존재하기 때문에 시도해봄직하다. 특히, 현재 BM-25를 Retrieval로 활용하고 있는데, 여기서 DPR을 적용시킨다면 더 큰 성능향상을 이끌어낼 수 있지 않을까 기대가 된다.

▶ Review (생각)

주말 동안 휴식(정처기 시험을 보긴했지만)을 끝내고 프로젝트 마지막 주차를 시작하게 됐다. 얼마 남지 않은 시간이기 떄문에 마지막까지 열심히 해보고자 팀원들과 같이 역할을 분담했다. 이번 주에는 reader모델보다는 retrieval 부분에서 성능향상을 이끌어보고자 했다. Sparse Retrieval로 BM-25가 구현이 되었으며, ElasticSearch도 구현을 하셨다. 이제는 DPR부분만 구현해보면 간단히 생각해볼 수 있을만한 Retrieval방법은 다 적용시켜 봤다고 할 수 있을 것 같다.
오늘 논문만 읽어보고 코드적인 부분은 집중적으로 보지는 못했지만, 이번 강의 때 다뤄주신 부분이 있었기 때문에 내일은 거기부터 시작해서 구현을 해보고자 한다. 그리고 한편으로는 Reader모델에서도 더 다양한 실험과 성능을 올릴 수 있을만한 부분이 있을 것 같다는 미련이 있기는 하다. 마지막 주니까 시간을 좀 더 투자해서 다양한 방법을 시도해보는 것도 좋을 것 같다.
마지막으로 오늘 최종 프로젝트와 관련해서 멘토링도 있었고, 오피스 아워도 있었는데 우리가 정한 주제에 어느정도 한계가 있는 것 같다는 생각이 들었다. 우선, 이번 프로젝트 주제에 대해서 팀원들 간 서로 이해하고 있는 부분이 조금씩 다른 것 같다는 생각이 들었으며, 단기간에 하기 힘든 주제를 선정한 것 같다는 생각이 들기도 했다. 사실 한 달이라는 기간을 생각했었는데, 주제 선정, 데이터 수집, 모델 제작, 프로젝트 서빙까지 대략 2~3주 정도밖에 없었다. 마지막 한 주는 디버깅 및 보완이기에 실제 3주까지는 완성을 해야했기 때문이다. 따라서 이 부분에 대해서도 팀원들과 얘기를 나눠봐야할 것 같다.
이번 프로젝트는 NLP팀들 간 경쟁이 크지 않은 것 같다는 생각이 들었는데, 확실히 최종 프로젝트까지 같이 고려하다보니 신경이 분산되는 것은 어쩔 수 없는 것 같다. 그리고 확실히 전체적으로 해이해진 것도 있는 것 같다. 이럴 때일수록 더 집중할 필요가 있으니 더 정신을 바짝 잡고 해야할 일들을 잊지 말고, 미루지 말고 해야겠다.