ELMo: Deep contextualized word representations 요약


NLP에서 핫한 ELMo에 대해서 리뷰해보려고 한다. ELMo는 BiLSTM을 이용하여 간단하게 semantic과 syntactic한 단어의 정보를 유지하고 또한 문맥상에서 이를 어떻게 적용할 수 있는지에 대해 말하고 있다. 이는 다른 word representation에 부착하여 6개의 대형 NLP 문제에 대해서 성능을 향상시켰으며, QA를 포함하여 언어 관계, 문맥 분석 등에 영향을 끼쳤다.

먼저, ELMo는 각 토큰이 하나의 representation에 맵핑되는 기존 단어 임베딩과는 다르게 전체 문장에 기반하여 작동한다. 이는 coupled language model에 기반하여 BiLSTM을 통해 생성되는데, 이러한 이유에 따라 ELMo(Embeddings from Language Models)이라고 부른다. 이전 단어 임베딩과는 다르게 BiLSTM 층들의 기능들을 이용한다. (기존 Deep BiLSTM 아키텍처는 최종 layer의 값을 이용하는 경우가 대다수) 이러한 이유는 높은 layer의 LSTM일 수록 단어의 의미가 문맥 의존적인 성향을 갖고 있었으며, 낮은 layer일수록 문법적인 성향을 갖고 있기 때문이다.

따라서, 이 논문에서는 각 task마다 더 좋은 performance를 보이도록 각 layer의 비율을 구하여 비율에 따른 layer를 합쳐 word representation으로 사용한 것이 핵심 아이디어라고 볼 수 있다.

장점으로는 우리가 nlp로 다루고 있는 문제들인 textual entailment (언어적 인과관계 유추), question answering (질의응답), sentiment analysis (감정 분석)과 같은 문제에 쉽게 적용할 수 있다는 점이다. ELMo 표현을 더하는 것만으로 모든 케이스에서 더 좋은 성능을 보여주었으며, 20% 가량의 상대 오차도 줄이는 것을 확인하였다.

그렇다면 이러한 ELMo 표현이 어떻게 만들어지는지 확인해보도록 하자.

먼저 ELMo 단어 표현은 전체 입력 문장에 대한 함수들이다. 이 함수는 character convolution과 함께 두 층의 Bi-LSTM의 top layer로 계산된다. 이들은 큰 scale에서 미리 학습되며, semi-supervised learning을 통해 학습된다. 또한 쉽게 NLP 아키텍쳐에 결합할 수 있다.

1) Bidirectional Language Models

주어진 문장이 N개의 token으로 이루어져 있을때, $(t_1, t_2, ... t_N)$ forward language model은 $(t_1, t_2, ..., t_k)$에 대해 $t_k$의 확률을 모델링함으로써 문장의 확률을 구한다.

$$p(t_1, t_2, ... t_N) = \sum^N_{k=1} p(t_k|t_1, t_2, ..., t_{k-1}) $$

최근 좋은 성능을 보여주는 언어 모델들은 Bi-LSTM을 통해 문맥과는 독립적인 token 표현 $x^{LM}_k$을 만들어낸다. 그후 forward LSTM을 통해 L개의 layer를 통과시킨다. 각 token의 위치 k에서, 각 LSTM layer는 문맥에 의존되는 표현 $\overrightarrow{h}^{LM}_{k,L}$을 생성시킨다. 이 때, $j = 1, ..., L$이다. LSTM layer의 가장 최상위층 output인 $\overrightarrow{h}^{LM}_{k,L}$은 softmax layer를 통해 다음 토큰인 $t_{k+1}$을 예측하는 데에 사용한다.

backward LM 역시 forward LM과 비슷한데, 그 차이점은 문자열을 거꾸로 돌려 작동한다는 점에 있다. 즉 현재 token보다 미래에 나오는 token들을 통해 이전 token들을 예측하는 메커니즘이다.

$$p(t_1, t_2, ... , t_N) = \sum^N_{k=1} p(t_k | t_{k+1}, t_{k+2}, ... , t_N) $$

이것은 또한 주어진 $(t_{k+1}, ... ,t_N)$에 대하여 $t_k$의 표현인 $\overleftarrow{h}^{LM}_{k,j}$를 예측한다.

BiLM은 forward LM과 backward LM을 모두 결합한다. 다음의 식은 정방향 / 역방향의 log likelihood function을 최대화시킨다:

$$\sum^N_{k=1} ( log p(t_k|t_1, ... , t_{k-1}; \theta_x, \overrightarrow{\theta}_{LSTM}, \theta_s) + log p(t_k|t_{k+1}, ... , t_{N}; \theta_x, \overleftarrow{\theta}_{LSTM}, \theta_s) ) $$

여기서 token 표현 $\theta_x$와 softmax layer $\theta_s$의 파라미터를 묶었으며, 각 방향의 LSTM의 파라미터들은 분리시킨 채로 유지하였다. 여기서 이전 연구들과 다른 점은 파라미터들을 완전히 분리하는 것 대신에 방향 사이에 일정 weight를 공유하도록 하였다.

2) ELMo

ELMo는 biLM에서 등장하는 중간 매체 layer의 표현들을 특별하게 합친 것을 의미한다. 각 토큰 $t_k$에 대하여, L개의 layer인 BiLM은 2L+1개의 표현을 계산한다.

$$R_k = \{x^{LM}_k, \overrightarrow{h}^{LM}_{k,j}, \overleftarrow{h}^{LM}_{k,j} | j = 1, ..., L\}$$
$$R_k = \{h^{LM}_{k,j} | j = 0, ... ,L \} $$

이 때, $h^{LM}_{k,0}$은 token layer를 뜻하고, $h^{LM}_{k,j} = [\overrightarrow{h}^{LM}_{k,j}; \overleftarrow{h}^{LM}_{k,j}]$는 biLSTM layer를 의미한다. 그래서 모든 layer에 존재하는 representation을 R로 single vector로 혼합하는 과정을 거친다:
$$ELMo_k = E(R_k;\theta_e)$$
예시로, 가장 간단한 ELMo 버전은 가장 높은 layer를 취하는 방법이 있다: $E(R_k) = h^{LM}_{k,L}$.

이 ELMo는 task에 맞게 또 변형될 수 있다.

$$ELMo^{task}_{k} = E(R_k;\theta^{task}) = \gamma^{task}\sum^L_{j=0} s^{task}_j h^{LM}_{k,j}.$$

$s^{task}$는 softmax-normalized weight를 의미하고 $\gamma^{task}$는 task model을 전체 ELMo vector의 크기를 조절하는 역할을 맡는다.

어떤 의미인지 그림을 통해 살펴보도록 하자.


해당 그림과 같이 각 Bi-LSTM Layer들을 통해 나오는 hidden representation을 task의 비율에 맞추어 더해 ELMo vector를 만드는 것이다.

즉 과정을 다시 정리해보면
(1) BiLSTM layer의 꼭대기층의 token이 softmax layer를 통해 다음 token을 예측하도록 훈련시킨다.
(2) 훈련된 BiLSTM layer에 input sentence를 넣고 각 layer의 representation 합을 가중치를 통해 합한다.
(3) input sentence length만큼 single vector가 생성된다.

3) Using biLMs for supervised NLP tasks
이렇게 pre-trained된 biLM과 NLP task를 위한 supervised architecture를 결합하여 task model의 성능을 향상시켰다. 이 때, 이 논문에서는 이 representation의 선형 결합을 다음과 같이 학습시켰다.

(1) 먼저 biLM없이 supervised model의 가장 낮은 layer를 고려했다. 대부분의 supervised NLP model은 가장 낮은 층에서 공통적인 architecture를 공유한다. 따라서 이는 ELMo를 쉽게 붙일 수 있는 계기가 되었다. 주어진 sequence $(t_1, ... t_N)$에 대해 pre-trained token representation인 $x_k$를 사용했으며 때때로 문자 기반 representation을 사용하는 것이 NLP task의 대부분이였다. 이 때, bi-RNN이나 CNN, feed forward network를 통해 context에 의존적인 representation $h_k$를 만드는 것이 NLP task에서 주로 하는 작업이였다.

(2) 따라서 supervised model에 ELMo를 부착하기 위해 biLM의 가중치값을 고정시키고 ELMo vector인 $ELMo^{task}_k$를 token representation $x_k$와 결합시켜 다음과 같은 $[x_k; ELMo^{task}_k]$ representation을 생성하였다. 이 representation은 context-sensitive representation $h_k$를 만들기 위한 input으로 사용된다.

(3) 마지막으로 ELMo에 dropout을 설정하는 것이 더 좋다는 것을 알았으며, 때때로 $\lambda ||w||^2_2$와 같은 regularization factor를 더하는 게 좋아 몇몇 케이스에서는 regularization을 생성하였다.

4) Evaluation


(1) 질의 응답 (Question Answering)
Stanford Question Answering Dataset (SQuAD) task는 크라우드소싱을 통해 질의-응답 페어를 포함하는 task를 이용하여 질의 응답 문제를 해결하는 것이다. 이 논문에서 사용된 baseline model은 (Clark and Gardner, 2017)로 Bidirectional attention component에 self-attention layer를 추가한 아키텍쳐이며, GRU와 pooling operation을 더해 만들어졌다. ELMo를 더해주면서 F1-score가 81.1%에서 85.8%로 증가한 것을 확인할 수 있었다. 위의 표에서 나오는 Previous SOTA와 our baseline 값이 다른 이유는 공개된 open source가 없어 본 논문에서 직접 구현한 것으로 보인다.

(2) 텍스트 함의 (textual entailment): X면 Y이다와 같은 entailment를 추론하는 task
Stanford Natural Language Inference (SNLI) corpus는 550K개의 가설/전제를 제공하는 corpus이다. 본 논문에서는 (Chen et al., 2017)의 아키텍처를 이용하여 baseline을 만들었으며, biLSTM을 이용하여 가설과 전제를 encoding하고 matrix attention layer를 이용해 attention 방법을 적용시킨후 inference layer를 통해 추론, 그 후 또 다른 biLSTM 추론 composition layer를 거친후 마지막으로 pooling 단계를 거친다. ELMo를 통해 평균 0.
7%의 성능을 향상시켰다.

(3) 의미역 부착 (semantic role labeling): BIO로 태깅된 의미역들을 이용해 문장에서 각 token들이 어떠한 의미적 역할을 갖고 있는지 분류하는 작업.
SRL을 평가하기 위해 해당 논문에서는 (He et al., 2017)의 아키텍처를 이용했으며, 8개 층의 deep biLSTM을 통해 추론하는 작업이다. 약 3.2%의 성능 향상을 보여주었다.

(4) 상호참조해결 (Coreference Resolution): 각 멘션들이 서로 같은 개체를 나타내고 있는지 클러스터링 하는 작업
Coreference Resolution은 실제 같은 세계 개체들을 참조하는 멘션들을 묶어주는 작업이다. 이 곳에서는 baseline model로 end-to-end model인 (Lee et al., 2017: 제가 리뷰했던 논문입니다..헷)을 이용하였으며, f1 score가 67.2%에서 70.4%로 성능을 향상시켰다.

(5) 개체명 추출/ 개체명 인식 (Named Entity Extraction / Named Entity Recognition): 텍스트에서 멘션 개체를 찾고 해당 개체가 어떠한 type을 갖는지 분류하는 작업.
본 논문에서는 CoNLL 2003 NER task의 corpus를 사용한 (Peters et al., 2017)의 아키텍처를 사용했으며, 문자 기반 CNN 표현과 두 개의 biLSTM layer와 CRF를 이용하여 CNN-biLSTM-CRF 아키텍쳐를 구성하여 분류하는 모델을 사용했다. 해당 Peters et al의 논문에서는 오직 top biLM layer만 사용했지만 본 논문에서는 biLM layer의 모든 weight의 평균을 학습하도록 하였다. 약 2%의 성능 향상을 보여주었다.

(6) Sentiment Analysis (감성 분류)
SST-5의 task는 movie review로 부터 총 5개의 label를 분류하는 작업이다 (very negative, negative, neutral, positive, very positive). 본 논문에서는 (McCann et al., 2017)의 BCN (biattentive claaification network)를 사용하였으며, CoVe를 사용했는데 Cove를 ELMo로 대처하여 1%의 성능 향상을 보여주었다.

5) Analysis

(1) regularization strength

표에 보이는 그대로 regularization factore의 크기에 따라 위와 같다고 한다.

(2) ELMo의 위치
ELMo의 위치에 따라 performance의 상승률이 조금씩 달랐다. 위치란 token representation을 넣을 때 그대로 concatenate해서 넣어주거나 context-sensitive representation에 concatenate를 해서 넣어주는 것을 의미한다. 따라서 위의 표와 같이 input과 output에 동시에 넣어주는 경우는 SQuAD나 SNLI같은 경우 효율이 더 좋았으며 SRL같은 경우 input에만 넣어주는 것이 더 효율적이었다.

(3) ELMo에서 representation은 무엇을 내포하는가?

위의 표를 보면 금방 파악할 수 있다.
Table 5라고 적혀있는 것은 WSD (Word-Sense Disambiguation) task에 따른 performance 표이다. biLM의 first layer를 이용하는 것보다 Second layer를 이용하는 것이 더 성능이 좋았다. 이 뜻은 단어 중의성 해소에 더 적합하다는 이야기인데, biLM의 낮은 layer가 semantic한 정보를 잘 알아낸다는 것을 확인할 수 있다.
Table 6은 POS(Part-Of-Speech) task로 token의 품사를 확인하는 task이다. 이는 first layer가 second layer보다 성능이 좋은데, syntactic한 정보를 더 내포하고 있음을 이야기 하고 있다.


6) Appendix
http://allennlp.org/elmo에서 elmo를 이용할 수 있다.

댓글

가장 많이 본 글