1. ELMo(Embeddings from Language Model)
■ ELMo는 Word2Vec, GloVe 등과 같은 워드 임베딩(Word Embedding) 방법론이다.
■ 단, 기존 워드 임베딩 방법론과의 가장 큰 차이점은 ELMo는 사전 훈련된 모델(pre-trained language model)을 사용해서 워드 임베딩을 수행한다는 점이다.
1.1 기존 임베딩 방법론의 한계
■ 예를 들어, 다음과 같은 play라는 다의어 단어를 생각해보자.
Deep Contextualized Word Representations - ACL Anthology
Deep Contextualized Word Representations
Matthew E. Peters, Mark Neumann, Mohit Iyyer, Matt Gardner, Christopher Clark, Kenton Lee, Luke Zettlemoyer. Proceedings of the 2018 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies, Vol
aclanthology.org
■ 위의 표는 play라는 단어는 다의어임에도 불구하고 GloVe를 통해 임베딩 벡터로 만들었을 때, GloVe로 만든 play의 임베딩 벡터는 playing, game, games, .... , football, multiplayer로 스포츠 도메인에 치우쳐진 단어와 nearest neighbors 관계를 가지는데,
■ ELMo를 사용해서 play라는 단어를 워드 임베딩하면, Chico Ruiz made ~ 에서의 play는 스포츠에서 사용되는 play이고 Olivia De ~ 에서의 play는 연극 등에서 사용되는 play이다.로 문맥(context)에 따라서 다의어를 구분하는 것을 볼 수 있다.
■ 즉, 예를 들어 Word2Vec이나 GloVe 등의 워드 임베딩 방법론으로 play라는 단어를 [0.2, 0.5, 0.8, -1.2]라는 임베딩 벡터로 임베딩했다면, Chico Ruiz made ~ 에서의 play와 Olivia De ~ 에서의 play는 다른 의미임에도 불구하고, 두 가지 문장에서 모두 [0.2, 0.5, 0.8, -1.2]의 임베딩 벡터가 사용된다는 한계가 있다.
■ 이러한 문제는 같은 표기의 단어를 문맥에 따라 임베딩할 수 없는 Word2Vec이나 GloVe 등의 임베딩 방법론의 한계이다.
■ 반면, ELMo는 워드 임베딩 시 문맥을 고려해서 임베딩을 수행하겠다는 아이디어가 반영된 방법론으로 위의 테이블처럼 다의어를 구분할 수 있다.
1.2 ELMo는 biLM(Bidirectional Language Model)을 활용한다.
■ ELMo는 언어 모델링(language modeling)을 통해 사전 훈련된 biLM을 사용하여 입력 문장으로부터 단어를 임베딩한다.
- 기본적으로 biLM LSTM을 사용한다.
- 언어 모델링은 지금까지 주어진 단어 시퀀스들을 통해서 다음 단어를 예측하는 작업.
-- 예를 들어 현재 시점의 단어가 \( w_t \)라면 이전 시점들의 단어 시퀀스 \( w_1, w_2, \cdots, w_{t-1} \)을 이용해 \( w_t \)를 예측
■ ELMo는 특정한 층(layer)에 해당하는 은닉 벡터를 사용하는 것이 아닌, biLM이 훈련되었을 때 해당 시점(time step)에 해당하는 모든 층의 은닉 벡터들을 활용한다.
■ 예를 들어, 'Let's stick to'라는 문장이 있다고 했을 때, 다음 그림은 2개의 LSTM 계층(은닉층 2개)을 가진 단방향 언어 모델로 다음 단어를 예측하는 '언어 모델링'을 보여준다.
■ 이 예시는 순방향 언어 모델이 'Let's stick to'라는 문장으로부터 단어 시퀀스를 입력으로 받으면 LSTM 계층의 은닉 상태(hidden state)는 시점(time step)이 지날수록 점점 업데이트된다. 즉, 은닉 상태의 값이 문장의 문맥 정보를 점차적으로 반영한다고 볼 수 있다.
■ ELMo는 위와 같은 순방향 언어 모델(forward language model) 뿐만 아니라, 반대 방향으로 문장을 스캔하는 역방향 언어 모델(backward language model)도 학습한다.
■ 단, 다음과 같이 순방향 언어 모델과 역방향 언어 모델이라는 두 개의 언어 모델을 별개의 모델로 보고 학습한다.(=순방향 언어 모델과 역방향 언어 모델에서 학습을 위해 사용하는 가중치는 다르다.)
- 양방향 RNN과 ELMo에서의 biLM은 다르다. - 양방향 RNN은 순방향 RNN의 은닉 상태와 역방향 RNN의 은닉 상태를 연결(concatenate)하여 다음 층의 입력으로 사용한다.- ELMo에서의 biLM은 순방향 RNN과 역방향 RNN이라는 두 개의 언어 모델을 별개의 모델로 보고 학습한다.
■ 이렇게 양쪽 방향의 언어 모델을 둘 다 학습하여 활용하는 언어 모델을 biLM(Bidirectional Language Model)이라고 한다. ELMo는 이 biLM을 활용하는 것이다.
- ELMo에서 말하는 biLM은 기본적으로 다층 구조(multi-layer)를 전제로 한다. 즉, 은닉층 최소 2개 이상을 전제로 한다.
■ 위와 같이 biLM이 언어 모델링을 통해 학습된 후 ELMo가 학습된 biLM을 통해 단어를 임베딩하는 과정은 다음과 같다. 예를 들어 현재 시점의 단어 시퀀스가 'stick'이라면
stick이라는 단어의 임베딩을 만들기 위해, 단어 stick 시점의 biLM의 각 층의 출력값을 가져와서 연결(concatenate)한다. 즉, stick 시점의 순방향과 역방향 언어모델에서 학습된 벡터를 각 hidden layer에서 가져온 다음, 연결시킨다.
여기서 말하는 각 층은 초록색으로 표시된 순방향 및 역방향 언어 모델의 임베딩 계층과 분홍색과 빨간색으로 표시된 순방향 언어 모델의 은닉 계층 그리고 연보라색과 보라색으로 표시된 역방향 언어 모델의 은닉 계층을 말한다.
이 계층들의 출력값은 임베딩 계층의 경우 임베딩 벡터가 될 것이고, 은닉 계층의 경우 출력값은 은닉 상태 벡터이다. 이들을 각각 가져와서 위의 그림과 같이 연결시킨다.
다시 말해, 어떤 특정 시점의 순방향 모델과 역방향 모델에 대해서 같은 레벨(level)에 있는 은닉 상태 벡터와 임베딩 벡터를 가로 방향으로 연결시킨다. 이것이 ELMo가 임베딩 벡터를 얻는 과정 중 첫 번째 단계이다.
■ ELMo의 아이디어는 이렇게 각 층의 출력값이 가진 정보는 전부 서로 다른 종류의 정보를 갖고 있을 것이므로, 이들을 모두 활용한다는 점에 있다.
- 해당 논문의 저자는 각 레이어의 깊이(depth)별로 (또는 레벨별로) 가지고 있는 정보가 다르며,
- 보다 낮은 층(layer)에 있는 은닉 벡터들은 구문 분석에 해당하는 feature를 가지고 있고 보다 높은 층에 있는 은닉 벡터들은 context-dependent를 표현할 수 있는 feature를 가지고 있는 것으로 보았다.
- 즉, 하고자 하는 task가 pos tagging, 구문 분석이라면 하위 레벨에 있는 층에 가중치를 높게 설정하고, 텍스트 분류, 감성 분석, 질의 응답(question-answering)같은 context에 대한 이해가 필요한 task를 한다면, 상위 레벨에 있는 층에 가중치를 높게 설정해야 한다.
- 이렇게 ELMo는 유연하게 여러 다운스트림 테스크(downstream task)에 성능을 높게 나타내는 representation을 생성할 수 있다.
-- 다운스트림 테스크는 사전 학습된 모델을 특정 작업에 맞게 조정하여 활용하는 것을 말한다.
■ 다시 ELMo가 임베팅 벡터를 얻는 과정으로 돌아와서, 두 번째 단계는 다음과 같이 각 층의 출력값 별로 가중치를 부여하는데, 이때, 위에서 언급한 것처럼 작업하고 있는 task의 목적에 맞게 가중치를 부여한다.
- 가중치를 \( S_0, S_1, S_2 \)라고 하자.
- 만약, 하고자 하는 task가 pos tagging이라면 가중치 중 \( S_0 \)를 더 크게 설정하고, context에 대한 이해가 필요한 task라면 가중치 \( S_2 \)를 더 크게 설정해야 한다.
■ 그다음, 세 번째 단계는 다음과 같이 각 층의 출력값을 모두 더한다.
- 두 번째 단계와 세 번째 단계를 합쳐서 가중합(weighted sum)을 한다고 볼 수 있다.
■ 마지막 단계는 세 번째 단계의 결과로 얻은 가중합 벡터에 대해 벡터의 크기를 결정하는 스칼라 매개변수 \( \gamma \)를 곱해준다.
■ 마지막 단계를 통해 완성된 벡터가 바로 ELMo에서 의해서 만들어진 단어의 임베딩 벡터이다. 이를 ELMo 표현(representation)이라고 한다.
1.3 ELMo for downstream task
■ 이 내용은 1.3에서 언급한 마지막 단계에서 스칼라 매개변수 \( \gamma \)와 관련이 있다. ELMo representation을 사용하는 이유는 특정 task에 맞게 조정하여 활용하기 위함이다. 이를 위해 다음 그림과 같이 task에 대한 스칼라 매개변수인 \( \gamma^{\text{task}} \)를 사용한다.
■ 위의 그림은 ELMo representation을 사용하는 방법에 대한 내용이다.
■ 먼저, corpus를 통해 biLM을 학습한다. 그다음, 순방향 언어모델과 역방향 언어모델의 출력값들을 연결한다.
■ 그다음, 어떤 task에 대한 특정 시점의 \( k \)번째 token의 ELMo representation인 \( \text{ELMO}^{\text{task}}_k \)는
- 어떤 task에 대한 가중치 \( S^{\text{task}}_0, \; S^{\text{task}}_1, \; S^{\text{task}}_2 \)와 연결된 출력값들을 가중합한 결과와
- 어떤 task에 대한 스케일 팩터(scale factor)인 \( \gamma^{\text{task}} \)가 곱해져서 만들어진다.
-- scale factor는 어떤 양을 늘리거나 줄이기 위해 곱하는 수
■ 그리고 다음 그림과 같이 ELMo representation을 Word2Vec이나 GloVe와 같은 기존의 방법론을 이용해서 만든 임베딩 벡터와 함께 사용할 수 있다.
■ 위의 그림들처럼 ELMo representation과 ELMo representation을 얻기 위해 사용한 embedding vector를 연결(concatenate)해서 어떤 nlp task를 위한 입력으로 사용할 수 있다.
■ 이때, biLM의 가중치는 고정시키고(순방향 언어 모델과 역방향 언어 모델에서 사용할 가중치), task에 초점이 맞춰진 \( S^{\text{task}}_0, \; S^{\text{task}}_1, \; S^{\text{task}}_2 \)와 \( \gamma^{\text{task}} \)는 훈련 과정에서 학습된다.
2. Bidirectional Language Model
■ \( t_1, t_2, \cdots, t_N \)으로 \( N \)개의 단어(토큰)이 주어진 시퀀스가 존재한다고 하자.
2.1 Forward LM & Backward LM
■ 순방향 언어 모델은 \( k \)번째 토큰 \( t_k \)를 예측하기 위해 \( t_1, t_2, \cdots, t_{k-1} \)을 활용하여
- 다음과 같이 \( k = 1 \)부터 마지막 단어인 \( N \)까지 \( k \)번째 단어 이전에 존재하는 모든 단어들을 조건부로 삼아서 \( k \)번째 단어가 등장할 확률을 계산한다음, 전부 곱해준다.
- \( k \)번째 토큰에 대한 임베딩을 \( x^{\text{LM}}_k \)이라고 하자.
-- \( x^{\text{LM}}_k \)은 Word2Vec이나 GloVe 등에서 만들어진 pre-trained word embedding vector를 사용해도 되고 사용자가 직접 만든 워드 임베딩 벡터를 사용해도 된다. 이렇게 사용하는 워드 임베딩 벡터는 'context-independent'한 표현(representation)이다.
- 이 \( x^{\text{LM}}_k \)은 \( \text{L} \)개의 레이어를 가진 순방향 (LSTM)언어 모델의 입력으로 넣으면,
- 각각의 \( k \)번째 위치에서 LSTM layer의 output으로 'context-dependent' representation을 얻는다. 이것을 다른 말로 은닉 상태 (벡터)라고 한다. 이는 언어 모델링을 통해 각각의 \( k \)번째 위치의 LSTM layer의 은닉 상태들은 시간의 흐름(또는 순방향)에 따라 점차적으로 문맥 정보를 반영하기 때문이다.
-- context-dependent representation을 \( \overrightarrow{h}^{\text{LM}}_{\text{k, j}}, \; j = 1, 2, \cdots, \text{L} \)라고 하자.
- \( \overrightarrow{h}^{\text{LM}}_{\text{k, j}}, \; j = 1, 2, \cdots, \text{L} \)는 \( k \)번째 토큰이 \( j \)번째 layer에서 가지고 있는 은닉 상태 벡터를 의미한다.
- 가장 위쪽 layer의 LSTM output인 \( \overrightarrow{h}^{\text{LM}}_{\text{k, L}} \)는 softmax layer(계층)을 통해 다음 시점의 토큰을 예측하는데 사용된다.
- 이러한 과정을 거치는게 일반적인 순방향 언어 모델(forward language model)이다.
■ 역방향 언어 모델은 순방향 언어 모델과 반대로 역뱡향으로 스캔하므로, \( k \)번째 토큰 \( t_k \)를 예측하기 위해 \( t_{k+1}, t_{k+2}, \cdots, t_{N} \)을 활용하여 다음과 같이 계산된다.
- 역방향 언어 모델에서도 마찬가지로 context-dependent representation을 얻는다. 이를 순방향 언어 모델에서 얻는 은닉 상태 벡터와 구분하기 위해 \( \overleftarrow{h}_{\text{k, j}}^{\text{LM}}, \; j = 1, 2, \cdots, \text{L} \)이라고 하자.
2.2 BiLM 학습
■ \( \Theta_x \)를 순방향 언어 모델과 역방향 언어 모델이 가지고 있는 token representation의 파라미터. \( \Theta_s \)를 Forward LM과 Backward LM이 가지고 있는 softmax layer의 파라미터라고 하자. 그리고 \( \overrightarrow{\Theta}_{LSTM} \)은 순방향 언어 모델의 LSTM의 파라미터, \( \overleftarrow{\Theta}_{LSTM} \)은 역방향 언어 모델의 LSTM의 파라미터라고 했을 때,
■ biLM은 다음과 같이 Forward LM과 Backward LM의 각 파라미터를 별도로 유지하면서 학습하는데, 두 모델(Forward LM과 Backward LM)의 Log Likelihood를 최대화시키는 방향으로 학습해야 한다.
- 정확하게는 토큰 표현(=입력 시퀀스 데이터)에 대한 파라미터 \( \Theta_x \)와 softmax layer의 파라미터 \( \Theta_s \)는 Forward LM과 Backward LM이 서로 공유한다.
- 단, LSTM에 관련된 파라미터는 두 모델이 서로 공유해서 사용하는 파라미터가 아니라 두 모델이 별도로 유지하는(가지고 있는) 파라미터이다.
2.3 ELMo
■ ELMo representation은 biLM에의 중간 계층의 representation들의 task별 결합(combination)이다.
- 풀고자 하는 task가 문맥(context)에 대한 정보가 더 중요한지, 구문(syntax)에 대한 정보가 더 중요한지. task에 따라서 중간 계층(layer)들에 대한 가중치를 두고 task에 따른 specific combination을 통해 얻은 표현이 ELMo representation이다.
■ 토큰 \( t_k \)에 대해 \( \text{ L } \)개의 레이어를 가진 biLM은 다음과 같이 \( 2 \text{L} + 1 \)개의 representation을 가진다.
- \( 1 \)개는 단어 임베딩인 \( x^{\text{LM}}_k \)이고
- \( \text{L} \)개는 순방향 모델 \( \overrightarrow{h}^{\text{LM}}_{\text{k, j}}, \; j = 1, 2, \cdots, \text{L} \)에서, 또 다른 \( \text{L} \)개는 역방향 모델 \( \overleftarrow{h}_{\text{k, j}}^{\text{LM}}, \; j = 1, 2, \cdots, \text{L} \)에서 얻기 때문이다.
- 이를 \( R_k \)라는 집합으로 나타내면 다음과 같이 나타낼 수 있다.
- 여기서 \( h^{\text{LM}}_{\text{k, j}} \)는 \( h^{\text{LM}}_{\text{k, j}} = [ \overrightarrow{h}^{\text{LM}}_{\text{k, j}} \; ; \; \overleftarrow{h}_{\text{k, j}}^{\text{LM}} ] \)으로 순방향 언어 모델과 역방향 언어 모델의 모든 계층(layer)의 출력값으로 얻은 벡터들을 연결시킨 벡터이다.
- \( h^{\text{LM}}_{\text{k, j}} \)에서 \( j = 0 \)이면 단어 임베딩인 \( x^{\text{LM}}_k \)와 같다.
■ 이것들을 이용해서 다운스트림 테스크를 수행하기 위해 모든 레이어들의 벡터들을 하나의 단일 벡터로 축소한다.(= 1.2에서 본 것처럼 모든 레이어들의 벡터들에 대해 가중합을 수행해서 \( t_k \)에 대한 하나의 ELMo representation을 만든다.) 이에 대한 \( k \)번째 token의 ELMo representation인 \( \text{ELMO}^{\text{task}}_k \)의 식은 다음과 같다.
■ 식을 보면, 각각의 은닉 상태 벡터 \( h^{\text{LM}}_{\text{k, j}} \)에 \( j \)번째 레이어의 가중치인 \( s^{\text{task}}_j \)을 통해 가중합을 만든다.
- 여기서 \( s^{\text{task}}_j \)는 소프트맥스 함수를 통해 정규화된 가중치로 모든 가중치는 0보다 크고 1보다 작으면서, 가중치의 총합은 1이 된다.
■ 그다음, 가중합에 스칼라 매개변수 \( \gamma^{\text{task}} \)는 \( \text{ELMO}^{\text{task}}_k \)를 곱해 벡터의 크기를 조정할 수 있게 한다.
참고) https://www.youtube.com/watch?v=zV8kIUwH32M
'자연어처리' 카테고리의 다른 글
Subword Tokenizer - (2) WordPiece Tokenization (0) | 2025.03.16 |
---|---|
Subword Tokenizer - (1) Byte Pair Encoding(BPE) Tokenization (0) | 2025.03.15 |
Pre-trained Word Embedding (0) | 2025.03.04 |
원-핫 인코딩, 워드 임베딩 (0) | 2025.02.28 |
유사도 (0) | 2025.02.28 |