내마리 MyMary: 내 마음을 들여다 보는 챗봇
2023.06.30 ~2023.07.28
MyMary
mymary.o-r.kr:30007
GitHub - boostcampaitech5/level3_nlp_finalproject-nlp-12: '내마리'는 나의 이야기에 귀를 기울임으로써 나에게
'내마리'는 나의 이야기에 귀를 기울임으로써 나에게 공감하고, 이야기의 맥락을 파악하고, 더 깊은 내용을 질문해주는 챗봇입니다. - GitHub - boostcampaitech5/level3_nlp_finalproject-nlp-12: '내마리'는 나
github.com
Huggingface Datasets Repository
Smoked-Salmon-s/empathetic_dialogues_ko · Datasets at Hugging Face
"질문: 제 연인과 싸웠어요. 화해하기가 쉽지 않아요. 어떻게 해야 할까요? 답변: 안타깝게도 그러셨군요! 친구 관계도 로맨틱한 관계만큼 복잡할 수 있으며, 갈등이 있는 상황에서는 정말 어렵
huggingface.co
💪🏻 1. 학습 목표와 달성을 위한 노력
- 프로젝트를 하면서 새로 배우는 내용 및 처음 경험해보는 것들 기록하기
- 이번 프로젝트는 내용과 형식 모든 면에서 지난 대회들과는 아예 다른 양상의 새로운 프로젝트가 될 것이라 생각했다. 선례가 있는 outdated topic이 아니라, A부터 Z까지 직접 기획하고 진행하는 프로젝트였기 때문이다. 이에 그 과정 속에서 경험하는 것들과 깨닫는 것들을 기록해두는 것이 유의미할 것이라 생각하여 이와 같은 목표를 설정했고, 노션 및 블로그를 통해 이를 달성했다. 팀원들 모두가 처음인 task가 많았는데, 그 중 하나였던 poetry와 관련한 내용을 노션으로 정리하여 공유한 것이 도움이 되었다. 또한 다른 팀원이 FE/BE나 LLM fine-tuning과 관련한 새로운 개념 등에 대해 정리해준 글을 보며 나 또한 많은 도움을 얻었다.
- 새로운 것을 적용할 때에는 이론적 근거를 확보한 후 진행하기
- LLM을 fine-tuning하기 위해서는 PEFT, LoRA, quantization 등 처음 보는 개념들과 라이브러리에 대한 지식이 필요했다. 이에 본격적인 프로젝트 시작 전 관련한 사전 지식을 조사하고, 프로젝트를 진행하며 병렬적으로 핵심적인 내용이 담긴 논문들을 읽었다. 부스트캠프를 처음 시작할 때 팀에서 세웠던 목표인 ‘뭔지 알고 모델링하기’를 함께 달성하고 과정을 마칠 수 있어 뿌듯했다. 더불어 논문에서 읽은 내용을 반영한 실험에서 좋은 성과를 얻을 수 있었어서, 그 효용성 또한 체감할 수 있었던 유의미한 시간이었다.
- 특히 현재 진행중인 task의 기반이 되는 논문을 읽는 습관을 들이고자 부스트캠프 내에서 모각공 스터디를 꾸리고 운영해가며 매일 한 시간씩 논문을 읽었는데, 한 달 전에 이러한 결정을 했던 나를 칭찬해주고 싶다. 덕분에 논문을 읽는 재미(?)도 알게 되었고, 더 많은 사람들도 알게 되어 기쁘다.
- 실험을 위한 파이프라인 견고하게 설계하기
- ODQA 대회에서 실험 파이프라인 설계의 중요성을 뼈저리게 느꼈고, 이에 본격적인 실험이 시작되기 전 baseline code에서 실험 관련 설정들을 정리하여 실험이 원활하게 진행될 수 있도록 했다. 특히 한 번의 실험에 소요되는 시간이 길었던 본 프로젝트에서 견고한 실험 파이프라인은 더 빛을 발할 수 있었던 것 같다.
- 코딩 열심히 하기
- 엔지니어로서 나의 가장 큰 문제점이자 극복해야 할 산은 백지에서부터 새로운 것을 구현해내기 어려워하는 점이라고 생각해왔다. 모델링 뿐만 아니라 BE/FE도 수행해야 하는 본 프로젝트에서 이것은 더 큰 문제점이 될 수 있을 것이라 생각하여 이러한 목표를 설정했다. 솔직하게 말하자면 힘은 정말 많이 들었지만 최선을 다 했다고 생각하지는 않는다. streaming 부분을 구현할 때 급박하게 생각하지 않고 체계적으로, 또 깊게 파고들었어야 하는 부분에서 충분히 그러지 못했던 점이 아쉬움으로 남는다.
- 새로운 것을 처음부터 구현해나가는 것을 어렵게 생각하는 이유는, 그 task로부터 오는 부담감이라는 생각이 들었다. 어쨌든 정해진 시간 안에 해내야만 한다고 스스로 생각하기 때문에 오히려 할 수 있는 것도 못하게 되는 것도 같다. 따라서 앞으로는 안 될 수도 있다는 것에 부담감을 느끼지 않으면서 코딩 그 자체를 즐기는 연습을 해보아야겠다. 너무 어렵게 생각하지 말 것 !
👩🏻💻 2. 프로젝트 진행 내용
- 개발환경 구성
- product serving 강의에서 언급된 poetry를 활용하여 팀원 모두가 동일한 조건에서 개발 및 실험할 수 있는 환경을 조성했다. 처음 사용해보는 tool이지만, 그 필요성을 체감하기에 도입하는 상황이었어서 그런지 주도적으로 사용법을 익혀 글로 정리하고, 관련 이슈들을 해결해나갔던 것 같다.
- 환경과 관련한 문제라 코드 상의 문제보다 이슈 해결이 낯설어 poetry의 도입에 보수적으로 접근하는 팀원들도 있었는데, poetry의 사용이 유의미하려면 모든 팀원이 그것을 사용해야 했다. 그렇게 하기 위해서는 poetry의 도입을 주장한 내가 poetry에 대해 확실하게 조사해서 잘 알고 있어야 했고, 이를 바탕으로 논리적으로 팀원들을 납득시켜야 했다. 그러한 일련의 과정들이 challenging하게 느껴질 때도 있었지만, 형식적으로 또는 기계적으로 하는 것이 아니라서 생기는 문제들이라 해결해나가는 과정이 재밌게 느껴졌다.
- LLM fine-tuning을 위한 사전 조사
- 우리 프로젝트의 발단(?)이 되었던 https://github.com/Beomi/KoAlpaca의 polyglot-ko finetuning jupyter notebook 안에는 bitsandbytes, quantization, LoRA 등 수많은 낯선 개념들이 등장했다. 이를 이해하기 위해서 본격적인 프로젝트 전 관련 자료나 논문을 읽어보는 시간을 가졌다. 그 시간 안에 모든 내용을 완벽하게 숙지할 수는 없었지만, 아예 모르던 내용을 조금씩이나마 찾아보고, 프로젝트를 진행하면서 부족한 지식을 보충하는 과정을 거침으로써 모델을 ‘이해’하고 학습시킬 수 있었다.
- Baseline Code 작성
- https://github.com/Beomi/KoAlpaca와 https://github.com/nlpai-lab/KULLM 을 참고하여 모델링을 위한 baseline code를 작성하였다. LLM을 fine-tuning하는 task였기에 peft나 bitsandbytes 등 기존에 사용해보지 않은 라이브러리들이 대거 등장했는데, 그것들을 하나씩 찾아보고 정리하는 과정이 꽤 어려웠다. 단순히 코드를 알아서 될 일이 아니라, 부동소수점부터 QLoRA까지 그 뒤에 숨어있는 개념들을 이해해야 했기 때문이다. 또한 초기에 CUDA 버전으로 인한 오류에서 꽤 오래 머물러있었는데, 어느 순간 이유도 모른 채 해결이 되었던 부분은 조금 찝찝한 채로 남아있다. 마지막으로 모델이 4-bit로 load되고 있는지 8-bit로 load되고 있는지 끝까지 파고듦으로써 결국 4-bit임을 확인할 수 있었던 점은 뿌듯했다.
- 데이터 생성 및 검수
- 자본의 힘을 느끼는 동시에 나는 멀티가 안되는 사람이며, 단순 노가다를 생각보다 더 싫어하는 사람임을 깨달았다. 나는 어떠한 행동이 3번 이상 반복되면 그것을 자동화하고 싶어하는 것 같다.
- backbone으로 사용한 모델들에 대한 조사를 하면서도 느꼈지만, 모델링에서 데이터는 어쩌면 가장 중요한 요소일 수도 있겠다는 생각이 들었다. 양질의 데이터를 생산해내는 것은 많은 자원을 필요로 하는 일임을 깨달았다. 같은 architecture를 다른 데이터로 학습시키기만 해도 새로운 이름이 붙는 데에는 이유가 있을 것이다.
- 데이터 EDA
- 생성한 데이터의 column 구성 및 길이 등 기초적인 통계치를 추출해보았다. 지난 대회들과 달리 EDA한 내용을 실험 설계까지 연결하지는 못했고, 간단하게 데이터를 확인하는 정도에서 그쳤다. 데이터의 턴 수 구성을 조절해보는 실험을 진행해보았다면 어땠을지 궁금하다. 모델링으로서의 의미도 있지만 데이터셋을 구축할 때 참고할 수 있는 인사이트 또한 얻을 수 있을 것 같다.
- 모델링
- template과 hyperparameter를 바꿔가며 실험을 진행했다. 학습 시의 template과 추론 시의 template에 미세한 차이만 있어도 모델 성능이 크게 저하된다는 점이 눈에 띄는 특징이었다. 또한 LoRA 논문의 내용을 활용하여 LoRA r값과 alpha값을 조절하는 실험을 진행했었는데, 논문에서 제시한 대로 낮은 r값의 LoRA가 좋은 성능을 보여 신기했다.
- 발표
- 5개월이라는 긴 시간동안 스프린팅 해온 탓에 체력적으로 지쳐 자칫 마지막 프로젝트를 해치워버리고 싶은 마음이 들까봐, 발표를 자원함으로써 마지막까지 파이팅 할 수 밖에 없는 환경을 조성했다 (?). 발표를 준비하면서 아이러니하게도 다음 프로젝트에서는 PM을 자원해봐야겠다는 생각을 했다. 아예 PM을 맡아버리면 처음부터 끝까지 일관되게 높은 텐션을 유지할 수 있을 것 같기도 하고, 나의 엣지인 소프트스킬을 요리조리 활용하면서도 하드스킬을 키워갈 기회가 될 것 같다는 생각이 들었기 때문이다. 도전 !
🔥 3. 한계와 교훈을 바탕으로 발전할 점
- 급하게 생각하지 말기. 애초에 하루만에 안 될 일이다.
- 너무 어렵게만 생각하지 말기. 남들도 다 하는데 내가 못 할 이유 없다.
- 내 코드, 내 글, 내 의견에 대한 근거를 갖춘 피드백을 더욱 감사히 여기기. 그런 피드백을 줄 수 있는 팀원과 함께하는 것은 행운 !
'회고 > 프로젝트 회고' 카테고리의 다른 글
Open Domain Question Answering (0) | 2023.06.25 |
---|---|
주제 분류 Topic Classification (0) | 2023.06.03 |
문장 내 개체간 관계 추출 Relation Extraction (0) | 2023.05.22 |
문장 간 유사도 측정 Semantic Text Similarity (0) | 2023.04.22 |
댓글