투명한 기부를 하고싶다면 이 링크로 와보세요! 🥰 (클릭!)
바이낸스(₿) 수수료 평생 20% 할인받는 링크로 가입하기! 🔥 (클릭!)
Terms
http://hoondongkim.blogspot.com/2019/03/recommendation-trend.html
(https://ratsgo.github.io/machine%20learning/2017/04/08/apriori/ 참고함)
임의의 규칙을 만들어 낸다고 하자. 어떤 아이템 A를 산 사람이 B를 살 확률 같은 것을 만들어 낸다고 할 때, 그 규칙이 어떤 것이든지 다음의 지도(support), 신뢰도(confidence), 향상도(lift) 라는 세 가지 지표가 중요하다.
지지도 : A가 일어났을 때 B가 일어났다면 (A->B)
위의 가정을 얼마만큼 중요한 지표로(?) 생각해야 하는가? 에 대한 지표.
support(A) = P(A) 라고 한다.
신뢰도 : A와 B의 연관성에 대한 정도. (A에 대한 B의 연관성)
confidence(A->B) = P(A,B)/P(A)
향상도 : 어떤 규칙이 실제로 얼만큼 효용가치가 있는지 판별하는 지표.
lift(A->B) = P(A,B)/(P(A)*P(B))
Collaborative Filtering(CF)
어떤 사람1이 ABC를 좋아하고 다른 사람2가 BCD를 좋아한다면
사람 1에게는 D를 사람 2에게는 A를 추천해주는 기법.
Neighborhood model을 통해서 해결하는 방법.
위 수식은 피어슨 상관계수이다. 임의의 사람 X와 Y가 i라는 영화에 대해 어떻게 생각하는지에 따라서 계산되는 식이다. 얼만큼 유사한지를 분석할 수 있다.
피어슨 상관계수 식 자체가 조금 더 정확하게 설명 된 그림이다. -1~1의 상관계수를 가진다.
그럼 이 때 0 이상의 유사도를 가지는 다른 유저를 통해서 임의의 새로운 i에 대한 평가 결과를 예측해볼 수 있게 된다.
Matrix Factorization을 통해서 해결하는 방법.
자세한 설명은 아래 강의 링크
https://www.youtube.com/watch?v=9AP-DgFBNP4
강의 듣다가 이해 안갈까봐
세타(i)랑 x(j)랑 내적한 결과가 i번째 사람이 j에게 매긴 별점값이 되게 하고 싶은것.
y^(i,j) = j가 i에 매긴 별점.
x^(i) = i의 속성값.
j:r(i,j)=1 = j가i에 rate 한 것들 중 모든 j에 대해서 (그니까 i에 매겨진 모든 별점들)
위의 방법으로 미루어 볼 때, x가 주어지면 세타를 얻을 수 있고 세타가 주어지면 x를 얻을 수 있음을 보았다.
임의의 세타를 가지고 가장 좋은 x를 구하고 그 x로 세타를 구하고 .. (마치 gan 처럼) 그런 형식으로 쭉 구하다 보면 잘 된다고 한다.
매카니즘을 총 정리한 슬라이드다.
Item2Vec
마소에서 만든 방법이다.
https://arxiv.org/pdf/1312.6114.pdf
word2vec의 skip-gram과 유사한 방법을 통해 아이템을 벡터화 시킨 후, 그 결과를 가지고 CF를 적용시킨다.
아프리카 방송에서도 live2vec을 적용 했다고 한다.
Deep Neural Networks for YouTube Recommendations
http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/45530.pdf
영상의 임베디드 벡터를 가지고 사용자가 본 영상 내역을 평균냄.
또한 search token의 임베디드 벡터를 가지고 사용자의 검색 내역 또한 평균냄.
사용자의 지역정보 , 기기정보 등도 임베딩을 해서 이를 concat함.
해당 feature vector -> 1024 Fc + ReLU -> 512 Fc+ReLU -> 256 Fc+ ReLU 를 통해 마지막에 approximated된 topN개의 영상별 logistic 을 싹 - 구해주면 확률 나옴
(랭킹은 logistic 안걸어도 되긴 하지만 트레이닝 시에 걸어준다고 함)
Factorization Machine
* 내 비루한 기억력 때문에 잠시 쓸데없는 메모
로지스틱 함수 = 시그모이드 함수 / 로지스틱 리그레션에~ 쓰는 시그모이드 함수
poly1 model -> linear 함수 poly2 model -> 2차원 함수 / conjunction 결합, 접속사 등
*참고한 곳 https://www.youtube.com/watch?v=1cRGpDXTJC8
(*직관적인 이해를 위한 한줄.
1. 각 아이템의 속성, user의 속성 등을 대표하는 vector을 feature vector화 시킨다. (나이키 속성값 벡터, 옷 속성값 벡터, 신발 속성값 벡터, user 속성값 벡터)
2. 새로운 인풋이 해당 속성을 얼마만큼 대표하고 있는지 들어온다. ( 굿 )
3. feature간의 연관성은 feature 벡터끼리의 곱으로. 새로운 인풋은 해당 되는 벡터의 weight로써 곱해줌. )
문제 정의를 위와 같이 한다. 예측하기위한 s를 구하는 모델을 설계할 것 !
FM은 feature에 대해 latent vector을 배우게 된다.
위처럼 간소화하게 된다.
파라미터가 많아질 경우, 위와같은 식이 된다.
(x는 input이다. 위의 경우 해당되는 class는 1 아니면 0 따위의 수치일수도 있겠고, 아니면 시간이라면 얼마나 걸렸는가에 대한 입력일수도 있을 것이다.)
그렇다면 왜 이런식으로 쓰는게 좋을까?
만약 우리가 poly2model을 직접 전부 설계해서 파라미터화 한다고 생각 해 보자.
그럴 경우 위의 (엄청 많은) 파라미터들이 필요 할 것이다.
그 class의 조합으로 이루어지느 w들을 class마다의 latent vector을 설정해놓고 그 latent vector들간의 곱으로써 해결하려는 것이다.
결국 입력 x에 대해서 (각 label에 대한 지표들에 대해서) 파라미터 w와 v를 학습한 후에 y를 도출하는 것이다.
최근 딥러닝 트렌드
user vector 잘 임베딩하고
item vector 잘 임베딩 한 후 서로의 유사 관계 분석.