추천 시스템이란?
본 글은 모두의 연구소 A.I. College에서 열린 WATCHA 윤정민 팀장님의 추천시스템에 대한 세미나 내용 정리와 후기을 작성한 글입니다.
우선 추천시스템에 대해 전무한 나의 소견으로는 추천시스템이란 ‘다른 사람이 만족할 수 있는 정보를 제공함으로써 고객의 만족도와 기업의 이윤을 올리는 것’이 목표라고 알고 있다.
1. Recommender System Process
그렇다면 추천시스템의 입력값은 대체 어떤것들이 들어가고 출력값으로는 어떤 것들이 나오는 것일까? 즉, 어떤 것들을 예측하거나 분류하는 것일까? 또한 사용되는 모델은 어떤것이 있고 평가는 어떤식으로 진행할까?
- Input: rating, watch logs, tags, search logs etc
- Output: rating, watch or not, watch time etc
- Model: matrix factorization, deep model etc
- Measure: RMSE, NDCD, MAP etc
2. What should we do additionally?
어느정도 추천시스템의 분석 프로세스에 사용되는게 어떤것인지 알게되었다면 추가적으로 추천시스템에서 해야할 일들은 무엇이있을까? 이 의문에 대해서는 크게 4가지로 요약할 수 있다.
- Cold start 문제를 어떻게 해결할지
- Real-time을 어떻게 구현할지
- 유저의 행동에 바로 반응하게 할 수 있는 방법
- 새로운 데이터에 모델을 최적화 시키는것
첫 번째는 cold start 문제이다. cold start란 처음으로 등장한 컨텐츠에 대해 아무런 정보가 없는 문제를 말한다. 두 번째는 real-time이다. 추천시스템은 유저에게 실시간으로 반영되어 보여져야 하기 때문에 빠른 결과를 나타내어야한다. 세 번째는 유저의 행동에 바로 반응하게 할 수 있는 반응성이다. 두 번째와 마찬가지로 유저의 행동에 따라 결과가 나와야하기 때문이다. 마지막으로는 새로운 데이터가 생겼을때 모델 또한 거기에 맞게 최적화 되어야한다. 이 네 가지에 대해서 하나씩 풀어보고자 한다.
2.1. Handle user cold start
Cold start 문제를 해결하기위한 방법으로는 세 가지 방법을 사용할 수 있다.
- Pre-define hand-made recommendation
- 본인이 본 컨텐츠에 대해 평가를 하게 유도하는 제안
- 새로운 작품을 메인에 띄워서 별점을 주게 만드는 방식
첫 번째는 사전에 정의한 추천방식을 따르게 하는 것이다. 새로운 정보가 없기 때문에 과거의 다른 유사한 방법을 통해서 추론하는 방법이라고 볼 수 있다. 두 번째는 유저가 봤을 거 같은 컨텐츠를 보여주며 평가를 하게끔 유도하는 것이다. 유저가 보는 취향과 비슷한 유형인 경우 접해봤을 가능성이 높기 때문이다. 세 번째는 이번에 개봉한 겨울왕국2와 같이 새로운 영화가 나왔을때 메인에 표시함으로써 노출을 많이 시키는 것이다.
2.2. Real time score calculation
실시간으로 결과를 내기 위해서는 계산과정이 빨라야한다. 그러기 위해서는 모델의 복잡성과 입력값의 차원 등 여러가지 고려해야할 점이 많다. Real-time을 구현하기위한 방법으로는 크게 2가지가 있다.
- Matrix factorization 사용
- Google(google이라 쓰고 갓글이라 읽는다)에서 제안한 deep model Deep Neural Networks for YouTube Recommendations
첫 번째를 보고 Matrix factorization으로 real-time이 가능한가라는 생각이 들었다. 그러나 사실 구조만 잘 만들면 10만개 컨텐츠에 대한 것도 100ms 보다 덜 걸린다고한다. 실제로 최근까지도 연구논문이 나올 정도로 아직까지 건재한 모델(?)이다. 두 번째는 구글에서 발표한 deep model이다. 기존 deep model은 유저의 정보와 컨텐츠의 정보를 같이 학습하게되어 만약 유저가 10만명이면 10만개의 모델을 만들어야해서 굉장히 비효율적이라는 단점이 있었지만, google에서 제안한 candidate generation이라는 것을 사용하면 모델 하나만으로도 해결가능하게 되었다고 한다. (본 내용에 대해서는 이후 논문을 따로 리뷰해보고자 한다.)
2.3. Responsive model
이 부분에 대해서는 사실 머신러닝이라고 할 수는 없다. 나도 추알못이라 정확하게 이해는 되지 않았지만 DB에서 바로바로 결과를 가져다 반영하게끔하는, 결과를 정확하게 짚어서 반응하게하는 것이중요한 부분이다.
2.4. Up-to-date
새로운 데이터가 발생하였을때 모델에 반영하는 것에는 크게 두 가지를 고려해볼 수 있다.
- Trade off between freshness vs complexity
- Transfer learning from previous model to corrent model
첫 번째는 새로운 정보와 모델의 복잡성의 관계이다. 만약 새로운 정보를 업데이트하게 되는 경우 복잡도가 커지게되면 real-time에 대한 문제를 다시 고려해야할 수도 있다. 그러나 복잡도 보다 꼭 필요한 정보인 경우는 새로운 정보를 추가하는 것이 중요할 수도 있다. 이 문제에 대해서는 케바케로 잘 고려해보아야 한다. 두 번째는 transfer learning으로 이전에 학습한 모델을 약간만 추가 학습하는 것이다.
3. 맺음말
처음 알아보는 추천시스템에 대한 내용이였고, 다른 분야에서 사용되는 머신러닝과 다른점은 무엇일까 궁금했는데 궁극적으로 다른것은 없었다. 구체적인 부분에서 추천시스템이라는 것은 유저와 컨텐츠의 조합을 어떻게 잘 사용하느냐에 따라 좋은 결과가 나오는 거 같지만, 아직 해본게 없는 추알못으로서 더이상의 추론은 생략하도록하고 이후 직접 해볼 수 있는 기회를 가져보고자한다.
Leave a comment