-
Notifications
You must be signed in to change notification settings - Fork 7
JunHyuk Kwon edited this page Feb 8, 2023
·
16 revisions
- 오늘의집에서는 '집들이'이라는 카테고리에 오늘의집 유저들이 각자 꾸민 집을 소개하는 글이 있습니다.
- 각 '집들이' 글에는 집을 꾸미는데 사용한 아이템들을 한 데 모아둔 페이지가 있습니다.
- '집들이' 글을 작성한 유저 : '집들이'에 포함된 아이템들
- '집들이'에 포함된 아이템들은, '집들이' 글을 작성한 유저가 구매한 아이템들입니다.
- 따라서 이 아이템들을 오늘의집 유저가 선호하는 아이템으로 간주할 수 있습니다.
- 회원가입 시 선호하는 집들이 이미지를 선택합니다.
- 나만의집 서비스의 신규 유저가 회원가입 시 선택한 '집들이' 글에 포함된 아이템들을 '초기 선호 데이터'로 구성합니다.
- 따라서, 첫 추천 아이템들은 '초기 선호 데이터'를 기반으로 생성됩니다.
- 나만의집 서비스 유저가 선호하는 아이템이 있으면 '좋아요'를 눌러서, 유저의 선호 아이템으로 추가합니다!
- 유저가 아이템들의 좋아요를 많이 누를수록 더 정밀한 추천이 가능해집니다!
LightGCN이란?
- LightGCN은 NGCF(Neural Graph Collaborative Filtering)이라는 그래프 기반 CF(Collaborative Filtering) 모델을 경량화해서 성능을 높인 모델입니다.
- 간단히 이야기해서, 유저 - 아이템 관계로만 구성된 그래프 구조를 활용해서 유저의 선호 아이템을 포착하는 모델입니다.
- LightGCN 모델은 학습 파라미터가 적어 추론 속도가 빠르다는 장점을 가지고 있습니다. 따라서, 빠른 학습 속도가 필요한 저희의 서비스에 적합할 것이라고 판단하였습니다.
- LightGCN 모델은 non user-free model, 즉 신규 유저에 대해서 대응하지 못하는 모델입니다.
- 따라서 LightGCN 모델을 학습할 때, input 유저를 마치 집들이 5개를 선택한 것과 동일하게 dummy 유저를 랜덤하게 생성하였습니다. 이를 가지고 학습했습니다.
- 나만의집 서비스의 회원가입 시에는 '집들이' 이미지를 input으로 받기 때문에 오히려 이 input을 동일한 형태로 받는 점에서 더 좋은 추론을 할 수 있을 것이라고 생각했습니다. 기
- 저희가 수집한 데이터는 99.9599%로 매우 높은 sparsity와 매우 극심한 Long Tail Problem이 있었습니다.
- 따라서 유저-아이템 관계를 그래프로 표현했을 때, 비인기 아이템들을 매개로 유저를 연결지으려면 더 깊은 깊이에서의 message passing이 이루어져야 했습니다.
- 그러나, LightGCN 모델과 같이 message passing을 하는 GNN 모델은 깊이가 깊어질수록 그래프가 over-smoothing되는 문제가 발생합니다.
- 결국, 그래프 탐색 깊이를 줄이거나 늘려도 학습이 되지 않는 문제가 발생했습니다.
- 따라서 최종 모델을 선정하기 전, 4가지 모델 선정 기준을 설정했습니다.
- Personalized: 유저의 취향을 반영해 추천을 해주어야하므로, 개인화가 가능해야합니다.
- User Free: 신규 유저에 대응할 수 있어야하므로 아이템 구성만을 입력으로 받는 user-free해야합니다.
- Extremely Sparse Data: 매우 sparse한 데이터도 학습할 수 있어야 합니다.
- Fast Inference: 추론 속도가 빨라, 서비스 제공에 문제가 없어야 합니다.
- 이런 네 가지 기준에 부합하는 모델로 Multi-DAE 모델을 선정하였습니다.
- Multi-DAE 모델은 AutoEncoder 기반이므로, item 구성만을 입력받습니다. 따라서 user-free한 특성을 가집니다. 또한, dense한 latent factor을 추출하기 때문에 sparse한 데이터에도 대응할 수 있습니다. 그리고 빠른 추론 속도를 가지고 있기에, 저희 서비스에 적절한 모델로 판단하여 선정하게 되었습니다.
- 모델의 성능을 평가하기 위해 NDCG@10과 Recall@10을 측정한 결과, 200 Epoch까지 큰 변화가 없었습니다. 따라서 모델의 학습이 충분히 되었다고 판단했습니다.
- 하지만, 실제 프로젝트에 적용해 추천 결과를 살펴봤을 때 유저의 취향에 관계없이 유사한 상품들이 추천되고 있다는 것을 발견했습니다. 즉, 개인화 추천이 이루어지지 않고 있었습니다.
- 앞선 개인화 추천 문제를 해결하기 위해 diversity@10이라는 다양성 지표를 도입하였습니다. diversity@10은 아이템이 다양하게 추천될수록 비례하여 증가하는 지표입니다.
- diversity가 epoch이 커질수록 증가하는 양상을 보였기에, 이전 모델보다 학습을 더욱 진행하였습니다. 그 결과, 다양성은 지속적으로 증가하고 이와 함께 정확도 지표도 증가하였습니다. 이제는 사용자에게 개인화된 결과를 내고 있다고 판단할 수 있었습니다!
실제 서비스에 적용한 결과, 이전보다 훨씬 다양한 상품들이 추천됨을 확인할 수 있었습니다.