본문 바로가기

Research

Neural News Recommendation with Multi-Head Self-Attention

뉴스 기사가 하도 많아서 유저가 흥미를 가질만한 뉴스를 추천해주는 시스템이란게 생겼다. Photo by Rishabh Sharma on Unsplash

뉴스 추천을 할 때 몇몇 중요한 관측들이 있었다. 먼저, 워드 간의 관계가 뉴스를 이해하는데 중요했다. 하나의 단어든 여러 개의 단어들과 연결될 수 있다. 다음으로, 같은 유저로부터 탐색된 다른 뉴스기사들이 서로 관계가 있을 수 있다. 마지막으로 다른 단어들은 뉴스를 표현하는데에 있어 각기 다른 중요도를 갖는다는 것이다. 또한, 어떤 유저가 본 뉴스 기사들은 그 유저를 표현함에 있어 각기 다른 중요도를 갖는다.

따라서, 우리는 뉴럴 뉴스 추천 시스템을 멀티 헤드 어텐션을 이용해 구축하였다. 이는 뉴스 인코더와 유저 인코더로 구성되어 있고, 뉴스 표현형을 뉴스 제목으로부터 단어들 간의 관계를 모델링 하기 위해 멀티 헤드 셀프 어텐션을 이용해 배웠다. 유저 인코더의 경우 그들이 탐색한 결과를 이용해 그들 간의 관계를 멀티 헤드 셀프 어텐션을 이용해 유저의 표현형을 학습하였다. 우리는 더하는 방식의 어텐션을 뉴스와 유저 인코더 모두 적용하여 뉴스 표현형과 유저 표현형을 모델링할 때 더 중요한 단어와 뉴스를 선택하는 방법을 배웠다.

방법

뉴스 인코더는 뉴스 표현형을 뉴스 제목으로부터 배우기 위해 학습했다. 이는 총 3개의 레이어로 구성되어 있다. 첫 번째 레이어는 워드 임베딩으로 워드 시퀀스인 뉴스 제목을 저차원 벡터의 시퀀스로 변환시킨다. $M$개의 단어로 구성된 뉴스 제목을 $[w_1, ..., w_M]$이라고 하면 이 레이어는 이를 변환시켜 벡터의 시퀀스 $[\mathbf{e}_1, ..., \mathbf{e}_M]$을 만든다. 두 번째 레이어는 워드 단위 멀티 헤드 셀프 어텐션 네트워크이다. 워드 간의 상호 작용은 뉴스 표현형을 배움에 있어 중요하다. $k$번째 어텐션 헤드로 인해 배우는 $i$번째 단어의 표현형은 다음과 같이 계산된다.

$$\alpha_{i,j}^{k} = \frac{ \exp (\mathbf{e}_i^T \mathbf{Q}_k^w \mathbf{e}_j) }{ \sum_{m=1}^M \exp (\mathbf{e}_i^T \mathbf{Q}_k^w \mathbf{e}_m) }$$

$$\mathbf{h}_{i,k}^w = \mathbf{V}_k^w ( \sum_{j=1}^M \alpha_{i,j}^k \mathbf{e}_j )$$

여기서 $\mathbf{Q}_k^w$와 $\mathbf{V}_k^w$는 $k$번째 셀프 어텐션을 위한 사영 파라미터이고 $\alpha_{i,j}^k$는 $i$번째 단어와 $j$번째 단어의 상대적 중요도를 의미한다. $i$번째 단어의 멀티 헤드 표현형은 $h$개의 분리된 셀프 어텐션 헤드에서 나온 표현형을 이어 붙여 나타낸다. $\mathbf{h}_i^w = [\mathbf{h}_{i,1}^w; ...; \mathbf{h}_{i,h}^w]$ 마지막 레이어는 더하는 형태의 워드 어텐션 네트워크이다. 같은 뉴스에 있는 서로 다른 단어들은 뉴스를 표현할 때 중요한 정도가 다를 수 있다. $i$번째 단어의 어텐선 가중치는 다음과 같이 계산된다.

$$a_i^w = \mathbf{q}_w^T \tanh (\mathbf{V}_w \times \mathbf{h}_i^w + \mathbf{v}_w) $$

$$\alpha_i^w = \frac{\exp (a_i^w)}{ \sum_{j=1}^M \exp (a_j^w) }$$

여기서 $V_w$와 $v_w$는 사영 파라미터를 의미하고 $q_w$는 쿼리 벡터를 의미한다. 뉴스에 대한 표현형은 가중치를 고려한 합으로 나타내어진다.

$$\mathbf{r} = \sum_{i=1}^M \alpha_i^w \mathbf{h}_i^w $$

유저 인코더는 그들이 탐색한 뉴스로부터 유저 표현형을 학습한다. 이것은 두 개의 레이어로 구성된다. 첫 번째는 뉴스 단위 멀티 헤드 셀프 어텐션 네트워크이다. 대게 같은 유저가 탐색한 뉴스 기사는 서로 관계가 있다. $k$번째 어텐션 헤드로부터 학습된 $i$번째 뉴스의 표현형은 다음과 같다.

$$\beta_{i,j}^k = \frac{ \exp (\mathbf{r}_i^T \mathbf{Q}_k^n \mathbf{r}_j) }{ \sum_{m=1}^M \exp (\mathbf{r}_i^T \mathbf{Q}_k^n \mathbf{r}_m) }$$

$$\mathbf{h}_{i,k}^n = \mathbf{V}_k^n ( \sum_{j=1}^M \beta_{i,j}^{k} \mathbf{r}_j )$$

이는 뉴스 인코더에서의 멀티 헤드 셀프 어텐션과 같으며 이들을 마지막에 이어붙여 $i$번째 뉴스에 대한 표현형을 생성한다.

$$\mathbf{h}_{i} = [ \mathbf{h}_{i,1}^n; ...; \mathbf{h}_{i,h}^n ]$$

두 번째 레이어는 뉴스 인코더에서의 세 번째 레이어와 동일하다.

$$a_i^n = \mathbf{q}_n^T \tanh (\mathbf{V}_n \times \mathbf{h}_i^n + \mathbf{v}_n) $$

$$\alpha_i^n = \frac{\exp (a_i^n)}{ \sum_{j=1}^M \exp (a_j^n) }$$

여기서 $V_n$와 $v_n$는 사영 파라미터를 의미하고 $q_n$는 쿼리 벡터를 의미한다. 뉴스에 대한 표현형은 가중치를 고려한 합으로 나타내어진다.

$$\mathbf{u} = \sum_{i=1}^N \alpha_i^n \mathbf{h}_i^n $$

클릭 예측 모듈은 후보 뉴스들에 대해 어떤 유저가 클릭할 확률을 예측한다. 클릭 확률 점수 $\hat{y}$는 유저 표현형과 뉴스 표현형의 내적으로 구한다. $\hat{y} = \mathbf{u}^T \mathbf{r}^c$ 다른 형태의 스코어 계산 방법도 이용해보았지만 성능이나 계산 측면에서 내적이 가장 유리했다.

학습

우리는 음성 샘플 기법을 이용했다. 유저에 의해 탐색되는 각 뉴스들에 대해, 우리는 무작위로 같은 인상을 주지만 유저에 의해 클릭되지 않은 $K$개의 뉴스를 샘플링했다. 우리는 이 뉴스들의 순서를 섞었다. 이제 원래 클릭한 뉴스와 $K$개의 음성 샘플 뉴스에 대해서 스코어를 계산한 것을 $\hat{y}_+$와 $[\hat{y}_1^-, ..., \hat{y}_K^-$라고 하자. 이 스코어들은 정규화되어 양성 샘플에 대한 사후 클릭 확률을 계산하게 된다.

$$p_i = \frac{ \exp (\hat{y}_i^+) }{ \exp (\hat{y}_i^+) + \sum_{j=1}^K \exp (\hat{y}_{i,j}^-) }$$

우리는 뉴스 클릭 예측 문제를 $K+1$ 클래스 분류 문제로 재구성했고, 모델 훈련을 위한 손실 함수는 모든 가능한 샘플 $\mathcal{S}$에 대한 로그 가능도를 최대화하는 것이 된다.

$$\mathcal{L} = - \sum_{i \in \mathcal{S}} \log (p_i)$$