NAVER boostcamp AI Tech

[NAVER boostcamp AI Tech 5기] 16주차 학습 정리

y2r1m 2023. 6. 22. 23:40

1) RecSys Level 2 대회 - Movie Rec 4주차

드디어 마지막 대회인 Movie Recommendation 대회가 끝이 났다.

이번주는 대회 마지막 주인 만큼, 앙상블에 힘을 썼다.

 

나는 hard voting, soft voting 기법에 대한 앙상블 모듈 작성 작업을 맡아서

처음으로 앙상블 모듈을 작성해보았다.

처음엔 막막하고 어떤 로직으로 구현할지 고민을 많이 했던 것 같다.

특히 우리 대회의 평가 지표가 recall@k이기 때문에,

즉 한 유저마다 k개의 아이템을 뽑기 때문에 더 어렵다고 느낀 것 같다.

 

  • hard voting을 구현할 때, 대회의 평가 지표가 recall@k이기 때문에 hard voting으로 k개의 아이템을 순서 상관 없이 뽑아도 된다는 점을, 팀원 분들과 얘기하고 질문하면서 깨닫게 되면서 작업이 수월해졌다.
    • 해당 내용을 깨닫기 전까진 혼자 어떻게 구현해야 할지 고민하면서 시간을 날렸다.. ㅎ 
    • 라인마다 계산을 반복하지 않고 groupby로 유저별로 묶어서 계산량을 줄일 수 있기 때문에 시간 복잡도도 크게 줄일 수 있었다.
  • soft voting에서는 우리 팀이 미리 inference 과정에서 뽑은 item_score(해당 item에 대한 점수)에 모델별 가중치를 지정해 곱해준다. 즉 모델별로 score를 가중시켜 item_score를 재계산하고, 이 score에 따라 score가 높은 item k개를 뽑는 방법으로 구현했다.
    • hard voting에 비해 큰 고민 없이 구현할 수 있었다. 이 방법의 경우에는 코드 효율을 위해 더 힘썼던 것 같다.

 

이후 앙상블 실험을 진행하며 성능을 향상시킬 수 있었다.

다만 soft voting 구현 전략은 잘 안맞았던 건지 성능 향상이 잘 이루어지지 않았고,

hard voting을 통해 큰 성능 향상을 이룰 수 있었다. 

hard voting 시 많은 파일을 넣을 수록 각 유저에게 더 일반적인 영화 추천 결과를 제공하기 때문에

여러 모델들의 결과 파일을 최대한 많이 섞었고, 제출 결과 또한 성공적이었다.

 

결과적으로 오늘 public 5등에서 최종 private 3등으로 대회를 마무리했다! 

score도 큰 하락이 없이 등수가 오른 것을 보니 robust하게 결과를 잘 뽑은 것 같다.

사실 막바지에는 팀원들 모두 많이 지쳐있었는데, 다행히 좋은 성적으로 마무리할 수 있어 기분이 좋고 뿌듯했다!

 


2) 피어세션

이번주는 거의 대회 이야기를 한 것 같다.

다만 이제 곧 최종 프로젝트 기간이 시작되기 때문에

최종 프로젝트에 관련해서도 논의하고 준비를 조금씩 해 나갔다.

 

저번주부터 슬슬 프로젝트 주제를 구체적으로 정하고 워크플로우를 그려보았고,

이번주엔 본격적으로 데이터를 수집하기 시작했다.

나는 크롤링 경험이 없어 주말에 크롤링 공부를 한 후

다른 팀원의 크롤링이 잘 되었는지 점검하며 그에 대한 감을 익혔다.

그리고 데이터 수집은 정말 노가다구나.. 라는 것을 느꼈다.

 

이후 크롤링을 직접 해 볼 예정이었으나,

수집할 데이터가 그렇게 많지 않아 직접 수작업으로 진행했다.

생각보다 빨리 끝내서 데이터가 많지 않다면 무조건 크롤링을 할 필요는 없겠다는 것을 느꼈다.

계속 필요한 데이터셋을 정의하고 그에 맞게 데이터를 지속적으로 수집해 나갈 예정이고,

내일은 팀원들과 함께 설문조사를 만들 계획이다.

 


3) 학습 회고

  • 저번 DKT 대회에 비해서는 많은 것을 시도해 본 것 같다. 확실히 성장했음을 느꼈다!
    • 모델에 대한 이해를 바탕으로 가설 기반 실험을 진행해 보았다.
      결과를 해석하는 과정이 어렵지만 신기했다.

    • 하이퍼파라미터 튜닝을 수월하게 진행할 수 있도록 WandB Sweep을 적용하였다.
      WandB 하나 만큼은 끝장을 본 것 같다.

       
    • 앙상블 모듈을 작성해 hard voting, soft voting을 구현하고, 앙상블 전략에 대해 깊이 고민해보았다.

    • 깃허브와 노션을 좀 더 적극적으로 사용했다.
      깃허브 기본 작업들은 물론, Issue와 PR은 이제 능숙하게 할 수 있게 되었다.
      그리고 노션에도 내가 작업/공부한 내용들을 꼭꼭 최대한 다 적어두려고 한 것 같다.

 

  • 아쉬운 점도 당연히 있다.
    • 내가 맡은 Sequential 모델들(Caser, S3Rec)에 대한 충분한 실험과 성능을 이끌어내지 못해, 해당 모델들을 잘 활용하지 못했다. Sequential 모델들 성능이 잘 안나오다보니 AE 모델들에 집중한 경향이 있는데, Sequential 모델들도 좀 더 비중을 두고 작업했다면 더 다양하고 많은 Sequential 모델들을 활용할 수 있었을 것 같다.

    • 활용한 모든 모델들을 더 깊이 이해하고 공부했으면 좋았을 것 같다. 노션에 Docs를 만들어 몇 가지 모델들에 대해 정리해 둔 게 물론 많은 도움이 되었지만, 모든 모델들에 대해 정리하는 건 역시 쉽지 않았던 것 같다. 좀 더 부지런히 했으면 더 좋았을 것 같다는 아쉬움이 조금 있다.

 

  • 개선하고 싶은 점!
    • 작업에 대한 확실한 목표와 목적을 세워서 진행하는 습관을 들이는 게 좋을 것 같다. 그냥 하다보니 목적의식을 잃을 때도 있었던 것 같고, 쉽게 그만 두기도 했던 것 같다. (특히 S3Rec..)
      어떤 걸 할 때 목표와 목적을 확실하게 세우는 걸 연습해보자! 

       
    • 의견을 잘 정리해서 말하기 위해 노력하자.
      • 회의를 매일 자주 하다보니, 의견을 바로바로 설득력 있게 잘 정리해서 말하는 것이 어렵고 잘 안된다고 많이 느꼈다.
      • 성향 탓인지,, 항상 고민도 많고 생각이 많아서 생각을 정리하고 말하는 데까지 시간이 걸리는 경우가 많은 것 같다.
      • 나의 의견과 생각을 잘 정리해서 말하는 방법을 앞으로 잘 연습해서 터득해나가고 싶다. 

 

 

그리고 하루는 처음으로 아침부터 카페에 가서 부캠 학습을 진행했는데,

집중도 엄청 잘 돼고 능률이 향상되는 걸 느꼈다.

집중력이 떨어질 땐 카페에 가서 하면 좋을 것 같다고 생각했다.

 

한 달 동안 정말 고생 많았다! 다음 주 새로고침 데이 후에 진행할 최종 프로젝트도 화이팅 해보자!