ELMo
컴퓨터는 텍스트 자체보다 숫자를 더 잘 처리하기 때문에 NLP에서 텍스트를 숫자(벡터)로 바꾸는 여러 방법을 사용하는데 이를 Word Embedding이라고 한다. ELMo 등장 이 전에는 word2vec, GloVe와 같은 모델을 사용해 임베딩을 했으나, 이 모델들은 다의어의 모든 의미를 담아 내기 힘들다는 한계점을 가지고 있다. ELMo의 경우 같은 표기의 단어라도 문맥에 따라 단어의 의미를 결정하는 방식의 word embedding을 한다는 아이디어로 시작한다. ELMo는 큰 corpus에 대해 사전 학습된 bidrectional langauge model(bILM)을 사용한다.
Bidirectional language models(biLM)
input sequence가 N개인 token일 ㄸ, forward LSTM은 tk 이전의 토큰들이 주어졌을 때 tk를 예측한다. 반대로 backward LSTM은 tk 이후의 토큰들이 주어졌을 때 tk를 예측한다. biLM은 이 두 LSTM을 결합한 것으로, 두 방향에 대한 log likelihood를 최대화하는 것을 목표로 한다.
여기서 biLM 각 시점의 input은 embedding layer를 통해 얻은 벡터가 아니라 합성곱 신경을 이용해 character embedding을 통해 얻은 벡터이다. 위 식의 θx는 character embedding을 거친 token representation이고, θs는 softmax layer를 의미한다. 이 두 θ값은 direction에 관계 없이 같은 값을 공유하지만, 두 LSTM model이 다른 값을 갖는다.
ELMo structure
ELMo에서는 단어를 embedding하기 위해 biLM 각 층의 출력값과 input representation을 사용한다. 따라서 두 모델이 L개의 층을 가질 때, 2(direction)xL + 1(input representation) 개의 representation을 사용한다.
1. 각 층의 출력값을 concat한다.
2. concat한 출력값 별로 가중치 합을 구한다.
이 때 가중치들은 softmax-normalized weihgts로, softmax를 사용해 전체 합이 1이 되게 하는 가중치라고 이해했다.
3. 벡터의 크기를 결정하는 스칼라 매개변수를 곱한다.
위 과정들에서 가중치와 스칼라 매개변수는 학습가능한 파라미터이면서 optimization에서 매우 중요한 역할을 담당한다.
Using biLMs for supervised NLP tasks
대부분의 NLP model들의 Input은 모두 context-independent token들의 sequence이다. 이러한 공통점 덕분에 동일한 방법으로 대부분의 task에 ELMo를 그대로 적용할 수 있다.
- NLP model의 Input layer와 다음 layer 사이에 ELMo를 넣는다.
- ELMo를 거쳐 embedding이 완료된 벡터는 기존의 임베딩 벡터와 함께 사용할 수 있다.
- 즉 input token과 ELMo의 결과 벡터의 concatenation을 NLP model의 Input으로 사용한다.
Pre-trained biLM architecture
ELMo는 기존의 pre-trained biLM과 전체적인 구조는 비슷하지만 LSTM layer 사이에 residual connection을 사용했다는 큰 차이점이 있다. 이를 통해 Input feature를 더 잘 전달하고 기울기 소실 문제를 보완할 수 있다.
Performance
ELMo를 NLP의 여러 task에 적용한 결과, Questioning Answering, Tectual Entailment 등 NLP의 5가지 분야에서 SOTA모델과 baseline 모델에 ELMo를 적용했을 때 ELMo를 적용한 경우가 모든 task에서 SOTA를 경신했다.
Anlaysis
Where to include ELMos?
위에서 언급했듯 supervised NLP model에 ELMo를 적용할 때에는 input layer의 직후에 ELMo를 삽입했다. SQuAD, SNLI, SRL의 baseline model은 모두 biRNN model인데, ELMo를 biRNN 직후에도 삽입을 한 뒤 성능을 비교했다.
SQuAD와 SNLI에 있어서는 ELMo를 biRNN 이후에도 추가하는 것이 더 좋은 성능을 보여줬는데, 이는 SNLI와 SQuAD는 biRNN 직후 attention layer가 있는데, biRNN과 attention layer 사이에 ELMo를 추가함으로써 ELMo representation에 attention이 직접적으로 반영됐기 때문이라고 유추해 볼 수 있다.
What information is captured by the biLM's representation?
1. Word sense disambiguation(WSD, 다의어의 의미를 구분짓는 task)
2. POS tagging (word의 품사를 Tagging 하는 task)
POS tagging은 얼마나 syntax 정보를 잘 담고 있는지에 대한 지표이다. WSD와는 다르게 first layer가 second layer의 output 보다 POS tagging에서 더 좋은 성능을 보였다.
결론적으로 ELMo에서는 층이 낮은 layer일수록 syntax 정보를, 층이 높은 layer 일수록 semantic 정보를 저장한다고 유추할 수 있다.
Sample Efficiency
ELMo의 사용은 일정 수준 이상의 성능 달성에 필요한 parameter update 횟수와 전체 Training set size를 획기적으로 줄여준다. ELMo를 추가했을 때는 학습속도도 더 빠르며(최대 49배) 학습데이터가 적을 때도 훨씬 효율적으로 학습힌다.
Visualizataion of learned weights