Deep Contextualized Word Representations
2018년은 기계학습 기반 자연어 처리 분야에 있어서 의미 있는 해였습니다. 2015년 이후로 컴퓨터 비전 분야에서 전이 학습(transfer learning)이 유행하기 시작한 이후로, 자연어 처리 분야에서도 유사한 트렌드가 시작된 해였기 때문입니다. 그리고 이러한 변화의 중심에는 언어 모델(language model)이 자리하고 있습니다.
총 세 편의 포스팅에 걸쳐서, 자연어 처리 분야에서 언어 모델을 이용한 전이학습이 어떻게 트렌드를 바꾸었는지 살펴보기 위해, 큰 영향을 끼쳤던 논문들을 하나씩 리뷰하려고 합니다. 이 포스팅에 첫 번째로 다룰 내용은, “Deep Contextualized Word Representation (NAACL 2018)” [1] 으로, ELMo라는 이름으로 더 잘 알려져 있기도 합니다. 이 논문은 전이 학습을 이용한 어휘 임베딩 방법을 제안합니다.
사실, “언어를 모델링한다(Modeling Language)”는 말은 매우 어렵고 거창한 일입니다. 자연어(natural language)에서 사용되는 어휘의 의미나 사용방식은 정확하게 정의되기 어려운데, 이는 사람의 언어가 ‘디자인’ 된 것이 아니라, 의사소통을 위해 자연스럽게 발생(emerge)했기 때문입니다.
물론, 인간의 언어는 어느 정도 규칙성이 존재하며, 언어학자들은 이러한 규칙을 밝혀내기 위해 수많은 노력을 기울였습니다. 그러나 이러한 규칙을 발견하는 것은 매우 어려울 뿐만 아니라, 규칙에 어긋나는 예외 상황은 쉽게 발견할 수 있습니다. 언어는 이렇듯 다소 불분명하고 애매한 부분이 존재함에도 불구하고, 사람들은 언어를 통한 의사소통에 별다른 불편함을 느끼지 못합니다.
이러한 규칙을 언어학적 접근 대신, 통계적인 방법을 활용해 귀납적으로 학습하고자 하는 방법이 통계적 언어 모델링(statistical language modeling)입니다. 이어지는 포스팅에서는 이를 줄여서 언어 모델링(language modeling)이라고 부르도록 하겠습니다. 언어 모델링(language modeling)은 매우 단순합니다. 예시를 통해 설명하겠습니다. 아래와 같은 4개의 단어로 구성된 문장이 있다고 합시다.
“나는 오늘 학교에 갔다.”
언어 모델링(language modeling)은 이러한 문장이 주어졌을 때, 이 문장 안에서 다음에 나타날 단어를 정확하게 예측하는 것입니다. 구체적으로, 이 문장에서 “나는 오늘 학교에”라는 세 개의 단어가 주어지면, 그 다음에 올 단어 “갔다”를 정확하게 예측하는 모델을 만드는 것입니다. 좀 더 일반화하면, 언어 모델링은 주어진 문장의 시작 부분부터 n개의 단어를 관측한 다음, n+1번째에 어떤 단어가 올지 예측하는 과제입니다. 만약 어떤 언어 모델이 n+1번째 단어를 보다 정확하게 예측할 수 있다면, 이러한 모델은 언어의 전반적인 특징을 학습했다고 볼 수 있을 것입니다. 즉, 언어를 (통계적으로) ‘모델링’한 것입니다.
과거에는 이를 위해 잠재 마코프 모델(Hidden Markov Model) 혹은 얕은(shallow) 인공신경망 모형이 활용되곤 했습니다. 그런데 깊은(deep) 인공신경망 모형이 기계학습 분야의 대세로 떠오르면서, 순환형 인공신경망(Recurrent Neural Network)이 언어 모델링을 위해 널리 사용되기 시작했습니다. RNN은 이러한 과제에 매우 효과적이어서, LSTM에 정규화(Regularization)를 잘 적용하는 것만으로도 충분히 언어 모델링 과제를 잘 수행할 수 있다는 연구결과 또한 최근 발표되기도 했습니다. [2]
하지만, 언어 모델(language model)은 오랜 기간 동안 모델 그 자체로는 별다른 실용적 가치를 갖지 못하고 있었습니다. 어떤 언어 모델이 아무리 잘 학습되었다고 한 들, 그럴듯한 문장을 만들어내는 것 이외에는 딱히 사용할 만한 곳을 찾기 힘들었기 때문입니다. 언어 모델보다는 확실한 실용적 가치를 기대할 수 있는 기계 번역(Machine Translation), 질의 응답(Question & Answering)이 인기를 끈 것도 비슷한 맥락입니다.
그런데 2018년 들어, 언어의 전반적인 특징을 학습한 언어 모델을 다양한 자연어 처리 과제에 활용할 경우 큰 폭의 성능 향상을 보인다는 결과들이 보고되며, 언어 모델은 이제 실용적 가치를 갖기 시작했습니다. 다양한 언어의 특성을 학습한 기학습된(pre-trained) 언어 모델의 지식을 전이(knowledge transfer)하면, 내가 목표하고자 하는 다른 자연어처리 과제에 효과적이라는 것입니다.
ELMo는 기학습된 언어 모델을 이용해 어휘 임베딩을 생성하는 방법입니다. 그리고 ELMo가 주목을 받게된 이유는 성능뿐만 아니라, 어휘 임베딩을 주변 단어 맥락에 따라서 자연스럽게 바꿀 수 있게 되었기 때문입니다. 이는 언어 모델을 활용함으로써 가능해진 결과입니다.
(문제) 지금까지 발표되었던 수많은 어휘 임베딩 방법들은, 주변 맥락 단어를 학습할 때만 고려할 뿐, 맥락 단어를 어휘 임베딩을 다른 모델의 입력으로써 사용할 때 고려하지는 않았습니다. 좀 더 구체적으로 설명하면, FastText를 위시한 수많은 어휘 임베딩 방법들은 학습이 끝난 뒤에는 어휘 임베딩이 변하지 않습니다. 어휘와 임베딩 벡터는 1:1 매칭이 되는 관계로, 이러한 임베딩에서 어떤 정보를 활용할 것인지는 또다른 모델의 몫이었습니다.
생각해보면, 현실에서 사용되는 언어에서 어휘의 의미는 고정된 것이 아니라, 맥락에 따라 가변적입니다. 어휘 중에는 다양한 동음이의어와 다의어가 존재하기 때문입니다. 아래 세 개의 문장에서 ‘머리’는 다양한 의미를 가집니다.
“나는 머리를 끄덕였다.”
“나는 머리를 짧게 깎았다.”
“나는 머리가 좋아서 공부를 잘한다.”
FastText 등의 어휘 임베딩 방법은, 예시 문장들의 ‘머리’라는 어휘에 대해 하나의 임베딩 벡터를 할당합니다. 그리고 임베딩 벡터가 잘 학습되었다면 하나의 벡터가 ‘머리’에 대한 다양한 의미를 모두 포괄할 것이지만, 실제로 ‘머리’의 의미는 주변 단어의 맥락에 대해서 가변적이고, 실제 어휘가 사용되는 맥락과 관련 없는 정보는 불필요합니다.
따라서 ELMo는 임베딩을 사용할 때도 해당 벡터가 주변 단어에서 추론된 맥락 정보에 따라 가변적일 수 있도록 만들었다는 의미에서 맥락화된 어휘 임베딩(Contextualized Word Embedding)이라는 표현을 쓰게 됩니다. 그리고 이것을 가능하게 만드는 것이 언어 모델입니다. 모델의 구조는 아래와 같습니다.
(모델) ELMo는 언어 모델로써 양방향 LSTM(biLM)를 이용합니다. 순방향 LSTM(그림, 왼쪽 파란색 Lstm)은 언어 모델링 과제에서 LSTM을 사용하는 것과 동일한 방식으로 학습됩니다. 주어진 문장에서 시작부터 n개의 단어를 보고, n+1번째 단어를 맞추게 됩니다. 역방향 LSTM(그림, 오른쪽 파란색 Lstm)은 이와 반대로, 주어진 문장의 끝부터 n개의 단어를 역순으로 보고, n-1번째 단어를 맞추게 됩니다. 그리고 각 LSTM은 서로의 잠재 상태(hidden state)를 공유하지 않고, 학습할 때 로그 우도를 동시에(jointly) 최대화하는 방식으로 학습됩니다.
물론, 언어 모델을 학습할 때는 양방향 LSTM이 생성한 잠재 상태(hidden state)를 이어 붙인 벡터(그림, 위 초록색 T1...Tn)를 토대로 하는 소프트맥스 레이어를 통해 예측하고자 하는 단어를 맞추게 되는데, 임베딩을 생성할 때는 이 레이어는 제거됩니다. 또한, 양방향 LSTM은 입력으로 기존 어휘 임베딩을 사용(그림, 노란색 E1...En)합니다.
그리고 ELMo는 다른 모델에 사용될 어휘 임베딩 벡터를 구성하기 위해 이 모든 정보를 종합하여 사용합니다. 기존 어휘 임베딩(노란색), 순방향 LSTM의 잠재 상태(왼쪽 파란색), 역방향 LSTM의 잠재 상태(오른쪽 파란색)을 모두 종합하여 이어 붙인 벡터가 ELMo 임베딩이 됩니다.
그리고 이를 언어 모델의 LSTM 레이어 별로 가중치를 두고 더하게 되는데, 이 가중치는 소프트맥스 레이어로 정규화(normalization)된 가중치이며, 이 값은 사용자가 ELMo 임베딩을 사용하고자 하는 과제에 맞추어 학습됩니다. 즉, 이는 과제가 사용하는 모델이 ELMo 임베딩에 어떤 파트에 주의(attention)를 기울일지 가중치를 주는 부분이라고 이해할 수 있습니다.
이렇게 어휘 임베딩을 생성하는 모델을 디자인한 결과, 어휘가 문맥에 따라 서로 다른 임베딩을 갖는 것이 가능해졌습니다. 주어진 어휘 왼쪽에 있는 맥락 정보는 순방향 LSTM의 잠재 상태에 반영되었을 것이며, 오른쪽에 있는 맥락 정보는 역방향 LSTM의 잠재 상태에 반영되었을 것입니다.
(결과) 자연어처리 분야의 다양한 과제에 대해 기존의 어휘 임베딩 대신 ELMo 임베딩을 사용한 결과, 널리 알려진 6가지 과제에 대해 기존 최고성능을 모두 뛰어넘었습니다.
Question & Answering : SQuAD 데이터셋을 사용합니다. 기존 모델에 비해 4.7% 정확도 향상을 보였습니다.
Textual Entailment : 두 개의 주어진 문장 A, B에 대한 추론 과제입니다. 기존 성능 대비 0.7%의 정확도 향상을 보였고, 이는 기존 모델보다 오류를 24.9% 감소시킨 결과입니다.
Semantic Role Labeling : 주어진 문장 속의 어휘/구에 대해, 의미적 역할을 레이블링 하는 과제입니다. 기존 모델 대비 3.2%의 성능 향상을 보였고, 이는 5.8%의 오류를 감소시킨 것입니다.
Coreference Resolution : 문장에서 동일한 객체(entity)를 가리키는 어휘/표현을 찾는 과제입니다. 기존 모델 대비 3.2% 정확도 향상, 9.8%의 오류가 감소했습니다.
Named Entity Recognition : 개체명 인식 과제입니다. 2.06% 정확도 향상 및 21%의 오류 감소를 달성했습니다.
Sentiment Analysis : 감성 분석 과제입니다. 주어진 문장이 긍정/부정 감성을 갖는지를 분류합니다. 3.3%의 정확도 향상 및 6.8% 오류 감소를 달성합니다.
(의미) 기학습된 언어 모델을 활용해 어휘 임베딩을 생성하면 어휘 임베딩을 맥락화할 수 있고, 이를 다양한 자연어처리 과제를 수행하는 인공신경망 모델의 입력으로 사용했을 때, 눈에 띄는 성능 향상을 가져올 수 있다는 점을 보여주었습니다. 이는 기학습된 언어 모델의 지식을 임베딩으로 전이하는 것으로 볼 수 있습니다.
연구자들은 논문에서 이러한 주장에 대한 근거로, 언어 모델의 각 레이어 별로 서로 다른 언어 표상을 내재함을 보여줍니다. 언어 모델의 첫 번째 레이어는 구문적(syntactic) 정보를 상대적으로 많이 포함하고 있으며, 두 번째 레이어는 의미적(semantic) 정보를 상대적으로 더 많이 포함하고 있음을 보이고, 이에 따라 다양한 자연어처리 과제들이 ELMo 임베딩의 서로 다른 부분을 선호한다는 것을 보이고 있습니다.
더 나아가, 언어 모델을 사용하면 어휘 임베딩의 성능이 높아지기 때문에, 다양한 자연어처리 과제가 충분한 성능을 내기 위해 필요한 학습 셋(training set) 크기가 줄어든다는 점 또한 보여주고 있습니다. 이러한 부분은 전이 학습을 활용한 모델에서 공통적으로 나타나는 장점으로, 이제 레이블링이 다소 어려웠던 다양한 과제에 대하여, 지도학습 기반 인공신경망 모형을 좀 더 쉽게 적용할 수 있게 되었음을 시사합니다.
[1] https://aclweb.org/anthology/N18-1202
[2] Regularizing and Optimizing LSTM Language Models (ICLR 2018)