[네이버 부스트캠프 AI Tech 6기] 6주차 회고 - RecSys 기초 프로젝트(1)

Seung-ah Park·2023년 12월 15일

level 1 기초 프로젝트 시작


  드디어 기초 프로젝트가 시작되었다! RecSys 도메인의 level1 단계는 'Book rating prediction'이다. 네이버 클라우드센터의 v100 GPU가 인당 1개씩 주어졌고 기본 성능을 위한 베이스라인 코드가 제공되었다. 물론 순탄치만은 않았다,,, 서버 세팅에 한나절이 걸렸고 베이스라인 코드를 뜯어보는 데만, 이해하는 데만 한참 걸렸다. 그래도 오늘 무사히 파일을 올렸고 현재 이 글을 작성하고 있는 이 시점에 우리 조가 1등이다..! 앞으로도 모델 수정을 거듭해서 1등을 유지하도록 하겠다!!


Dataset, BaseLine


  데이터는 kaggle의 Book-Crossing: User review ratings의 데이터셋이었다. 유저 프로필(Users), 책 프로필(Books), 유저-책 평점(Ratings)으로 이루어진 데이터이고 원본에는 이상치가 꽤 많으나 부스트캠프 AI Tech 관계자 분들께서 어느 정도 정제해 배포해주셨다.
  베이스라인 코드는 PyTorch로 구현된 FM, FFM, NCF, DeepCoNN, WND, DCN, CNN-FM로 총 7개가 주어졌다. 사실.. 이 코드들 해석하는 데 조원 분들의 도움을 너무 많이 받았다.. 아직 객체 지향 프로그래밍, 딥러닝 모델 구조가 익숙치 않아서 전반적인 구조와 기능 설명해주시는 것을 듣고 나서야 조금씩 이해가 되었고 성능을 높여야 하는데 대체 무엇을 건드려야 할지 도저히 모르겠었다..
  그래서 먼저 데이터 셋을 확인하였다. 우선 내가 맡은 부분만 설명해보겠다.

Users - age

  우선 유저 프로필에서 가장 결측치가 많았던 컬럼이다. 이에 우선 코드를 살펴볼 이번 주에는 평균을 대입하기로 하였다. 이후에는

평균 / 최빈값 / 특정 책을 읽은 사람들의 평균값

등으로 결측치를 채워볼 생각이다.

Books - 'language' / 'summary'

  책 프로필에서는 'language', 'category', 'summary' 컬럼이 결측치가 많았다.
  이에 'language'는 특정 출판사에서 어느 언어로 책을 가장 많이 펴냈는가?를 기준으로 채워넣었다. 출판사가 모든 국가의 언어를 고르게 내는 경우는 많이 없을 것이라 생각하여 결측치를 채웠다.
  데이터셋에는 같은 제목, 같은 저자인데 출판사가 다른 경우가 많았다. 그래서 'summary'는 같은 제목, 같은 저자인데 다른 출판사에 summary가 있으면 이를 그대로 넣는 방법을 고안했다. 하지만 실제로 코드를 돌려본 결과, for문의 탓인지 시간이 너무 오래 걸려서 text 데이터를 쓰는 DeepCoNN 모델에만 적용하든, 다른 아이디어를 생각하든 해야겠다.

모델링

  나는 가장 중요한 데이터가 'summary' 데이터라고 생각했다. 가장 내용이 많고 내가 '선호 영화 기반 도서 추천 시스템'을 만들 때 책 요약이나 줄거리가 꽤 중요한 역할을 함을 알게 되었기 때문이다. 하지만 아무런 수정이 없는 데이터로는 text 데이터를 활용하는 DeepCoNN 모델이 생각보다 썩 좋지 못한 결과를 냈다. 이에 DeepCoNN을 맡으신 조원 분께서 pre-trained 된 가중치를 바꾸거나 토크나이저를 바꾸는 방향을 생각해보신다고 하셨다.
  이후, 나는 DCN 모델을 돌려보았다. 생각보다 코드가 이해하기 쉬웠고(BERT를 쓰는 DeepCoNN) 이번 주차 강의 실습 자료에 나와있었다. DCN에 대해 구글링하고 찾아보면서 모델을 수정할 방안을 찾았다. 수정해서 안 돌아가면 어쩌나 걱정했는데 잘 돌아갔다..! 그래도 1인분은 한 것 같아 다행이었다..ㅠㅠ 다음 주에 대회가 끝나는데 이런저런 시도 후에 벨로그, 티스토리에 정리할 예정이다.


느낀 점 및 계획


  AI 엔지니어를 꿈꾼지 얼마 되지 않아 Github, VSCode, BaseLine, CLI 등등 개발자가 쓰는 모든 툴이 익숙치 않았다. 그래서 local로 많이 진행하고 있지만 github도 조금씩 써볼 예정이다.
  wandb도 이론으로만 배웠을 뿐, 처음으로 코드에 넣고 활용해 보려했는데 무슨 일인지 오류가 떠서 아직은 못 써본 상태이다. 다음 주 회고에는 왜 못 썼는지, 쓴 결과는 어떤지 정리 해볼 계획이다.
  그리고 조원 분들께 진심으로 감사하다는 말씀을 전하고 싶다. 부족한 팀원이 질문하지 못할까봐 먼저 나서서 설명해주시고(덕분에 사람 하나 살았습니다..ㅠㅠ) 하나하나 순차적으로 개발 환경을 세팅할 수 있도록 도와주셨다. 조원 분들께 받은 도움을 통해 더욱 발전해 조원들께 도움을 드릴 수 있는 사람이 되어야겠다.

profile
성장하는 삐약이 AI 개발자 지망생

0개의 댓글