국문과 유목민

[일일리포트] Day 72 (Bias / Level2_MRC_3) 본문

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

[일일리포트] Day 72 (Bias / Level2_MRC_3)

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

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

Reducing Training Bias

모델을 Training하는 과정에서는 다양한 Bias가 존재할 수 있다. 넓게는 학습할 때 과적합을 막거나 사전 지식을 주입하기 위해 특정 형태의 함수를 선호하는 것이나 어떤 식으로 만들어서 어떤 식으로 동작되면 좋겠다 하는 것도 Bias(Inductive Bias)라고 할 수 있다. 그리고 현실 세계의 편향된 상황이 반영되는 경우로 Historical Bias나 성별과 직업 간 관계 등 표면적인 상관관계인 Co-occurence Bias처럼 우리가 원하지 않는 속성이 학습되는 경우도 있다. 대표적인 Bias의 예시로 Gender Bias도 있고, Sampling을 왜곡해 왜곡된 결과가 발생하는 Sampling Bias도 있다.
또한, 데이터가 Generation될 때 발생하는 Bias도 있다.

  • Specification Bias: 입력과 출력을 정의한 방식 때문에 생기는 편향
  • Sampling Bias: 데이터를 샘플링한 방식 때문에 생기는 편향
  • Annotator Bias: 어노테이터의 특성 때문에 생기는 편향

이처럼 Bias는 다양한 경우에 의해서 발생할 수 있고, 이번 ODQA Task에서도 충분히 Bias가 발생할 수 있다. 따라서 ODQA Task에서 이를 줄일 수 있는 방법에 대해 알아보고자 한다.

Bias in ODQA

Retriever-Reader Pipeline을 보면, Reader model에서 Training bias가 있을 수 있다. 만약 Reader 모델이 한정된 데이터셋에서만 학습이 된다면 Reader는 정답을 항상 문서 내에 포함된 데이터쌍에서만 찾게 된다. 예를들어 Reader모델이 소설, 수필, 비문학 텍스트를 주제로 Train 됐는데, Input으로 의학, 공학, 자연과학 같은 주제가 들어오면 Task에 맞는 텍스트를 제대로 불러오지 못할 가능성이 높을 것이다.

Training Bias를 경감시킬 수 있는 방법으로 Negative Examples를 Train시키는 방법과 no answer bias를 추가하는 방법이 있다.
우선 Train negative examples 방법(Retrieval 단계에서의 Bias 경감방법인듯)은 훈련할 때 잘못된 예시를 보여줘 retriever이 negative한 내용들은 먼 곳에 배치할 수 있게 하는 방법이다. 좋은 Negative Sample을 뽑기 위해서는 corpus 내에서 랜덤하게 뽑거나, 좀 더 헷갈리는 negative 샘플들을 뽑는 방법이 있다. 예를 들어 '높은 BM25나 TF-IDF 매칭 스코어를 가지지만, 답을 포함하지 않는 샘플'이나 같은 문서에서 나온 다른 Passage/Question 선택하는 방법이다. (해당 방법은 왜 그런지 이해가 안됨)
다음으로 no answer bias를 추가하는 방법이다. 입력 시퀀스의 길이가 N일 때, 시퀀스의 길이 외 1개의 토큰이 더 있다고 생각한다. 훈련 모델의 마지막 레이어 weight에 훈련 가능한 bias를 하나 더 추가함으로써, Softmax로 answer prediction을 최종적으로 수행할 때, start end 확률이 해당 bias 위치에 있는 경우가 가장 확률이 높으면 이는 '대답할 수 없다'라고 취급하게 된다. (설명이 좀 더 필요할 듯)

Annotation Bias from Datasets

ODQA학습 시 MRC 데이터셋을 활용한다. ODQA세팅에는 적합하지 않은 bias가 데이터 제작(annotation)단계에서 발생할 수 있다. 왜냐하면 질문을 하는 사람이 답을 알고 있는 상태로 질문을 하게 되는 편향이 발생할 수 있다. 이 때문에 원치 않는 Aritifect가 질문에 들어가게 된다. 이게 문제가 되는 이유는 질문을 하는 사람이 답을 알고 있기 때문에 질문과 Evicence 문단 사이의 많은 단어가 겹치는 bias가 발생하게 된다. 정리하자면 모델이 쉬운 문제를 학습하게 된다는 것이다. 특히, TriviaQA와 SQuAD는 이러한 편향이 심하다고 한다.

Effect on annotation bias

그러므로 ODQA 세팅에는 적합하지 않은 bias가 데이터 제작(annotation) 단계에서 발생할 수 있다. 그리고 데이터셋 별 성능 차이가 annotation bias로 인해 발생할 수 있다. SQuAD의 annotation bias가 존재하는데, 이 경우 단어의 overlap을 더 효과적으로 잡는 BM25에 유리하게 작용되어 SCore가 더 높게 나타난다. 하지만, DPR에 BM25를 추가하면 양쪽에 모두 유리할 수 있다.

Effect of annotation Bias (DPR: Dense Embedding / BM25: Sparse Embedding)

결국 Annotation 단계에서 발생할 수 있는 bias를 인지하고, 이를 고려하여 데이터를 모아야 한다. Natural Questions 방법이 있는데, 이는 Supporting evidenve가 주어지지 않은 실제 유저의 question들을 모아서 데이터셋을 구성하는 방법이다.
마지막으로 SQuAD의 Bias로 ODQA에 applicable하지 않은 질문들이 존재한다는 것이 있다. 예를 들어 '미국 대통령은 누구인가?' 라는 질문의 경우 기간(지금 대통령인지, 5년 전 대통령인지)에 따라 달라지게 된다. 이러한 질문들은 context가 가정되어야 할 수 있는 질문들이기 때문이다. 이 또한 Bias가 발생했다고 할 수 있다.

Level2_MRC_3 (하이퍼파라미터 선정)

저번 프로젝트를 진행할 때, 하이퍼파라미터 구현을 조금 더 일찍 할 필요을 느껴 구현을 저번 주에 끝냈다. 그리고 이번 Task에서 다룰 수 있는 하이퍼파라미터 값이 무엇이 있을 지에 대해 찾아봤다. 결론부터 말해보자면 새로 변경해볼만한 파라미터가 많이 있던 것 같지는 않다.
우선 주말동안 top_k_retriever에 대한 실험을 진행했고, 해당 파라미터를 변경하는게 의미가 있다는 것을 확인할 수 있었다. 해당 실험에 대한 정리는 Git Issue로 대체하겠다.
Code with papaer에서 ODQA나 MRC Task에 대한 모델들을 봐서, 주로 변경하는 파라미터들이 있나 확인을 했다. 하지만 ODQA Task에서는 파라미터 세팅 부분을 찾지 못했고, 다른 MRC Task에서도 이에 대해 자세히 다루고 있지는 않았었다. QA Task에서 좀 정보가 나왔던 사이트는 Huggingface QA Examples였다. 또한, Max_length변수도 의미가 있을까 해서 조사를 했다. SQuAD/BERT: Why max_length=384 by default and not 512? 그리고 이에 대해 질문이 올라온 것을 봤는데 여기에 대한 답변으로 '구글의 스크립트에서 가져온 것이고, 384로 한 이유는 SQUAD 데이터셋에서 대부분의 질문과 단락에 대해 truncation없이, 최대한 작고 빠르게, 가져올 수 있는 범위였을 것이라고 추측'한다고 써있었다.
해당 대답에 대해서 생각해봤을 때, 만약 'Truncation이 발생한다면 성능의 저하'가 있을 수도 있다는 의미로 보인다. 하지만 'doc_stride를 통해 잘리는 부분도 볼 수 있기 때문에 성능의 저하가 없고, 또 그렇기 때문에 Truncation이 큰 의미가 있나?' 하는 의문이 들었다. 이에 대해서 팀원들과 얘기해볼 필요가 있다.
일단 결론적으로 lr, epoch, batch, top_k_retrieval에 대해서는 튜닝을 해볼 필요가 있어보이지만, max_seq_length와 doc_stride에 대해서는 더 생각해볼 필요가 있어보인다.

▶ Review (생각)

MRC Task 2주차가 시작되며, 강의 3개가 올라왔고 프로젝트에서 인사이트를 얻을 수 있을 것 같아서 먼저 강의를 다 들었다. 오늘은 직접적으로 프로젝트에 적용시킬 수 있을만한 Trianing Bias를 줄이는 방법에 대해서만 정리해봤다. Training Bias라고 해서 MRC 쪽 모델의 Bias를 줄이는 방법에 대해 인사이트를 얻을 수 있을 것 같았는데, Retrieval Task에 관한 얘기가 좀 많이 나왔던 것 같다. 그리고 아직까지 왜 그러한 Task들을 수행해야 하는지에 대해서 완벽히 이해가 되지는 않은 것 같다. 일단 BM-25나 DPR의 경우 우리가 구현해 봐야 할 부분이라고 생각한다. 따라서 해당 기법들에 대해서는 Further Reading에 적어주신 부분들을 좀 봐야할 것 같다.