많은 Neural Language understanding 모델들의 representation에서의 Key point인 ELMO를 살펴보자.
Intro
논문에서는 High qulity representations들은 두가지 동일한 모델링이 들어간다고 말한다.
- 언어의 사용에서 복잡한 특징을 잡아야 한다. (ex. syntax and semantics)
- 단어들이 언어학적인 맥락에 따라서 다른 뜻을 가질 때 다른 representation을 가져야 한다. (ex. show(눈) != eye(눈), 다의어)
Glove vs ELMo
Glove는 play를 스포츠 쪽에 치우친 단어로 해석을 하는 반면, ELMo는 단어들의 뜻을 맥락에 따라서 구분하는 것을 볼 수 있다.
Feature
ELMo는 각각의 토큰들이 전체 인풋 문장에 대한 representation을 받는다. (추후 설명)
ELMo에서 사용하는 임베딩 백터는 기본적으로 bidirectional LSTM(이하 biLM)에서 가지고 온다. 여기서 biLM은 Language Model에 대한 목적함수로 학습이 된다. 쉽게 말해 ELMo자체는 전체 입력문장을 이용을 한 Representation이고 그 입력 문장은 biLM을 이용한 language model(LM)을 학습한 것이라고 생각하면 된다.
그런데, 여기서 주목해야 할 것은 ELMo Representation은 "깊은(deep)" Representation인 것이다. 왜냐하면, biLM에 모든 내부 layer에 해당 하는 Hidden Vector를 결합하기 때문이다. 이게 무슨 말이냐면, 만약, biLM이 존재한다고 가정했을 때, 해당 층에 있는 biLM의 각각의 $x$, $h_1$, $h_2$,.. 등의 stack된 벡터들을 선형결합해서 사용한다는 것이다. 그래서 각각의 동일 포지션에 있는 여러층에 있는 정보들을 결합하여 더 효율적인 word representation이 가능하게 된다.
이렇게 된 word representation은 2가지의 특징을 가진다.
- 위쪽 층에 있는 represenation vector들(ex. $h_3$) 맥락에 의존적(context-dependent)한 의미를 포함한다.
- 아래 층에 있는 represenation vector(ex. $h_1$)들은 구문분석(syntax)에 해당하는 Feature들을 포함한다.
때문에 본인의 분석 목적이 Context 중심인지, Syntax 중심인지에 따라 각 층(Layer)의 가중치를 달리주는 것이 좋다.
Graphical illustration
위 설명을 그림으로 설명하면 아래와 같다.
만약, 아래와 같이 Let's, stick, to, improvisation, in, this, skit과 같이 단어가 존재한다고 해보자. 우리는 이 단어들을 Word Embedding하고자 한다. 여기서 ELMo는 단어 임베딩을 할 때, 단어 하나하나를 개별적으로 인지하여 임베딩하는 것이 아니라, 전체 단어를 전부 고려하여 최종적으로 각각의 임베딩이 나오게끔 한다.
ELMO가 기본적으로 가지고 있는 것은 Language Modeling이라고 했다.
(Language Modeling이란 지금까지 주어진 단어들의 Sequence를 이용해서 다음에 나올 단어를 예측하는 구조 의미)
예를 들어 아래 Let's, stick, to라는 단어가 존재한다고 가정하자. 이 때 각각의 단어가 가지고 있는 word embedding을 입력으로 집어넣어서 해당 레이어(여기서는 layer 1, 2)를 통해서 LSTM을 태우게 되면 이 시점에서는 $p(w_t | w_{t-1}, w_{t-2}, w_{t-3})$와 같은데, 이렇게 해서 out layer를 내서 FFNN + Softmax를 태우면 Improvisation을 예측하게 되는 구조가 된다.
위에는 ELMo의 LM이 학습하는 방법에 대해 이야기 했다면 결국 전반적인 ELMo가 학습하는 방식은 다음과 같다.
1. ELMo는 Forward 방향의 LM과 Backward 방향의 LM을 학습을 하게된다.
2. 이렇게 Forward 모델과 Backward 모델이 학습이 잘되고 나면, 나중에 우리가 사용하게 될 ELMo의 벡터는 위치(시점)가 같은 Forward layer와 Backword layer를 선택(여기서는 stick에 대한 입력, layer1, 2)한 다음
3. 해당 레이어에 있는 vector들을 서로 Forward + Backward로 Concatenate한다. (여기서는 stick의 임베딩 벡터, layer1, layer2의 각각 hidden vector)
4. concatenate한 vector들에 대해 특정한 tack에 따라 각 벡터에 대한 가중합을 계산한다. 우리가 여기서 중요하게 봐야할 것은 $s_0, s_1, s_2$를 학습을 통해 산출하는 방법이다. (여기선 방금도 말했듯 맥락에 집중하고 싶으면 $s_2$를, 구문에 집중하고 싶으면 $s_0$에 가중치를 더 둔다)
ELMo for downstream task
그렇지만 결국은 ELMo자체를 만드는 것이 중요한 것이 아니라, pretrained된 Word vector들을 통해 downstream task를 잘 해결하는 것이 중요하다.
이를 위해 Foward & Backward LM을 문장을 집어넣어 만들게 되면(biLMs) $x_k$, $h_{k1}$, $h_{k2}$의 vector가 만들어지게 되는데, 이를 서로 Forward + Backward로 concatenate하고 내가 원하는 특정한 task에 대한 특정 토큰(K)의 ELMo vector는 $s_0$부터 $s_2$까지의 가중치를 학습시키며, $r$라는 전체 가중합이 된 pretrained vector를 얼마나 증폭시켜서 사용할 것인지를 결정한다.
위에서 말했듯 가중치를 학습하여 가중합을 하는 방법이 중요한데, 그 방식은 크게 2가지로 나뉜다.
- 모든 가중치를 동일하게 산출
- task에 따라 가중치를 통일하게 산출
Bidirectional language models(biLM)
ELMo에 있어서 결국 가장 중요한 것은 biLM에 대한 이해라고 생각된다. 때문에, biLM에 대해 별도로 정리해보고자 한다.
(지금은 Forward Language model에 대해서만 설명하지만, Backward Language Model도 전체적인 개념은 같다)
우리가 N개의 토큰이 주어져 있는 Sequence가 있다고 생각할 때, k번째 토큰을 예측하기 위해 1부터 k-1까지의 토큰을 가지고 있다고 가정하면 각각의 n개의 토큰 sequence가 나타날 확률은 아래와 같다.
아래 각각의 표기를 소개하자면 첫번째(1) 표기는 처음 백터가 입력되는 context-independent한 백터이다. 이는 어떤 임베딩으로도 해도 가능하며, L개의 layer들의 forward LSTM으로 들어간다. 그 다음 두번째(2) 표기는 각각의 포지션에 있는 context-dependent 벡터로 j는 가장 아래있는 1부터 최상단 layer인 L까지 나타난다. 마지막 세번째(3) 표기는 가장 위 layer에 있는 LSTM의 output vector로 이것은 다음 softmax로 다음 번 토큰 $t_{k+1}$을 예측하는데 사용된다.
결국은 우리는 Forward Language 모델의 likelihood와 Backward Language 모델의 likelihood를 최대화 해야 한다.
이렇게 biLM이 학습이 되면, 각각의 토큰 들에 대해 2L + 1의 representation들을 얻게 된다.
- 여기서 2L은 forward & backward Language에 대한 representation
- +1은 입력 vector $x$
그렇게 되면 이것들을 이용해서 최종적인 downstream task를 수행하기 위해서 모든 layer에 대한 vector를 하나의 single vector로 합치게 된다. 아래 식에서 $s_j^{task}$는 각각의 task에 맞는 j번째 layer의 가중치를 의미한다. $r^{task}$는 전체 ELMo vector에 대해 전반적으로 scale을 해줄 수 있는 부분이다.
Reference
https://www.youtube.com/watch?v=zV8kIUwH32M&t=9s
'Analytics' 카테고리의 다른 글
[Causal Inference] 이질적 처치효과 (2) | 2024.09.24 |
---|---|
[Causal Inference] 성향점수 (5) | 2024.09.22 |
[Causal Inference] 유용한 선형회귀 (4) | 2024.09.18 |
[Causal Inference] 인과추론 기초 & 무작위 실험 (16) | 2024.09.16 |
[ML/DL] Seq2Seq with Attention (0) | 2024.09.02 |