귀퉁이 서재

NLP - 12. 글로브(GloVe) & 엘모(ELMo) 본문

자연어 처리 (NLP)

NLP - 12. 글로브(GloVe) & 엘모(ELMo)

Baek Kyun Shin 2020. 6. 19. 20:52

글로브(GloVe)

글로브(GloVe, Global Vectors for Word Representation)는 스탠퍼드에서 2014년 개발한 워드 임베딩 방법론입니다. 글로브는 카운트 기반의 LSA와 예측 기반의 Word2Vec의 문제점을 개선하기 위해 탄생했습니다.

LSA는 문서 전체의 통계적인 정보를 활용한다는 장점이 있지만, 단어간 유사도를 측정하기 어렵다는 단점이 있습니다. 반면 Word2Vec은 단어 간 유사도를 측정할 수 있다는 장점이 있지만, 사용자가 지정한 위도우 내에서만, 즉 주변 단어(맥락 단어) 몇 개만 활용하여 결과가 도출되기 때문에 문서 전체의 단어 정보가 반영되기 힘들다는 단점이 있습니다.

글로브는 LSA와 Word2Vec의 장점을 합친 워드 임베딩 방법론으로 단어 간 유사도도 측정할 수 있고 문서 전체의 통계적인 정보도 활용할 수 있습니다.

글로브 방식에 대한 자세한 절차는 생략하겠습니다.

엘모(ELMo)

엘모(ELMo, Embeddings from Language Model)는 2018년에 나온 워드 임베딩 방법론입니다. ELMo은 Word2Vec이나 GloVe가 가지지 못한 장점이 하나 있습니다. 그것은 주변 문맥에 따라 워드 임베딩을 한다는 것입니다. 예를 한번 들어봅시다.

1) 하늘에서 이 내린다.
2) 명상을 하기 위해 을 감았다.

1)의 눈과 2)의 눈은 의미가 다릅니다. 하지만 Word2Vec과 GloVe는 1)과 2)의 눈을 동일한 벡터로 임베딩 합니다. 동음이의어를 동일한 벡터로 임베딩 한다면 성능이 좋지 않겠죠? 하지만 ELMo는 1)의 눈과 2)의 눈에 대해 서로 다른 벡터로 임베딩 합니다. 따라서 자연어 처리 성능이 더 좋아질 수 있습니다. 또한 ELMo는 이미 학습된 (pre-trained) 언어 모델을 이용해 워드 임베딩을 합니다. 

동음이의어에 대해 서로 다른 벡터로 임베딩할 수 있는 이유는 ELMo가 문맥을 고려하기 때문입니다. 따라서 ELMo는contextualized word-embeddings 방법입니다. contextualized word-embeddings는 각 단어에 고정된 벡터를 주는 것이 아니라 문맥을 고려하여 임베딩을 하는 것입니다. ELMo는 임베딩을 할 때 우선 전체 문장을 봅니다. 그리고 이미 학습된 양방향 LSTM(Bidirectional LSTM)을 이용하여 각 단어의 임베딩 벡터를 생성합니다. 

언어 모델링(Language Modeling)

구체적인 ELMo 절차에 대해 살펴보기 전에 언어 모델링에 대해 알아보겠습니다. 언어 모델링(Language Modeling)이란 단어 시퀀스를 입력(input)으로 받았을 때 출력(output)으로 다음 단어를 예측하는 모델링 방법입니다. 세상에는 수많은 텍스트 데이터가 있습니다. 그중 대표적인 것이 위키입니다. 언어 모델은 위키에 있는 모든 단어 시퀀스에 대해 다음 단어로 뭐가 나오는지 학습합니다. 이렇게 학습한 언어 모델로 우리는 다음 단어를 예측할 수 있습니다.

'가는 말이 고와야 오는 말도 ___' 

라는 문장이 있을 때, 이미 학습 완료된 언어 모델은 ___에 들어갈 말에 대해 '곱다'라고 예측할 확률이 '나쁘다'라고 예측할 확률보다 높습니다.

이제 본격적으로 ELMo의 구체적인 절차에 대해 살펴보겠습니다.

biLM(Bidirectional Language Model)

아래는 우리가 언어 모델링할 때 사용하는 일반적인 RNN 형태입니다. 순반향(forward)이며, 시간이 지날수록 은닉층의 가중치는 업데이트됩니다. 가중치가 업데이트되면서 적절한 워드 임베딩 벡터가 만들어집니다. 아래는 은닉층이 2개인 RNN 언어 모델입니다.

출처: https://nlpinkorean.github.io/illustrated-bert/

하지만 ELMo는 위와 같이 순방향 RNN 뿐만 아니라 역방향 RNN도 함께 활용합니다. 양쪽 방향 모두를 사용하는 언어 모델이라 하여 biLM(Bidirectional Language Model)이라고 합니다. 순방향 RNN은 1, 2, 3,... , n-1번째 단어 시퀀스로 n번째 단어를 예측하는 모델이고, 역방향 RNN은 N, N-1,..., n+2, n+1번째 단어 시퀀스로 n번째 단어를 예측하는 모델입니다. (단 N은 문장 전체의 길이)

출처: https://nlpinkorean.github.io/illustrated-bert/

biLM 임베딩 절차

biLM 훈련이 완료되면 은닉층의 임베딩 벡터가 정해졌을 겁니다. 아래 그림을 토대로 stick이라는 단어를 임베딩하는 절차에 대해 설명하겠습니다. 우선 맨 처음 임베딩 층이 있고, 뒤이어 2개의 은닉층이 있습니다. (맨 처음의 임베딩 층은 이미 학습된 언어 모델이 생성한 임베딩 층입니다.) 

출처: https://nlpinkorean.github.io/illustrated-bert/

ELMo의 임베딩 절차는 다음과 같습니다.

1) 순방향 언어 모델과 역방향 언어 모델의 임베딩 층, 2개의 은닉층을 서로 연결시켜줍니다. 2) 그런 다음, 임베딩층, 첫 번째 은닉층, 두 번째 은닉층에 각각 가중치를 곱해줍니다. s₁, s₂, s₃가 각 층에 대한 가중치입니다. 3) 마지막으로 세 벡터를 모두 합쳐줍니다.

이렇게 하면 ELMo를 활용한 워드 임베딩이 완성됩니다. 앞서 설명드렸듯이 ELMo는 양방향 언어 모델을 활용하므로 순방향만 활용하여 Word2Vec, GloVe보다 문맥을 잘 반영합니다.

지금까지 설명한 것을 한번에 표현하면 아래 그림과 같습니다. 

출처: https://brunch.co.kr/@learning/12

E₁, E₂, E₃는 임베딩 층이며, T₁, T₂, T₃는 ELMo를 활용한 최종적인 워드 임베딩 층입니다.

References

Reference1: The Illustrated BERT, ELMo, and co. (How NLP Cracked Transfer Learning)

Reference2: 딥러닝을 이용한 자연어 처리 (엘모)

Reference3: 전이 학습 기반 NLP (1): ELMo

Comments