[일일리포트] Day 89 (FinalProject_8)

해당 일일리포트에서는 네이버 커넥트에서 진행하는 '부스트캠프 AI Tech 3기'에서 배운 내용을 다루고 있습니다. 저작권 이슈 때문에 관련 자료를 올릴 수는 없기에 핵심 이론과 코드를 요약해서 올리고 있기에 내용이 부족할 수 있습니다.
▶ Today I Learned (핵심 요약 정리)
FinalProject(모델실험)
어제까지 실험 세팅을 끝내서 오늘부터 reader모델과 retriever모델 테스트에 들어갔다. 우선 retriever모델의 경우 top-k를 얼마까지 뽑아야 할 지에 대해서 실험을 진행했고, 이전 대회 때와는 다르게 top-k를 작게 줬을 때 성능이 더 올라가는 것을 확인했다. 결과를 분석해보니 의회 회의록 특성상 context의 형식이 비슷하게 나타나는 경우가 많았다. 따라서 top-k를 크게 줘서 비슷한 형식의 context를 더 가져옴으로써 reader모델이 더 예측하기 힘들어지는 것 같았다. 그래서 top-k를 5이하로 낮추기로 했다.
추가적으로 reader모델 실험을 진행했는데, model의 경우 bert계열 모델을 사용하고자 했다. 추가학습을 고려하면, 가벼운 모델이 좋겠지만 이전 MRC대회 때 성능이 좋았던 roberta-large모델을 사용해 score 기준을 잡고자 했다. 우선 기본적인 모델인 KLUE/roberta-large모델을 사용해 Fine-tuning을 했는데 성능이 꽤 괜찮게 나왔다. 그리고 팀원들과 얘기하면서 이전 대회 때 시도해보고자 했던 kobigbird모델도 사용해보면 좋을 것 같다는 얘기가 나왔다. 이번 회의록 Data의 경우 Context의 길이가 길어서, 긴 Sequence를 처리하는데 강점을 가지는 kobigbird모델이 좋은 결과를 보일 것 같다고 생각했다. 그래서 우선 두 모델에 대해 실험을 진행하고자 했다.
그리고 실험을 진행하면서 하이퍼파라미터 세팅도 한 번에 같이하면 좋을 것 같아 wandb sweep을 사용할 수 있게 했다. 이전까지는 sweep용 train 파일을 따로 만들었었는데 팀원들에게 물어본 결과 접근성이 좋지 않았고, 불필요한 파일이 하나 더 생기는 것 같아서 train 파일 안에서 동시에 사용할 수 있게 했다. 해당 코드를 구현하면서 라이브러리가 어떤 식으로 동작하는 지에 대해서 조금 더 이해할 수 있게 됐다.
▶ Review (생각)
오늘은 어제보다 많은 것을 한 것 같다. 물론 중간중간 오류가 생겨서 해결하는데 시간을 좀 잡아먹히긴 했어도 꽤 열심히 한 것 같다. 그리고 오늘 모델을 찾아보면서 '모델을 사용함에 있어서 왜 이 모델이 더 좋은지, 왜 더 점수가 좋게 나온 것 같은 지에 대해서 더 생각해보면 좋겠다'던 팀원의 피드백이 생각났다. 확실히 이전까지는 점수에 올리기 급급하느라 그런 부분에 신경을 쓰지 못했던 것 같다. 그래서 이전까지는 '그래 그렇겠지'하고 넘겼던 부분에 대해서 다시 생각해 보기위해 노력했다. 그리고 우리가 사용하는 모델이 왜 더 성능이 좋은 지에 대해서 찾아보고 어느정도 정리할 수 있었다.
roberta모델이 bert보다 좋은 이유, kobigbird모델이 왜 긴 Sequence를 처리하는데 강점이 있을 수 있는 지 등에 대해 이해하면서 조금은 더 근거가 있는 모델 선정을 할 수 있게 된 것 같다. 추가적으로 어려운 말이 아니라 간단하게 한 줄 정도로 명확하고 깔끔하게 정리한 블로그들이 없는 것 같아서 내가 해보는 것도 괜찮을 것 같다는 생각이 들었다. 나중에 bert, roberta, XLNet, EleactraNet, bigbird 등 대회 때 사용했던 모델들에 대해서 깊게 공부하고, 각 모델들의 차이점 등에 대해 간단하게 정리해 보면 좋을 것 같아 프로젝트 끝내고 한 번 해볼 계획이다.
내일은 튜닝한 reader모델들 실험 결과를 보고 1차 reader모델을 선정하고, retriever 상황을 보고나서 Serving 쪽을 먼저 들어가보고자 한다. 그리고 새로 와이어 프레임이나 워크플로우 등을 수정하는 것도 좋을 것 같다는 생각이 들어 어느정도 자료를 준비해서 말씀드리고자 한다.