-
Notifications
You must be signed in to change notification settings - Fork 7
Cold start 문제 개선
사용하는 추천모델의 입력과 출력은 모두 아이템입니다.
저희는 새로운 유저에 대한 추론 데이터셋을 다음과 같이 구성했습니다.
- 오늘의 집의 "집들이" 글을 통해 이미지와 스타일 라벨 수집
- 스타일 별로 5개의 이미지를 무작위로 선택 (스타일 카테고리 개수 11개 * 무작위 5개 = 55개의 이미지)
- 회원가입 시 55개의 이미지를 유저에게 보여주고, 5개 이상의 취향에 맞는 이미지를 선택
- 유저가 고른 이미지에서 사용된 상품 중 소파, 선반처럼 유저의 취향이 반영되어 있는 카테고리의 상품을 유저의 Default 데이터로 활용
만약 55개의 이미지 중 사용자 취향에 맞지 않는 이미지가 보여진다면 어떨까요?
유저가 선택에 불만족하여 서비스를 떠나가는 계기가 될 수 있습니다.
기존 방식에선 스타일이라는 라벨을 통해 보여지는 이미지를 구분했습니다. 뭐가 문제였을까요?
스타일 라벨 별 데이터 분포가 고르지 못한것을 볼 수 있습니다. 이러한 불균형을 포함한 데이터를 신뢰하긴 힘들어 보입니다.
왼쪽은 내추럴로 분류되어 있는 이미지입니다. 저는 모던이라고 생각하는데.. 어떠신가요?
스타일은 이처럼 주관적인 생각이 많이 반영됩니다. 스타일 라벨만으로 이미지를 구분하긴 어려워 보입니다.
오른쪽의 사람이 등장하는 이미지는 인테리어보단 재미있게 짐볼을 타는 귀여운 아이들에 시선이 쏠리네요.
- 사람이나 화장실같이 인테리어를 잘 나타내지 않는 이미지는 Noise입니다.
- 스타일이 아닌 다른 방법으로 이미지를 나누어 봅시다.
앞서 언급했던 문제 중, 유저가 인테리어가 아닌 대상체에 집중하게 되는 이미지가 종종 등장하는 것이 있었습니다. 그 중엔 사람, 강아지, 고양이 등 수많은 것 들이 있습니다. 수 많은 카테고리를 분류문제로 해결할 순 없어 보입니다.
다행히 YOLO라는 다양한 물체 즉, 사람, 동물부터 사물까지 Detection 해 주는 감사한 Pretrained Model이 존재합니다.
그럼 Detection 되는 모든 개체를 노이즈로 보는것은 합당할까요?
고양이🐈 : 캣타워도 인테리어?
강아지🐶 : 개집도 인테리어?
돌🗿 : 펫스톤도 인테리어?
음,, 모르겠습니다. 추후에 A/B테스트를 수행한다거나 가구와 상관관계를 측정한다거나 다른 방법을 도입 해 보도록 하고, 초기 버전은 사람을 걸러내는 작업만 수행토록 하겠습니다.
이미지를 스타일 Feature가 아닌 다른 방법으로 분류해야 합니다. 하지만 Target Label도 없고 이미지를 뚜렷히 구분할 수 있는 다른 데이터가 있는 것도 아닙니다. 이러한 문제로 인해 이미지 자체에 담긴 정보를 추출하는 방식을 떠올렸습니다.
Convolutional Auto Encoder는 입력과 출력이 같도록 학습하는 구조입니다. 입력된 이미지는 Encoder Layer를 통해 잠재공간으로 변환되고, 잠재공간은 다시 Decoder Layer를 통과하며 원본 데이터를 복원하게 됩니다. 추가로 잠재공간 상에 존재하는 이미지를 벡터화 시키기 위해 Flatten, Linear Layer를 추가하여 학습시켜 encoder를 통해 나온 데이터가 조금 더 Dense해 지도록 했습니다.
사용된 모델은 다음과 같습니다.
이렇개 생성된 벡터를 t-SNE를 통해 시각화 한 결과는 다음과 같습니다.
비슷한 무드를 가진 이미지끼리 어느정도는 뭉쳐있는 모습을 볼 수 있습니다. 이렇게 구한 벡터를 어떻게 활용할까요?
유저 취향을 알아내기 위해 유저의 선택폭을 늘려 줄 필요도 있고, 취향이 어느정도 발견되면 좁혀줄 필요도 있습니다. 저는 마치 포위망처럼 유저의 취향을 알아내려는 시도를 했습니다.
1. 초기엔 전체 범위에서 이미지가 보여집니다.
2. 유저가 이미지를 고르면 이미지의 중심점을 구합니다.
3. 유저가 고른 이미지의 개수와 반비례하는 Sample 개수 n을 구합니다.
4. 중심점 기준으로 거리가 n 이하인 이미지 중 보여줄 이미지를 선택합니다.
새로운 유저에게 발생하는 Cold Start 문제를 해결하고자 유저가 마음에 드는 인테리어 사진을 고르게 하고, 선택된 사진과 연관된 상품들 중 침대, 소파처럼 인테리어의 큰 비중을 차지하는 상품들을 새로운 유저가 선호하는 아이템이라 가정했습니다.
이 때 전체 80000개 이상의 이미지중 스타일별 5개 즉, 55장의 이미지를 모두 랜덤으로 추출하는 것은 느리고, 유저의 취향과 관계없이 정해진 개수만큼은 눌러야 하여 피로감이 쌓이고, 55개의 수많은 이미지를 한번에 다 보여주어야 하기 때문에 뒤에있는 사진은 잘 선택되지 않을 수 있다는 문제가 발생했습니다.
이를 해결하기 위해 노이즈가 있는 이미지를 제거하고, 이미지를 자체 특성을 담고있는 저차원 벡터로 표현 후 벡터 간 유사도를 활용하여 유저 취향에 맞는 사진을 보여 줄 확률을 높일 수 있도록 했습니다.
- 사람 말고 시선을 강탈하는 개체는 무엇이 있는가?
- Latent Vector가 필요한 정보를 잘 표현하고 있는지 검증할 수 있는가?
- 작은 원룸에 사는 사람이 큰 소파가 포함된 사진을 고르는 상황이 발생한 경우 적합한가?