네이버 부스트캠프 7기 MRC 프로젝트 개인회고
1. 나는 내 학습목표 달성을 위해 무엇을 어떻게 했는가?
- Public Score
- Private Score
- 1. 나는 내 학습목표 달성을 위해 무엇을 어떻게 했는가?
- 2. 나는 어떤 방식으로 모델을 개선했는가?
- 3. 내가 한 행동의 결과로 어떤 지점을 달성하고, 어떤 깨달음을 얻었는가?
- 4. 전과 비교하여 새롭게 시도한 변화는 무엇이고, 어떤 효과가 있었는가?
- 5. 마주한 한계는 무엇이며, 아쉬웠던 점은 무엇인가?
- 6. 한계/교훈을 바탕으로 다음 프로젝트에서 시도해볼 것은 무엇인가?
- 본문보다 더 중요한 참고
Public Score
Private Score
1. 나는 내 학습목표 달성을 위해 무엇을 어떻게 했는가?
- 내가 설정한 학습 목표는 무엇인가요?
- 이번 ODQA 대회에서의 내가 설정한 학습 목표는 먼저 강의를 잘 듣고, 이를 바탕으로 MRC를 잘 진행하는 것이었다. 그리고 전 대회인 STS에서 협업을 잘하지 못해서 개인전 같은 느낌이 있었는데 이번엔 협업 관리 툴을 최대한 사용하여 팀원과의 원활한 작업을 하는 것이 나의 학습 목표였다.
- 학습 목표를 달성하기 위해 세운 구체적인 전략은 어떤 것이었나요?
- 일단 대회 초반에는 강의를 숙지하는 것을 목표로 하였다. 강의를 들으면서 이번 프로젝트에 적용될 수 있는 것들은 따로 메모를 해두었다. 강의를 다 듣고 나서는 팀원과 해야할 일을 분배하여 각자 맡은 파트를 더 조사하기로 하였다. 그리고 프로젝트에 대한 조사 뿐만 아니라 협업에서 활용할 git에 대해 더 알기 위해 “개발자스럽게 Github 사용하기” 강의를 들었다.
- 이 목표 달성을 위해 구체적으로 어떤 학습 방법이나 자료를 사용했나요?
- 저번 프로젝트에서는 EDA를 위해
describe()
와 같이 통계적인 지표들을 통해 데이터를 바라보아서 세부적으로 데이터가 어떻게 구성되어있는지는 잘 보지 못했다. 이번에는 통계적인 지표와 더불어 데이터를 일일이 살펴보며, 이번 데이터는 어떤 특징이 있고, 어떤 전처리를 해야할 지 관찰하는 시간을 가졌다.
- 저번 프로젝트에서는 EDA를 위해
2. 나는 어떤 방식으로 모델을 개선했는가?
- 기존 모델에서 확인한 주요 약점은 무엇이었나요?
- 기존 모델에서 입력으로 들어가는 question의 질문의 의도가 모호한 경우가 있었다. 이를 보완하기 위해 question이 입력으로 들어갈 때 해당 question이 어떤걸 물어보는지 모델이 알 수 있도록 카테고리 스페셜 토큰을 추가하는 작업을 하였다. 예를 들어 기존의 질문인 “대통령을 포함한 미국의 행정부 견제권을 갖는 국가 기관은?”을 “대통령을 포함한 미국의 행정부 견제권을 갖는 국가 기관은?
”과 같이 스페셜 토큰을 추가하여 입력으로 넣어줬다. 이러한 모델에 들어가는 스페셜 토큰은 별개의 Multi-class classification 모델을 만들어서 만들어주었고 이를 전처리 과정에서 작업되게 하였다.
- 기존 모델에서 입력으로 들어가는 question의 질문의 의도가 모호한 경우가 있었다. 이를 보완하기 위해 question이 입력으로 들어갈 때 해당 question이 어떤걸 물어보는지 모델이 알 수 있도록 카테고리 스페셜 토큰을 추가하는 작업을 하였다. 예를 들어 기존의 질문인 “대통령을 포함한 미국의 행정부 견제권을 갖는 국가 기관은?”을 “대통령을 포함한 미국의 행정부 견제권을 갖는 국가 기관은?
- 모델 개선을 위해 어떤 데이터셋 또는 추가적인 학습 자료를 사용했나요?
- 기존의 훈련데이터가 4000개 정도로 작은 사이즈라서 모델이 더 많은 표현을 다루기 위해 데이터를 늘려주는 작업이 필요하다고 생각하였다. 이 작업에는 유사 한국어 dataset인 korquad 1.0 데이터를 사용하였고, 이 데이터를 활용할 떄는 transfer learning을 사용하여 진행하였다. korquad 1.0 데이터로 1차 fine-tuning을 진행하고 기존에 가지고 있던 데이터를 활용하여 2차 fine-tuning을 진행하였다. 2차 fine-tuning에서는 전체 파라미터를 조정하는 방법과 LoRA를 활용하는 방법을 사용했다.
- 각 개선 방법의 효과는 어떻게 검증했고, 그 결과는 어땠나요?
- 증강된 데이터셋으로 훈련과 검증을 해본 결과 validation에서는 성능이 소폭 상승하였다. transfer learning에서 fine-tuning을 적용했을 때와 LoRA를 사용했을 때 모두 성능이 소폭 상승하였다. 하지만 test 데이터셋으로 결과를 제출해본 결과 실제 성능 향상은 영향력이 있을 정도로 있지 않았고, 오히려 떨어진 경우도 있었다. 이에 대한 분석으로는 transfer learning에서 사용한 데이터셋들의 특성이 train, validation, test와의 데이터 특성이 달라서 실제 결과에서 성능이 하락한 것이라고 보았다.
3. 내가 한 행동의 결과로 어떤 지점을 달성하고, 어떤 깨달음을 얻었는가?
- “~~하면 좋지 않을까?”라는 생각에서 진행한 실험은 대부분 눈에 띄는 성능의 향상을 불러오지 않는 경험을 하였다. 이러한 접근 방법보다 명확한 근거를 가지고 진행한 실험에서 진정한 성능의 향상을 가져올 수 있다는 것을 배웠다.
4. 전과 비교하여 새롭게 시도한 변화는 무엇이고, 어떤 효과가 있었는가?
- 이전과 비교하여 어떤 새로운 접근 방식이나 기술을 시도했나요?
- 이전에 프로젝트를 진행하면서 불편했던 부분들을 개선하려고 노력을 했다. vscode의 특성상 file properties를 확인하기 어려운 점에서 disk_manager와 vscode extension 및 설정을 개선하려고했고 이를 팀원에게 공유했고 좋은 반응을 얻을 수 있었다.
- 프로젝트 내에서는 EDA를 진행할 때 macro한 지표만을 보고 분석하는 것이 아닌 실제 데이터를 보고, 토큰도 보면서 EDA를 진행했을 때 더 인사이트 있는 발견을 할 수 있었다.
5. 마주한 한계는 무엇이며, 아쉬웠던 점은 무엇인가?
- 프로젝트 진행 중 만난 가장 큰 한계나 어려움은 무엇이었나요?
- 프로젝트를 진행하면서 만난 어려움은 생활 관리가 어려워서 프로젝트 후반에 퍼지게된다는 점, 영속성 없는 루틴으로는 길게 갈 수 없다는 점을 느꼈다. 아무래도 역량이 부족하니 시간으로 때우려는 습관이 있어서 무리해서라도 그날 다 끝을 내고 자고 하려다보니 생활 관리가 잘 안된 것 같다. 이러한 부분에서 좀 더 스마트한 방법으로 생활 관리를 하면서 진행했으면 좋았을 것 같은데, 아직 그 내용이 떠오르진 않는다.
- 또한 강의의 내용이 어려워서 다 이해하지 못하고 프로젝트를 시작한 것이 아쉬웠다. 다음 프로젝트로 넘어가기 전에 이번 프로젝트에 쓰인 개념들을 잘 정리해둘 생각이다.
6. 한계/교훈을 바탕으로 다음 프로젝트에서 시도해볼 것은 무엇인가?
- 이번 프로젝트에서 배운 점을 바탕으로 다음 프로젝트에서 어떤 점을 개선해보고 싶나요?
- 이번 프로젝트에서 느꼈던 필요한 부분은 두 가지로 작업 큐를 구축해두는 것과 프로젝트 시작 때 Wrap-up report를 염두에 두고 프로젝트를 시작하는 것이다. 두 사람이 한 서버를 공유할 때 각자의 작업이 언제 끝나는지 확인을 해야해서 이 점이 불편했는데, 작업큐를 만들어서 서로에게 확인할 필요 없이 각자의 작업을 큐에 걸어두면 작업이 알아서 실행되는 프로세스를 만들어서 이를 해결해보고 싶다.
- 그리고 Wrap-up report를 작성할 때 “기존 모델에서 확인한 주요 약점은 무엇이었나요?”와 같은 질문에 선뜻 답을 하기 어려웠는데 이는 프로젝트 초기에 발산적 사고를 통해 방향을 잡아서 그에 대한 근거를 대기가 힘들기 때문이다. 다음 프로젝트에서는 위와 같은 질문에 명확하게 답을 할 수 있게 프로젝트를 진행하고 싶다.
본문보다 더 중요한 참고
LoRA의 그래프엔 감동이 있다.
disk_manager
commitizen
댓글남기기