2018년 12월 17일 월요일

논문 설명 - ELMo : Deep contextualized word representations

Deep contextualized word representations (NAACL 2018)
ELMo : Embedding from Language Model


논문 링크 : https://arxiv.org/abs/1802.05365

요약 : 

기존의 Word2Vec, Glove 등에 비해 context 정보를 반영하는 향상된 Pre-training 방법 제시.
여러 층의 Bidirectional LSTM을 이용해 Language Modeling을 하며, 이 때 만들어진 hidden state들을 적절히 조합해 새로운 word representation을 만들어낸다.
새로운 representation을 여러 NLP Task들을 위한 Network의 입력 단에 concatenate(예를 들어 [Word2vec;ELMo]) 하면 여러 NLP Task들의 SOTA를 뛰어넘을 수 있다.


1. 서론

이 논문은 Syntatic, Semantic(문법적, 의미적) 정보를 잘 반영하며, 동음이의어 같은 문맥 정보를 잘 반영하는 word representation을 얻을 수 있는 pre-training 방법을 제시한다. ELMo를 통해 문장 내의 다른 단어들의 정보(context)를 반영하는 representation을 얻을 수 있다. 기존의 방법들과는 다르게 Top level의 LSTM 정보만을 이용하지 않고, 각 level의 hidden state들을 조합해서 새로운 단어 representation을 만들어 낸다.

2. 모델 구조 및 설명

Pre training을 위한 모델의 구조는 Jozefowicz et al.의 CNN-BIG-LSTM 구조를 사용했다고 한다. 이 모델의 구조는, LSTM timestep에 각 단어의 vector representation을 입력할 때, character-level CNN을 이용하며, 2 층의 LSTM Layer를 쓰는 구조이다. 그리고 LSTM과 LSTM의 사이에 projection layer가 들어가 있다.

2-1. Pre-training 단계

모델의 구조는 아래의 그림과 같다.
원본 출처 : http://hugrypiggykim.com/2018/06/08/elmo-deep-contextualized-word-representations/

Input의 형태는 character 기반 CNN으로 embedding한 vector를 사용한다.
구조는 아래 그림과 같다. 사용된 필터의 개수가 word embedding vector의 사이즈가 된다. (Elmo 논문에서 character의 embedding 사이즈를 얼마로 했는지는 찾지 못했다.)

LSTM과 LSTM 있는 projection layer란 개념은 Long Short-Term Memory Recurrent Neural Network Architectures for Large Scale Acoustic Modeling 이란 논문에서 나왔다. Parameter로 쓰이는 matrix의 크기를 줄일 수 있다는 효과가 있는 것 같다.

위의 예시처럼 LSTM의 output인 크기 4096 vector를 projection layer 없이 다음 LSTM의 입력으로 쓴다고 하면 4096*4096의 matrix가 필요하다.
하지만 중간에 512 차원의 projection layer를 넣으면 4096*512 matrix가 2개 필요하고(LSTM =>projection, projection=>LSTM), 결과적으로 4096*1024 만큼의 parameter 수를 갖게 되어 그만큼 크기를 줄일 수 있다.

이렇게 만들어진 projection vector를 output layer로 넘기게 되며, 이 때도 4096*D(output layer size)가 아닌 512*D 만큼의 matrix를 쓰면 되므로, 파라미터의 수를 줄일 수 있다.

학습 방법은 평범한 language modeling과 같다.

Loss function의 윗줄은 forward LSTM을 이용한 language modeling으로, t1 ~ tk-1까지의 단어들로 tk에 올 단어를 예측하기 위한 학습이다. 아랫줄은 backward로 tN에서부터 tk+1까지의 단어들로 tk에 올 단어를 예측하기 위한 학습이다.

위의 Loss function을 이용하여 pre-training을 하고 나면, 실제 task를 수행할 때 Elmo representation을 사용할 준비가 끝난다.

2-2. Elmo의 사용

이제 sentence classification, sentiment analysis 등의 task에 Elmo representation을 사용할 차례다. 사용하는 방법은 아래와 같다.

어떤 Task의 input sentence에 "is"란 단어가 있고, 이 단어에 대한 representation을 얻는다고 생각해보자. Rk의 구성 요소들을 살펴보면, xk은 LSTM의 입력으로 사용된 단어의 representation을 의미하고, h=>1, h<=1, h=>2, h<=2 는 각 LSTM의 projection layer에서 얻어진 forward, backward 방향의 representation을 의미한다.

여기서 Elmo가 context를 반영하는 word representation을 구해낸다는 것을 알 수 있다. Elmo의 구조를 나타내는 첫번째 이미지에 사용된 문장을 예로 들면, "small cat is"란 문장을 입력했을 때 얻어지는 "is"에 대한 projection vector들은 "My contribution is ..."을 입력했을 때 얻어지는 "is"에 대한 projection vector들과 다르다. "is" 전까지 입력된 단어들이 달라 LSTM과 projection layer가 다른 값을 갖기 때문이다. 

이렇게 얻은 ELMo representation은 실제 task를 위한 모델의 입력 벡터에 concatenate 되어 사용된다.

기본적으로 Input word embedding에 concatenate되지만, output vector에도 concatenate하면 좋은 결과를 내는 task도 있다고 한다.

위와 같이 각 단어에 대한 ELMo representation을 얻을 때는 ELMo 모델의 weight들을 고정시킨다.

3. 실험 결과



결과가 좋았다고 한다..........


위의 표는 Glove를 통해 얻은 "play"에 대한 벡터와 ELMo를 통해 얻은 "play"에 대한 벡터를 비교한 표이다. Glove는 단어의 representation이 고정되어 있기 때문에 play처럼 여러 뜻을 갖고 있는 단어의 경우 여러 의미를 단어 representation에 담기 어렵다.

하지만 biLM(ELMo)의 경우, LSTM의 이전 step에 입력된 단어에 따라 현재 단어에 해당되는 projection vector들이 변하기 때문에 context에 따라 얻어지는 "play"에 대한 벡터가 다르다. 첫번째 source 문장을 통해 얻어진 "play"의 벡터는 운동 경기에 대한 의미를 나타내어야 하는데, 오른쪽 nearest neighbor를 구해봤을 때 두 "play"의 의미가 비슷하다는 것을 알 수 있다. 반면 두번째 source 문장은 연극에 대한 의미를 반영하는 것을 볼 수 있다.

이 외에도 첫번째 projection layer를 통해 얻어진 벡터들은 주로 syntatic한 의미를 내포하고 있으며, 두번째 layer를 통해 얻어진 벡터들은 좀 더 semantic한 특징을 잡아낸다고 한다.

댓글 없음:

댓글 쓰기