목록Recommendation (10)
내가 보려고 만든 블로그
Bert를 Recommendation에 적용할 때 기존 BERT와의 차이점이 무엇인지 , 그리고 Bert4Rec의 Architecture에 대해 간단하게 적어봄. 1. Input 기존의 BERT의 경우 3가지 임베딩이 합쳐져 Input으로 들어가게 된다. 1. Token Embedding 2. Positional Embedding 3. Segment Embedding Token Embedding의 경우 말 그대로 해당 Token 을 Embedding으로 표현한 것 . Segment Embedding의 경우 문장을 구별하는 Embedding . 그리고 각 Token의 위치에 대한 Positional Embedding이 존재한다 . 추천에서 BERT를 적용할때 문장을 구별 , 즉 , user의 세션동안 반응..
Faiss는 페이스북에서 공개한 벡터 유사도를 검색해주는 프레임워크이다. 벡터 유사도 검색 외에 빠르게 k-means를 찾아 주는 등 여러 기능이 있다. 내부적으로 C++ 로 구현되어 있어 매우 빠르고 GPU 연산도 지원을 해준다. Latent Dimension = 5 인 임의의 벡터들중에서 가장 유사한 벡터를 찾는 예제 vector_index라는 객체를 만들어주고 sample_vectors 라는 hidden_dimension = 5인 100개의 벡터들을 색인해준다. import faiss latent_dimension = 5 vector_index = faiss.IndexFlatIP(latent_dimension) # latent dimension = 5 vector_index.add(sample_ve..
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개나 다루기 때문에 하나의 포스팅에서 설명하기엔 조금 복잡하지만 각각의 모델이 다른 모델을 바탕으로 발전해 나간 모델이기 때문에 한번에 적는게 흐름상 좋을 것 같다고 생각하였다. 모델 구현 같은 경우에는 MF와 DeepMF을 다른 분 들이 구현한 것을 참고로 작성하였는데 다른 분들이 MF..
기존에 MF 방법의 경우 관찰되지 않은 평점을 예측하고 높은 평점을 기록한 상품에 랭킹을 매기는 방식으로 유저에게 상품을 추천하는 방식을 사용하였다. 하지만 , 이러한 방법에는 2가지 문제점이 있다. 먼저 , 유저가 좋아하는 상품에 랭킹을 매기는 문제를 평점으로 접근을 하는 것이 과연 옳은 접근법인가? 두번째로, 실제 유저에게 추천을 할 때 1,2,3,4,5 정도까지의 랭킹이 중요할텐데 MSE등을 통해 평가를 한다면 상위 랭킹이 아닌 유저가 선호한다고 볼 수없는 순위인 20등, 21등 .... 등의 상품에 대해서도 MSE 값을 줄이기 위해 모델이 동작하게 되므로 모델의 효율성이 떨어진다. 이러한 점을 해결하기 위해 나온것이 바로 Bayesian Personalized Ranking 이다. BPR에서는 i..
SVD++ 은 다음과 같이 구현. 기존에 단순히 user * k (U) , k * item (I) 형태의 행렬로 분해하여 복원하는 방법에서 U를 implicit_matrix * I 형태로 한번 더 분해 해준다. 이런걸 A 최종적으로 복원되는 행렬 = implicit_matrix * I + U*I 로 구현됨. 구현은 요기 https://github.com/todtjs92/Search_and_Recommendation/tree/master/MF