월별 글 목록: 2017년 7월월

Matrix factorization 써보는 중

요즘 시스템에 matrix factorization 적용시켜 보는 중이다. Spark 상에서 러닝 돌려서 파라미터 피팅하고 한시간 주기로 배치 학습 해서 메모리에 모델 올려서 프로덕션 적용까지 시켰다. 근데 생각보다 CTR이 좋지는 않다.

몇 가지 개선할 점을 생각해 보고 있는데,

  • 학습 주기가 1시간이고 한 주기 학습에 20분정도 걸리는데 너무 느리다. 지금 우리 시스템은 1분 주기로 학습데이터가 업데이트 되는 시스템인데 많이 줄여야 할 거 같다. 줄이는 방법은 크게 두 가지가 있을 거 같은데,
  • 첫째, 학습 시작 할 때 matrix를 gaussian random으로 초기화 하는데 이걸 이렇게 멍청하게 하지 말고 전 epoch에서 학습된 데이터를 넣으면 더 적은 iteration으로 converge할 것 같다. 근데 지금 내가 사용하는 Spark Mllib엔 matrix 초기값 넣는 방법이 없음. Mllib 커스터마이징 해야할 거 같은데 일이 좀 커질 듯.
  • 둘째, 배치 말고 streaming data로 학습하기. 근데 이건 어떻게 해야할지 methodology를 잘 모르겠음. 혼자 대충 생각해보기로는 이미 user feature는 학습되어 있으니까, 실시간으로 rating 들어오는 거 가지고 item feature를 normal equation으로 구할 수 있을 거라 생각했는데 막상 생각해보니 나중에 배치로 학습한 거랑 결과값이 꽤 차이가 많이 난다. 이 정도 퀄리티면 프로덕션에 쓰기는 무리일 정도. online learning에 대한 논문을 좀 찾아봐야 겠음.
  • Matrix factorization with bias랑 temporal dynamics도 적용시켜보고 싶은데 이거 역시 spark 위에서는 구현이 안 되어 있음. 이거 구현해서 넣으면 spark 커미터 되는건가?

이런 단점에도 불구하고 추천 품질은 꽤 좋다. 댕댕이 좋아하시는 우리팀 기획자분 화면은 댕댕이 짤로 도배됨 ㅋㅋ