본문 바로가기

Programmer Jinyo/Machine Learning

추천 알고리즘 공부에 있어서 알아둬야 할 것들 정리.


투명한 기부를 하고싶다면 이 링크로 와보세요! 🥰 (클릭!)

바이낸스(₿) 수수료 평생 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

https://ko.coursera.org/lecture/sas-viya-rest-api-python-r/factorization-machines-for-recommendation-8V2LI

 

 

(*직관적인 이해를 위한 한줄.

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 잘 임베딩 한 후 서로의 유사 관계 분석.