본문 바로가기

추천 시스템/Collaborative Filtering

BPR-MF(Bayesian Personalized Ranking MF)

아래의 논문과 블로그를 참고했다.

 

논문: Modified Bayesian personalized ranking for non-binary implicit feedback

블로그: http://sanghyukchun.github.io/95/

https://itkmj.blogspot.com/2019/08/bpr-bayesian-personalized-ranking-from.html

 

 

BPR은 상품간의 선호도를 확률 모형화를 한 모델이다. BPR은 개인이 선호하는 상품을 단계별로 카테고리화하여 분석을 진행한다(Positive items: 긍정적 상품/ Negative items: 부정적 상품)

이런 BPR을 MF로 확장하고 있다.

BPR-MF

 

특징

BPR에서 상품을 분류할 때, 사용자가 상품에 대한 내재적 피드백을 제공했는지 안했는지의 정보만을 이용한다.이 때문에 정보의 손실이 발생할 수 있다.  하지만 기존의 추천시스템 기법과 비교해 우수한 성능을 보인다.

이런 단점을 보완하기 위해 피드백의 확실함 정도를 함께 고려하는 MBPR(Modified Bayesian personalized ranking: 변형 베이지안 개인화 순위 방법)이 있다. 

 

* 내재적 피드백: 거래수, 클릭수, 감상내역...

 

 

조건

BPR은 totality, antisymmetry, transitivity을 만족한다고 가정한다.

 

 

BPR(Bayesian personalized ranking)

모형

 

먼저 상품을 개인의 선호도로 카테고리화를 한다. 카테고리화 하는 방법은 간단하게 피드백의 여부로 나뉜다.

내재적 피드백을 $r_{ij}$라고 하면,  r_{ij}>0이 관측된 (user-item)집합을 $S :=$ {$(u,i) \in U \times I: r_{ui}>0$}이라고 정의한다.

여기서  $r_{ij}$>0(피드백을 받은 item)들의 집합을 $I_{u}^{+}$(positive items) $:=${ $i \in I : (u,i)\in S$}이고,  $r_{ij}$<0인 item의 집합은  $I_{u}^{-}$(negative items)로 둔다.

결과적으로 집합 $D_s$는 아래처럼 정의한다. (user, user가 내재적 피드백을 준 item, 피드백을 받지 못한 item)
$D_s :=$ {$(u,i,j), i \in I_{u}^{+}, j \in  I_{u}^{-}$}

 


즉, i는 피드백을 받은, j는 받지 못한 item이다.    
이 모형에서 i를 j보다 선호하는$(i \ge_{u})$  확률을 다음과 같이 정의했다.

$Pr(i \ge_{u} j)$ = $\sigma(y_{ui} - u_{uj})$

                                                                                *  $\sigma$: sigmoid function = $1 \over (1+exp(-x))$

 

sigmoid function

시그모이드 함수를 사용하면 $\sigma(x) + \sigma(-x) = 1$이 성립한다. 따라서 $Pr(i \ge_{u} j)$ + $Pr(j \ge_{u} i) = 1$이 된다.
  

여기서 피드백을 받지 않은 item의 rating을 예측하는 식은 다음과 같다.
$\hat{y_{ui}}$ = $\mu + b_u + b_i + p_{u}^{T}q_i$


$p_{u}^{T}q_i$ 자체만으로도 $\hat{y_{ui}}$이지만, 정확도를 높이기 위해 $\mu$(전체 평균 스코어), $b_{u}, b_i$(user, item에 대한 bias: user이 얼마나 평점을 후하게 주는지, item이 후하게 받는편인지..)를 수식에 추가한다.
  

각각의 user-item에 대한  $Pr(i \ge_{u} j)$을 정의했기 때문에 우리는 ranking에 대한 likelihood를 정의할 수 있다.
임의의 두 상품의 쌍 $(i,j)$가 주어졌을 때  $Pr(i \ge_{u} j)$는 베르누이 분포를 따른다고 할 수 있다.

더 자세히 설명하면, user가 상품 i보다 상품 j를 선호하는 확률 $P_{uij}$는 베르누이 분포$(P_{uij})$이며, 분포안에 들어가는 확률은 시그모이드라고 볼 수 있다.


또한,  $Pr(i \ge_{u} j)$와  $Pr(j \ge_{u} i)$가 독립이기 때문에 아래와 같은 조건부 로그우도(conditional log-likelihood)를 구할 수 있다.

우도 추정이란 표본값(x)들을 바탕으로 parameter를 추정하는 기법이다.

 

* 베르누이 분포: 결과가 성공 혹은 실패처럼 두 가지 중 하나만 나오는 경우

 

 

https://data-matzip.tistory.com/entry/%EC%9A%B0%EB%8F%84-%EC%B6%94%EC%A0%95?category=851533

1. likelihood(가능도)

user가 선호할 확률은 (item i를 선호할 확률) x (i를 선호하지 않을 확률)로 이뤄진다. 

 

 

2. log likelihood

계산을 쉽게하기 위해 로그를 취한다.

log를 취할때의 변화

log likelihood의 공식은 아래와 같다

 

 

3. regularization(정규화: $l_2$)항 고려

* $R_{uij}$(θ)= {$\lambda_b(b_{i}^{2} + b_{j}^{2})$ + $\lambda_u||P_u]]^{2}$ + $\lambda + ||q_i||^2 + \lambda - ||q_j||^2$}

최종적인 정규화된 조건부 로그우도를 최소화해서 모델을 전개한다.

 

 

 

SGD(Optimizer)

최소화 하기 위해 SGD로 구현한다. BPR은 $D_s$의 수가 너무 많아서 일반적인 SGD를 사용하는게 아니라 adapted sampling 방식을 사용하는게 훨씬 효과적이다.

 

$D_s$에서 하나의 (u,i,j)를 무작위 샘플링하고 샘플링된 (u,i,j)에 관한 매개변수를 업데이트(SGD 적용)를 한다. 샘플링을 취할 때 더 많이 사용자들이 관측하거나 좋아한 데이터를 위주로 샘플링을 한다.

 

아래는 각각의 매개변수를 업데이트 한 결과이다. 각 미분에 대해서는 생략하도록 하며, 공식을 전개(미분 전개)했을 때 아래와 같이 나온다.

SGD