목록Recommendation/모델링 (7)
내가 보려고 만든 블로그

Auto Encoder Auto Encoder 느 input을 output이 모방하도록, input = output이 되도록 학습시키는 방법이다. 똑같은 output을 만들어내는 과정에서 학습된 latent vector를 사용하는 것으로. MF와 매우 유사하지만 비선형적으로 latent vector를 학습시키는 방법이라고 볼 수 있다. 추천에서는 user가 Item들에 대해 보인 implicit 정보를 다시 그대로 복원하도록 하는 방식으로 학습을 시킨다. CDAE ( Collaborative Denoising Autoencoder) 기존 autoencoder 모델과 같이 input을 그대로 복원하는 모델이나 의도적으로 input에 noise를 추가하는 방식이다. 예를 들어 , input = [1,0,0,..

이전 포스팅까지는 User X Item 간의 interaction 을 바탕으로 어떠한 latent matrix 혹은 latent vector를 얻는 방식으로 추천을 하는 방법에 대하여 주로 다루웠다. 하지만 추천을 함에 있어 interaction만을 고려한 방법 외 에 기존에 머신러닝모델에서 많이 사용하던 형태로예를 들어 , ( 성별 , 국가 , 연령대 ) 등을 정보로 넣어 추천을 해줄 수 도 있을 것이다 .모델을 4개나 다루기 때문에 하나의 포스팅에서 설명하기엔 조금 복잡하지만 각각의 모델이 다른 모델을 바탕으로 발전해 나간 모델이기 때문에 한번에 적는게 흐름상 좋을 것 같다고 생각하였다.모델 구현 같은 경우에는 FM와 DeepFM을 다른 분 들이 구현한 것을 참고로 작성하였는데 다른 분들이 FM 형태..

기존에 MF 방법의 경우 관찰되지 않은 평점을 예측하고 높은 평점을 기록한 상품에 랭킹을 매기는 방식으로 유저에게 상품을 추천하는 방식을 사용하였다. 하지만 , 이러한 방법에는 2가지 문제점이 있다. 먼저 , 유저가 좋아하는 상품에 랭킹을 매기는 문제를 평점으로 접근을 하는 것이 과연 옳은 접근법인가? 두번째로, 실제 유저에게 추천을 할 때 1,2,3,4,5 정도까지의 랭킹이 중요할텐데 MSE등을 통해 평가를 한다면 상위 랭킹이 아닌 유저가 선호한다고 볼 수없는 순위인 20등, 21등 .... 등의 상품에 대해서도 MSE 값을 줄이기 위해 모델이 동작하게 되므로 모델의 효율성이 떨어진다. 이러한 점을 해결하기 위해 나온것이 바로 Bayesian Personalized Ranking 이다. BPR에서는 i..
MF 랑 Biased_MF 구현하였다. 1. 토치로 구현하였고 옵티마이저는 Adam 사용, ALS는 나중에 2. 특별한건없구 Biased_MF의 경우 구현할때 biased 텐서를 유저, 아이템 각각에 대해 생성해주고 만들어진 Reconstruction 에 더해주는 방법으로 쉽게 구현할수 있다. 코드는 요기 https://github.com/todtjs92/Search_and_Recommendation/tree/master/MF
Collaborative Filtering , 너무 유명한 모델이라 자세한 설명은 생략. 코드 구현은 깃에 올려둠 https://github.com/todtjs92/Search_and_Recommendation/tree/master/basic_cf 1. 데이터셋은 네이버 영화 데이터셋으로 했고 용량이커서 따로 구글드라이브 링크 올려둠. 2. 구현은 numpy로 했고 , user_mean으로 정규화 하는 방식으로 구현하였음. 3. Item Cf는 Transpose한 형태라 패스하였음.
추천에서 나름 유명한 프레임웤인 Surprise. 토치로 구현하느라 많이 써보진 않았는데 어쩌다 사용할 기회가 생겨 모듈들 간단하게 정리해봄. surprise.Dataset.load_from_file(file_path , reader=reader) surprise.Reader 토치의 Dataloader 같은 클래스임. args 에 reader가 들어가는데 아래처럼 surprise.Reader 에 데이터 형태에 맞춰서 line_format에 넣주면 알아서 파싱해준다. reader = Reader(line_format='user item rating timestamp', sep=',', skip_lines=1) ratingsDataset = Dataset.load_from_file(self.ratingsP..