인공지능, 자연어처리

[논문번역] Hierarchical Attention Networks for Document Classification

CoShin 2021. 7. 21. 14:20

Hierarchical Attention Networks for Document Classification

 

Abstract

우리는 문서 분류(Document Classification)을 위하여 계층적인 Attention Network를 제안한다. 우리의 모델은 두 가지 특징을 가지고 있다. (1) 우리의 모델은 계층적인 구조를 가지고 있는데 이 구조는 문서의 계층적인 구조를 모방하고 있다. (2) 우리의 모델은 두 레벨(단어단위, 문장단위)의 attention 메커니즘을 가지고 있다. 이러한 attention 메커니즘은 문서를 표현 할 때 중요한 내용과 덜 중요한 내용을 구분 할 수 있게 도와준다. tlfgjadms 6개의 큰 규모를 가지고 있는 text classification task에 대하여 진행하였고, 이전에 제안된 방법들보다 더 나은 성능을 보임을 입증하였다. Attention Layer의 시각화는 모델이 질적으로 유용한 단어와 문장을 선택한다는 것을 보여준다.

 

1. Introduction

문서 분류는 NLP에서 중요한 task이다. 문서 분류의 목적은 문서에 label을 할당하는 것이다. 이것은 토픽 라벨링, 감성 분류, 스팸 분류 등 다양한 분야에 적용 될 수 있다. 적은 문법적인 요소를 활용하는(e.g. N-gram) 전통적인 문서 분류의 접근은 선형 모델이나 kernel mathods를 사용한다. 더욱 최근의 접근은 CNN, RNN(LSTM)과 같은 Deep Learning을 사용한다.

 

신경망 기반의 문서 분류에 대한 접근이 꽤 효과적이지만, 본 논문에서는 문서 구조에 대한 지식을 모델의 구조에 통합함으로써 더 나은 표현을 얻을 수 있다는 가설을 제안한다. 우리 모델의 기본적인 직관은 문서의 모든 부분이 질의에 응답할 때 동등하게 관련이 있지는 않을 것이란 것이다. 그리고 관련이 있는 부분을 선택함에 있어서 모델은 단어 자체가 아니라 단어들간의 관계와 관련이 있을 것이다.

 

우리의 가장 중요한 기여는 새로운 신경망 모델인 "the Hierarchical Attention Network(HAN)"이다.

이 모델은 문서 구조에 대하여 두 가지 기본적인 구조를 포착 할 수 있도록 설계 되었다. 첫째, 문서는 계층적인 구조(문장-단어 그리고 문장-문서)를 가지고 있기 때문에, 우리는 이와 유사하게 우선적으로 문장의 표현을 만든 다음 그것을 문서 표현으로 취합하여 문서 표현을 구성한다. 둘째, 문서의 다른 단어와 문장들은 다르게 정보를 가지고 있을 것이란걸 관찰 할 수 있게 되었다. 게다가, 단어와 문장의 중요성은 문맥에 강하게 의존한다. 즉, 같은 단어 혹은 문장이더라도 다른 맥락이라면 그 중요도는 다를 수 있다. 이러한 요소를 민감하게 포함하기 위해서 우리의 모델은 두 레밸의 attention 메커니즘을 포함하고 있다. 하나는 단어 수준의 attention이고 다른 하나는 믄징 수준이다. 이러한 두 계층의 attention은 문서의 구조를 표현함에 있어서 개별적인 단어와 문장에 더 많이 혹은 더 적게 attention의 강도를 가질 수 있게 해준다.

Fig1은 1-5사이의 Rating 값을 할당하는 Yelp review의 예시이다. 직관적으로, 첫 번쩨와 세 번째 문장은 rating을 예측하는데 더욱 도움이 되는 정보를 가지고 있다. 이글듸 문장안에 있는 delicious, a-m-a-z-i-n-g은 더욱 긍정적인 태도의 리뷰임을 알려주고 있다. Attention은 두 가지 장점을 가져와 준다. 결과적인 성능에 도움을 주는 것 뿐만 아니라 분류를 결정할 때 단어와 문장이 기여하는 바를 직관적으로 제공함으로 결과를 분석함에 도움을 준다.

 

이전의 방법론들과 다른 핵심은 우리의 시스템은 task를 해결하기 위하여 토큰의 시퀀스를 단순히 활용하기 보다는 토큰에 대한 간단한 filtering을 취하여 문맥 정보(Context)를 활용한다는 것이다. 우리 모델의 성능을 평가하기 위하여 일반적으로 잘 알려진 다른 문서 분류 모델과 비교를 진행하였다. 이때, 6개의 데이터 셋을 이용하였다. 결과적으로 우리의 모델은 이전의 접근보다 더 나은 성능을 보였다.

   실험에 사용된 데이터 셋에 대한 정보Yelp reviews, IMDB reviews, Yahoo Anserwers, Amazon reviews

 

2. Hierarchical Attention Networks

Hierarchical Attention Network(HAN)의 전체적인 구조는 Fig2에서 볼 수 있다. 이것은 word sequence encoder,  word-level attention layer, sentence encoder, sentence-level attention layer로 구성되어 있다. 우리는 서로 다른 요소에 대하여 다음 섹션에서 자세히 설명한다.

 

2.1 GRU-based sequence encoder

GRU 도식 및 수식

GRU는 분리된 memory cell을 사용하지 않고 gating 메커니즘을 이용하여 sequence의 정보를 tracking 할 수 있다. GRU에는 두 가지 타입의 gate : \( the\, reset\, gate:\, r_t\, ,\, the\, update\, gate:\, z_t \)가 있다. 두 게이트는 어떻게 state의 정보를 업데이트 할지 함께 조절한다. \(time t\)에 대하여 새로운 state에 대하여 GRU는 다음과 같이 계산을 수행한다.

 

\[ h_t = (1-z_t) \odot h_{t-1} + z_t \odot \tilde{h}_t. \;\;\;\;(1) \]

 

이것은 이전 state \(h_{t-1} \)과 현재 새로운 시퀀스 정보를 가지고 있는 state \(\tilde{h}_t\) 사이의 선형보강법이다. \(gate \, z_t\)는 얼마나 많은 과거의 정보를 남겨 놓을지 그리고 얼마나 많은 새로운 정보를 더할지 결정한다. \(z_t \)는 다음과 같은 수식에 의하여 갱신된다.

 

\[  z_t = \sigma ( W_zx_t + U_zh_{t_1} + b_z , \;\;\;\; (2) \] 

 

이때 \( x_t\)는 \(time t\)의 sequence vector이다. Candidate state \( \tilde{h}_t  \)는 전통적인 RNN과 유사하게 계산된다.

 

\[ \tilde{h}_t = tanh(W_h x_t + r_t \odot U_h h_{t-1} + b_h ), \;\;\;\; (3)  \]

 

여기에서 \(r_t\)는 얼마나 많은 과거의 정보를 잊어버릴지 결정하는 reset gate이다. 만약 \(r_t\)가 0 이라면, 이전의 state를 완전히 잊어 버린다. reset gate는 다음과 같은 수식에 의하여 갱신된다.

 

\[ r_t = \sigma(W_rx_t + U_r h_{t-1} + b_r) \;\;\;\; (4)     \]

 

2.2 Hierarachical Attention

우리는 이번 논문에서 Document level의 classification에 집중하였다. Document에 L개의 Sentence가 있고 문장 \( s_i \)에는 \( T_i\)개의 단어가 있다고 가정한다. 이때 \( w_{it} \, with \, t \in [1,T]\)는 \(i_{th}\)문장의 단어를 의미한다. 제안된 모델은 문서를 벡터 표현으로 변환한다. 이때 벡터 표현은 classifier를 거쳐서 document classification을 하는 것에 활용된다. 이어지는 글에서는 단어 표현의 계층적인 구조를 이용하여 어떻게 document level의 vector표현을 만들어내는지 설명하겠다.

 

Word Encoder

\( Sentence \, with \, w_{it}, t \in [0,T] \)가 주어지면 가장 먼저 우리는 단어를 임베딩 행렬 \(W_e\)로 임베딩하였다.( \( i.e. \, x_{ij} = W_ew_{ij} .\) 그 이후 우리는 양방향 GRU를 이용하여 직접적인 단어와 문맥적인 정보를 요약하여 얻어진 새로운 단어 표현을 만들어 냈다. 

input은 직접적인 단어표현, output은 새롭게 만들어진 단어표현 (출처 : https://blog.floydhub.com/gru-with-pytorch/)

양방향 GRU는 forward GRU \( \overrightarrow{F} \)​는 \(s_i\)를 \(w_{i1}\)부터 \(w_{iT}\) 방향으로 읽고, backward GRU \( \overleftarrow{F} \)는 반대 방향인 \(w_{iT}\)부터 \(w_{i1}\) 방향으로 읽는다.

 

\[ x_{it} = W_ew_{it}, \; t \in [1, T],  \]

\[ \overrightarrow{h}_{it} = \overrightarrow{GRU}(x_{it}), \; t \in [1,T]   \]

\[ \overleftarrow{h}_{it} = \overleftarrow{GRU}(x_{it}), \; t \in [1,T] . \]

 

우리는 forward hidden state \(\overrightarrow{h}_{it}\)과 backward hidden state \(\overleftarrow{h}_{it}\)의 결합으로 만들어진 단어 \(w_{it}\)의 새로운 표현을 얻게 된다. 즉, \( h_{it} = [\overrightarrow{h}_{it}, \overleftarrow{h}_{it} ]\)는 \(w_{it}\)를 중심으로한 문장 전체의 정보를 요약해준다.

주목할 것은 우리는 직접적으로 word embedding을 이용하였다. 더욱 완성된 모델을 위해서는 캐릭터 레벨에서부터 word embedding을 사용 할 수 있을 것이다. 하지만 우리는 모델을 간단하게 하기 위하여 이 과정을 생략하였다.

 

Word Attention

문장에 있는 단어들은 모두 동등한 정도로 의미를 표현하는데 기여하지 않는다. 따라서 우리는 더욱 중요한 의미를 표현하는 단어를 추출하기 위하여 attention mechanism을 소개한다. 그리고 단어로부터 문장 벡터를 만들어 낼 때 이 것을 사용한다. 

\[ u_{it} = tanh(W_wh_{it} + b_w) \;\;\;\; (5) \]
\[ \alpha_{it} = \frac{exp(u_{it}^{T} u_w)}{\sum_{t} exp(u_{it}^{T} u_w)} \;\;\;\; (6) \]
\[ s_i = \sum_{t} \alpha_{it}h_{it}  \;\;\;\; (7) \]

 

즉, 우리는 처음으로 GRU를 통과한 단어 표현인 \( h_{it} \)를 다층퍼셉트론(MLP)의 input으로 사용하여 단어 표현의 은닉 표현인 \( u_{it}\)를 얻는다. 그리고 우리는 단어의 중요성을 단어 수준의 맥락 벡터 \( u_w\)와 \( u_{it}\)의 유사성으로부터 측정한다. 이렇게 측정된 중요성을 sofrmax function을 이용한 정규화하여 importance weight \( \alpha_{it} \)를 측정한다. 그 이후 우리는 문장 벡터 \(s_i\)를 단어 표현에 importance weight를 곱한 가중합을 계산한다.  맥락 벡터 \( u_w\)는 어떤 단어가 중요한 정보를 가지고 있는지를 network memory를 사용하여 높은 차원에서 보여준다. 맥락 벡터 \( u_w \)는 임의의 값으로 초기화되고 학습과정에서 함께 학습된다.

 

Sentence Encoder

주어진 문장 벡터 \(s_i\)로부터 우리는 유사한 방법으로 문서 벡터를 얻을 수 있다. 우리는 양방향 GRU를 이용하여 문장을 encoding한다.

 

\[ \overrightarrow{h}_i = \overrightarrow{GRU}(s_i), \; i \in [1,L],  \]

\[ \overleftarrow{h}_i = \overleftarrow{GRU}(s_i), \; i \in [L,1],  \]

 

우리는 \(\overrightarrow{h}_i\)와 \( \overleftarrow{h}_i \)를 concatenate하여 \( sentence \,i \)를 표현한다. 즉, \(h_i = [\overrightarrow{h}_i, \overleftarrow{h}_i] \)를 사용하는데 \(h_i\)는 \(sentence \; i \)를 중심으로 주변 문장들의 의미를 요약하는 것이다.

 

Sentence Attention

문장에 가중치를 부여하기 위한 단서는 올바르게 문서를 분류하냐는 것이다. 우리는 다시 attention mechanism을 이용하여 문장 레벨에서의 맥락 벡터 \(u_s\)를 소개한다. 그리고 이 벡터를 중요한 문장을 측정하는데 사용한다.

\[ u_i = tanh(W_sh_i + b_s) \;\;\;\; (8)  \]

\[ \alpha_i = \frac{exp(u_i^Tu_s}{\sum_{i}exp(u_i^Tu_s)}, \;\;\;\; (9)\]

\[ v =\sum_i \alpha_ih_i, \;\;\;\; (10)\]

 

\(vector \, v\)는 문서 벡터인데, 이는 문서 안에 있는 문장의 정보를 모두 요약한 벡터이다. 유사하게 문장 단위의 레벨의 맥락 벡터는 임의로 초기화 되고 학습 과정에서 학습 될 수 있다.

 

2.3 Document Classification

문서 벡터 \(v\)는 높은 차원의 문서 표현을 가지고 있으며 문서 분류에 이 특성을 사용 할 수 있다. 

\[ p = softmax(W_cv + b_c).\;\;\;\;(11)\]

 

우리는 negative log likelihood를 이용하여 training loss를 계산하였다.

\[ L = - \sum_{d}logp_{dj}, \;\; \text{where j is the label of document d} \;\;\;\; (12)  \]

 

3. Experiments

3.1 Data sets

우리는 본 논문의 모델의 성능을 6개의 문서 분류 데이터 셋을 이용하여 평가하였다. 이 데이터 셋들은 감성분류와 토픽 분류 두 종류로 나눠진다. Dataset에 대한 통계는 table1에 나와있다. 우리는 80% data를 training, 10% data를 validation, 남은 10% data를 test로 사용하였다.

   실험에 사용된 데이터 셋에 대한 정보Yelp reviews, IMDB reviews, Yahoo Anserwers, Amazon reviews
Dateset에 대한 통계정보

3.2 Baselines

우리는 HAN과 몇몇 baseline 방법들을 비교한다. Baseline 방법들은 선형방법론, SVM, 신경망, LSTM, word-based CNN, character-based CNN 그리고 Conv-GRNN, LSTM-GRNN이다. Baseline에 대한 결과는 Zhang(2015), Tang(2015)에 보고되어 있다.

 

3.2.1 Linear methods

선형 방법론 Zhang(2015),은 통계적인 특성들을 이용한다. 다항 로지스틱 회귀를 기반으로한 선형 분류는 통계적 특성을 이용하여 분류한다.

 

BOW and BOW+TFIDF

Training set으로부터 빈번하게 등장한 50000개의 단어가 선택되고 이 각 단어들의 출현 빈도를 특성으로 이요한다.

BOW+TFIDF는 이름에서 나온 것과 같이 TFIDF의 빈도를 특성으로 이용한다.

 

n-grams and n-grams+TFIDF

자주 등장하는 50000개의 단어에 대하여 최대 5-gram까지 사용하였다.

 

Bag-of-means

word2vec embedding의 평균을 특성으로 사용한다.

 

3.2.2 SVMs

Tang(2015)에서 보고된 SVM기반의 방법들은 SVM + Unigrams, Bigrams, Text Feartures, AverageSG, SSWE을 사용한다. Unigram과 Bigram은 각각 bag-of-unigram, bag-of-bigram을 이용한다.

 

Text Features

Text Feature는 Kiritchenko(2014)의 제안을 따라 구성되었다. 이는 word와 character n-grams, 감성 어휘의 특성 등을 포함하고 있다.

 

AverageSG

AverageSG는 word2vec에 의하여 embedding된 200차원의 단어 벡터의 평균을 이용한다.

 

SSWE

SSWE는 감성에 특화된 word embedding을 사용한다. 이는 Tang(2014)에서 보고되었었다.

 

3.2.3 Neural Network methods

신경망을 기반으로 한 방법론은 Zhang(2015)Tang(2015)에 보고되어 있다.

 

CNN-word

단어 기반의 CNN 모델은 『Yoon Kim. 2014. Convolutional neural networks for sentence
classification. arXiv preprint arXiv:1408.5882.』와 같은 모델을 사용하였다.

 

CNN-char

char level cnn 모델은 Zhang(2015)에 보고되어있다.

 

LSTM

LSTM은 모든 문서의 단일 sequence를 사용했다. 그리고 모든 단어의 hidden states의 평균을 분류를 위한 feature로 사용되었다.

 

Conv-GRNN and LSTM-GRNN

Conv-GRNN과 LSTM-GRNN은 Tang(2015)에서 제안 되었다. 그들은 계측적 구조를 연구하였는데, CNN과 LSTM은 문장 vector를 제공해주고 Gated Recurrent Neural Network(GRNN)은 document level vector표현으로 문장 vector를 결합시켜준다.

 

3.3 Model configuration and training

우리는 Stanford's CoreNLP를 이용하여 문서를 문장 단위로 나누었다. 그리고 우리는 5번 이상 등장하는 단어들만으로 사전을 구축하였고 5번 미만으로 등장하는 단어들은 특수한 토큰인 UNK token(Un-known token)으로 대체하였다. 우리는 비지도학습 방법인 word2vec을 이용하여 word embedding을 얻었다. 이를 word embedding의 초기화 값으로 사용하였다.

모델의 hyper-parameter는 validation set을 이용하여 튜닝하였다. 우리의 실험에서 word embedding은 200차원, GRU의 차원은 50차원을 사용하였다. 이 경우 forward, backward GRU가 concatenate되어 100차원의 단어/문장 표현을 사용하였다.

학습을 위해 우리는 64 size의 mini-batch를 사용하였고 길이가 유사한 문장들끼리 batch를 함께 묶어서 학습시켰다. 이러한 이유는 길이가 유사한 문장끼리 묶음으로 학습속도를 약 3배 가량 증가시킬 수 있기 때문이다. momentum을 0.9로 설정하여 stochasti gradient descent를 사용하여 학습하였으며 validation set에 대하여 성능이 가장 좋은 모델을 선택하였다.

 

3.4 Results and analysis

모든 데이터셋에 대한 실험 결과는 Table2에서 볼 수 있다.

실험결과

우리는 HN-{AVE, MAX, ATT} 세 가지 모델에 대하여 실험을 진행하였다. 여기에서 HN은 표준적인 Hierarchical Network이고, AVE는 평균을 MAX는 max-pooling을 ATT는 제안된 Hierarchical Attention Model이다. 결과를 보면 HN-ATT 모델이 모든 데이터 셋에 대하여 가장 좋은 성능을 보인다.

데이터의 크기와 상관없이 일관된 성능 향상을 보여주었다. Yelp2013, IMDB와 같은 작은 데이터셋에 대하여 3.1%와 4.1%의 성능향상을 보여주었다. 이것은 다른 커다란 데이터 셋에 대해서도 찾아 볼 수 있었다. 또한 task의 type(감정분류, 토픽분류)에 상관없이 이전의 모델들보다 더 나은 성능을 보여주었다.

계층적 모델이 아닌 신경망 모델이 다른 전통적인 모델들에 비하여 약간 더 나은 성능을 보여주었다. Attention이 아닌 오직 계층 구조(HN-AVE, MAX)의 영향에 대하여 살펴보면 다른 신경망보다 약간 더 나은 성능을 보였다.

 

3.5 Context dependent attention weights

단어가 내재적으로 중요하거나 중요하지 않은 경우라면, 모델은 attention mechanism 없이도 잘 동작 할 수 있다. 왜냐하면 모데은 자동적으로 덜 중요한 단어에 낮은 가중치를 부여하기 때문이다. 하지만 단어의 중요도는 문맥에 의존하는 경향이 강하다. 예를들어 'good'이라는 단어가 등장한 리뷰라고 하더라도 낮은 평점일 수 있는데 왜냐하면 'not'과 같은 부정어가 사용 될 수도 있기 때문이다. 우리의 모델은 문맥에 의존적인 단어의 중요성을 포착할 수 있음을 입증하였다. fig3(a)와 fig4(a)는 Yelp2013의 test data에 대하여 good과 bad의 attention weight의 그래프이다.  0~1사이의 attention score의 분포를 볼 수 있다. 이것은 다양한 문맥에서 문맥에 의존적인 attention weight를 포착하였음을 보여준다.

 

Sub-figure 3(b)~(f)와 4(b)~(f)는 평점 1~5점에서의 분포를 보여준다. 3(b)는 평점이 1점인 리뷰에서 good이 낮은 attention weight를 가지고 있음을 보여준다. 

 

3.6 Visualization of attention

우리의 모델이 문서에서 중요한 단어와 문장을 선택할 수 있다는 것을 검증하기 위하여, 우리는 Fig5와 Fig6같이 문서에서 계층적인 attention layer를 시각화 하였다. 모든 라인은 문장들이다. 빨간색은 sentence weight를 나타내고 blue는 word weight를 나타낸다. 계층적인 구조이기 때문에 우리는 단어의 weight를 문장별로 정규화하였고 단어와 문장의 weight는 중요도를 나타낼 수 있게 되었다. 

Hierachical Attention Network 시각화