brunch

You can make anything
by writing

C.S.Lewis

by 유윤식 Mar 01. 2020

TF-KERAS: Matrix Factorization

#MF, #Neural Matrix Factorization, #임베딩

어느덧 6개월의 시간이 흘렀다.

제법 긴 시간을 오직 하나의 결과를 확인하고 수정하고 개선하는...

어찌보면 첫 개발부터 시작해 모든 과정을 계속해서 반복하는 과정에서 조금은 지쳐가고 있는 찰나에

이렇게 글을 적게 되었다.


스스로에게... 다른 사람은 아니더라고 나 스스로에게는 잘 했다고 이야기 해주고 싶다.

데이터 수집과 전처리, 분석, 학습 전략, 모델 개요 설계 및 분석, 튜닝, 인퍼런스 등의 단계를 통해서 '추천' 이라는 서비스 영역에서의 프로젝트를 진행해 보았다.


영화, 음악, 책, 주식 등등 우리 주변에는 너무나도 다양한 형태(사람에 의한 추천, 머신러닝 / 딥러닝을 통한 추천 등등)의 추천 서비스가 존재한다. 이제는 너무나도 새롭고 신기할 정도의 서비스가 아닌 주변에 친숙하게 우리의 일상생활을 함게하고 있다.


추천 시스템을 학습하다보니, 가장 기본이 되는 한 방법론에 대해서 이야기 하려고 한다.


"Matrix Factorization ; 행렬 분해"


행렬을 분해한다?

예를 들어보자. 10*10 행렬이 있다. 이를 10*3 행렬 두개로 나눌 수 있는가?

수학적으로 가능하지 않다.


하지만, 10*3 두 행렬을 이용해서 10*10 행렬과 유사한 결과를 만들어 낼 수는 있다.


그렇다면 굳이 왜? 핼렬분해를 이용해서 추천을 위한 시스템을 만드는 방법을 사용하는 것일까?

이유는 간단하다.


"사용자와 아이템은 계속해서 늘어가고 행렬 내부의 공간은 계속해서 많은 공간을 요구한다."


10*10 행렬은 100 공간을 요구한다.

100*100 행렬은 10000 공간을 요구한다.


이렇게 늘어가는 공간에 고작 의미있는 값이 들어가는 경우는 극히 적을 것이다. 사용자와 아이템의 Interaction은 매우 희박하다.(상대적으로)


다순히 Matrix Factorization이 추천 결과를 만들어 내는 것은 아니다.

앞으로 코드를 통해서 추론에 필요한 결과 벡터는 통해서 사용자별 추천 결과를 만들어 낼 수 있을 것이다.


중요한 것은, 

왜 Matrix Factorization을 사용하고 어떠한 경우에 필요한지 파악하고 자신의 데이터의 성격을 이해하는 것이다.


나는

1. 행렬분해를 이용해서 어떻게 사용자와 아이템의 특징을 파악하고(힌트는 오코인코더),

2. 학습 결과를 통해 추론(추천 결과물)하는 방법

에 대해서 다음 포스티에서 다뤄보려고 한다.


끝.


P.S. 텐서플로 2.0 + 케라스에 대한 기본적인 이해가 필요 할 수 있다.

작가의 이전글 Git: folk, Pull Request.
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari