ELMo
이번 포스팅에서는 언어 모델 중 하나인 ELMo에 대해 공유해보려고 합니다.
ELMo (Embeddings from Language Model)
제안
- 기존의 워드임베딩의 경우, 아래 예시와 같이 문맥을 반영하지 못하기에 같은 표기의 단어라도 문맥에 따라 다르게 임베딩을 제공하는 ELMo를 제안합니다.
- –> Contextualization Word Embedding
Key idea
- 문장 전체를 입력으로 넣어서 Word representation 을 만듭니다.
- 문장이 달라짐에 따라 단어 벡터 또한 달라진다는 의미와 같습니다.
- LSTM 기반의 언어 모델(biLM)을 사용합니다.
- biLM의 각 hidden layer output 값이 word representation을 갖기 때문에 이 자체를 임베딩 벡터로 활용하는 게 ELMo 라고 할 수 있습니다.
biLM (Bidirectional LM)
순방향과 역방향 모델로 구성되어 있습니다.
순방향과 역방향의 은닉층이 연결된 상태가 아닌 각 별개의 언어 모델로 보고 학습합니다.
문맥에 따라 임베딩을 제공할 수 있는 이유는 ELMo의 biLM 구조과 biLM의 모든 레이어 층의 정보를 활용하기 때문입니다. 다시 말하면, hidden state output값만 활용하는게 아니라 모든 inner state 층의 output 정보 모두 활용하게됩니다. 이는 예시와 같이 read 라는 단어가 있을 때, 순방향LM만 고려하여 학습을 한다면 read 가 현재형인지 과거형인지에 대한 정보가 부족합니다. 하지만, 역방향LM 까지 고려한다면 read가 과거형에 가깝다라는 것을 확인할 수 있게되고 이는 곧 문맥을 고려한다는 의미로 해석이 가능합니다.
- 합성곱 기반의 문자 임베딩을 통해 얻은 단어 벡터를 입력으로 사용합니다.
- Residual Connection 사용을 통해 Gradient Vanishing 문제를 해결합니다.
입력 문장의 각 단어는 워드 임베딩 층과 biLSTM이 stack된 구조로 되어있다고 보면 될 것 같습니다.
biLM의 목적함수
log를 취해서 그 값이 최대가 되는 log likelihood θ를 찾는 목적함수입니다. 이때, 각 층의 순방향과 역방향 LSTM 의 출력값을 combine 한다는 의미입니다.
- 첫번째부터 k-1번째까지의 단어가 주어졌을 때, K번째 단어의 등장할 확률 계산
- Θ_x : 토큰 representation, input
- Θ_s : softmax layer
ELMo Representation
biLM 모델을 학습하여 임베딩을 얻게 됩니다. ELMo에서는 이를 representation을 얻었다고 표현하며, 각 토큰 k에 대해 LSTM 레이어의 갯수가 L개일 경우 총 2L+1 개의 represenatation을 얻게 됩니다. 이는 후에 특정 task에 최종 인풋 임베딩 벡터로 사용이 됩니다.
여기서 2L+1개란, 순방향과 역방향 은닉층을 concat한 과정 Residual connection으로 인해 X_k 라는 최초의 임베딩 토큰벡터를 합친 형태의 집합 Rk를 의미합니다.
- h 는 hidden sate
- x 는 입력 데이터
Using biLMs for Supervised Downstream task
사전 학습된 biLM 에 NLP task를 활용하는 방법에 대한 설명입니다.
모델을 학습하여 임베딩을 얻고, 이를 다른 모델에 집어넣는 형태로 ELMo에서 얻은 representation을 특정 task 모델에 넣습니다.
아래 예시와 같이, biLM 학습을 통해 hidden state vector들을 고정시킨 상태에서 가중치만을 조정해서 downstream task에 적절한 word vector를 찾겠다는 의미입니다.
정리 및 결론
지금까지 사전학습된 representation 을 추가 feature로 포함하는 task-specific arhitecture 를 사용한 ELMo 에 대해 알아보았습니다. ELMo 는 이름 뜻 그대로 언어 모델(LM)로 임베딩을 하여 기존의 다의어에 대해서 vector representation이 갖는 한계를 해결해주는 언어 모델입니다.
참고 논문 및 자료