0. ELMo 개요
이번에는 저번 Seq2Seq에 이어서 ELMo라는 임베딩 기을 공부해 볼 것이다.
우선 ELMo: Embeddings from Language Model은 언어모델을 기반으로 하는 임베딩을 뜻한다.
즉, ELMo의 가장 큰 특징은 사전 훈련된 언어 모델을 사용한다는 것이다. 이를 통해 대량의 자연어 코퍼스를 미리 학습하여 자연어 코퍼스 안에 포함된 일반화된 언어 특성들을 모델의 파라미터 안에 함축하였다.(물론 기존 논문에서도 사전학습된 단어표현들을 사용하여 일반화된 언어특성을 고려하고자 했으나, 어려웠다. 그러나, ELMo는 문장을 구성하는 각각의 단어 토큰이 전체 입력문장, 즉 문맥을 고려하도록 압축한다는 점에서 기존의 단어 임베딩과 다른 방식이었다.)
ELMo는 이어 붙여진 언어모델로 학습된 `bidirectional Language Model(biLM)으로부터 얻은 벡터를 사용한다.
위의 내용을 요약하자면, 기존의 워드 임베딩은 "Bank account"와 "River Bank"가 있을 때 실제 의미는 은행, 강둑으로 전혀 다른 의미이지만 단어자체가 같기 때문에 Word2Vec이나 Glove등의 임베딩표현으로는 이를 반영하지 못했다. 따라서 단어를 개별적으로 임베딩하기 전에, 전체 문장을 고려하여 임베딩을 하고자 하였으며 이 작업을 biLM을 통해 진행한다는 것이다.
1. biLM
ELMo는 `biLM:bidirectional language model`을 사용하였으며, 기본적으로 다층 구조를 전제로한다.
기존의 Seq2Seq같은 모델에서는 학습이 한 방향으로 진행되는데 이는 문맥을 한 방향으로만 고려하여 압축한다는 한계가 있었다. 이에 biLM은 N개의 token으로 이뤄진 입력 문장을 양방향의 언어 모델링을 통해 문맥적인 표현을 반영하여 해당 입력 문장의 확률을 예측하고자 하였다.
우선 forward 방향의 언어 모델링과정에서 입력으로 들어오는 일련의 단어 토큰에 대한 확률을 계산할 때, 출력 토큰의 확률을 이전 토큰들을 활용하여 모델링한다.
$$ P(t_1, t_2, \ldots, t_n) = \prod_{i=1}^{n} P(t_i | t_{i-N+1}, \ldots, t_{i-1}) $$
반대로 backward 방향의 언어 모델링 과정에서는 출력토큰의 확률을 특정 시점 이후의 토큰들을 활용하여 모델링한다.
$$ P(t_1, t_2, \ldots, t_n) = \prod_{i=n}^{1} P(t_i | t_{i+1}, \ldots, t_{i+N}) $$
biLM은 위의 forward와 backward 모델을 합쳐 확률을 최대화하는 방향으로 학습된다.
biLM의 입력문장내 단어 토큰들은 앞서 배웠던 Word2Vec, Glove, fasttext등이 사용된다.
2. ELMo
ELMo는 기본적으로 LSTM을 사용한 biLM을 구성하였다.
이 biLSTM Layer에서 나온 벡터 표현들을 선형결합하여 각각의 단어를 표현하는데, 이게 무슨 말이냐 하면,
우선 어떠한 단어(play)가 들어가면, 임베딩층을 지나고, 각 hidden state가 나올 것이다. 이때 양방향 모델에서 나온 각 층의 출력들을 모두 concat하는 것이다.
이렇게 양방향의 각 층의 출력값을 concat한 뒤에 각 층의 출력값 별로 가중치를 주어 곱해 더해서 새로운 가중합을 만들어낸다.
이렇게 만들어낸 가중합에 벡터의 크기를 결정하는 스칼라 매개변수를 곱해서 `ELMo representation`을 만들어낸다.
이렇게 얻은 ELMo표현은 기존의 임베딩 벡터와 함께 사용되는데, 아래와 같이 단순 Glove 등의 워드 임베딩 결과와 ELMo 표현을 concat 하여 입력으로 활용한다.
위에서 실시한, 각 층의 정보들을 합치는 과정을 통해 Deep contextuallized word representation을 얻을 수 있었다.
이는 lower layer에서는(입력에 가까운층)품사 등의 문법정보를 높은 단계에서는 문맥정보를 학습하는 경향이 있기 때문에 이러한 것들을 모두 반영하고자 한 것이다.
2-1. ELMo 결과
이렇게 만들어진 ELMo표현을 이용하여 다양한 실험을 진행하였는데,
6개의 NLP 성능평가에서 ELMo를 적용한 결과 기존 SOT모델의 성능을 뛰어넘었으며,
위에서 가중합 ELMo representation을 만든다음, 기존 임베딩에 concat 할 때 그냥 앞쪽에 붙여서 concat을 했었는데, 이 concat을 위치를 바꿔서 해봤을 때의 성능을 확인하였는데, 대체적으로 입. 출력 모두에 추가했을 때가 가장 성능이 좋았다는 것도 볼 수 있었다.
또한 학습데이터가 작을수록 ELMo 를 사용하면 더 효율적인 학습이 가능하다는 것도 확인할 수 있었다. 이는 사전학습된 단어 임베딩이 랜덤 초기화된 임베딩보다 더 많은 정보를 제공하기 때문에 학습 수렴이 빠른 것도 확인하였다..
2-2. ELMo 결론
ELMo는 기존의 단어 임베딩 구조가 문맥의 정보를 제대로 반영하지 못하는다는 한계점을 지적하여, 양방향 학습이 가능한 biLM을 이용하여 문맥의 앞뒤방향으로 학습해 문맥 내 정보를 충분히 반영하는 문장 벡터 표현을 학습하는 방법을 밝혔다.
이렇게 기존의 단어단위의 임베딩이 아니라 문맥단위로 임베딩을 한 ELMo는 여러가지 실험으로 증명되었고 많은 pretrained 모델을 파생시켰다.
'ML & DL > NLP' 카테고리의 다른 글
[패캠/NLP] GPT (0) | 2023.12.27 |
---|---|
[패캠/NLP] Transformer: 트랜스포머 (0) | 2023.12.26 |
[패캠/NLP] 문장 임베딩 (1) | 2023.12.22 |
[패캠/NLP] Word2Vec 워드 임베딩 실습 (1) | 2023.12.20 |
[패캠/NLP] 임베딩 기법(Word2Vec, FastText, GloVe) (1) | 2023.12.20 |