[kakao x goorm] 생성 AI 응용 서비스 개발자 양성 과정/회고록

[kakao x goorm] 언어 모델의 흐름과 문맥 임베딩의 진화, ELMo까지

Hoonia 2025. 6. 4. 09:21

자연어처리(NLP)에서는 문장을 이해하기 위해 각 단어가 어떤 의미를 가지는지를 컴퓨터가 ‘표현’할 수 있어야 한다. 이 표현(representation)을 만드는 방식은 오랜 시간 다양한 모델을 통해 진화해 왔고, 오늘은 그 흐름의 핵심 구간—NNLM에서 시작해 BiLSTM, CNN 기반 분류기를 거쳐, 문맥 기반 임베딩인 ELMo까지—를 학습했다.

정적인 단어 임베딩의 한계를 넘어, 문맥(Context)을 반영한 임베딩의 필요성이 어떻게 부각되었는지, 그리고 그것이 ELMo라는 혁신적 접근으로 어떻게 구체화되었는지를 중심으로 정리해본다.

NNLM (Neural Network Language Model): 언어 모델의 신경망 기반 첫걸음

NNLM은 단어를 숫자로 처리하되, 확률적으로 다음 단어를 예측하는 모델이다. 이는 단순한 통계 기반 n-gram 모델의 한계를 넘어서기 위한 초기 시도 중 하나로, 피드포워드 신경망을 통해 다음 단어의 확률 분포를 출력한다.

구조 및 학습 흐름

  1. 입력 단어들을 원-핫 벡터로 변환
  2. 각 원-핫 벡터는 임베딩 행렬과 곱해져 밀집 벡터(Projection Layer)를 형성
  3. 여러 단어의 임베딩을 하나의 벡터로 연결(concatenation)하고 hidden layer를 통과시킴
  4. 출력층에서 Softmax를 통해 다음 단어의 확률 분포를 예측하고, Cross Entropy Loss로 학습

Projection Layer

  • V x M 크기의 임베딩 행렬을 통해 V(어휘 수) 차원의 sparse vector를 M(임베딩 차원) 차원의 dense vector로 변환
  • 각 단어는 이 임베딩 행렬의 한 행(row)과 1:1 매핑되며, 이 lookup은 결국 학습 가능한 파라미터가 된다

한계

  • 입력의 길이가 고정됨 (n개 단어만 사용)
  • 긴 문맥을 반영할 수 없어 문장 전체 구조를 이해하지 못함
  • 단어 순서, 구문 구조 등 복잡한 언어적 특징이 반영되지 않음

BiLSTM: 순환 구조로 문맥을 담다

RNN은 시퀀스 데이터를 처리하는 대표적 구조였지만, LSTM(Long Short-Term Memory)이 등장하면서 긴 문장에 대한 기억 능력이 향상되었다. 여기에 Bidirectional 구조를 도입해, 문장의 앞과 뒤 양방향 정보를 동시에 반영한 모델이 BiLSTM이다.

BiLSTM의 특징

  • 입력 시퀀스를 두 방향(정방향 + 역방향)으로 처리하여 풍부한 문맥 정보를 반영
  • many-to-one 구조로 텍스트 분류 등에 활용 (예: 영화 리뷰 감성 분석)
  • 시간에 따라 순차적으로 단어를 처리하기 때문에 병렬처리에는 제약

BiLSTM의 역할

BiLSTM은 단순히 순차적인 단어 예측을 넘어, 단어의 의미가 앞뒤 단어에 의해 결정되는 문맥 의존성을 학습할 수 있다는 점에서 임베딩 기법의 진화에 큰 기여를 했다. 그러나 여전히 단어 표현을 직접적으로 생성하는 데는 사용되지 않았고, downstream task에만 활용되는 경우가 많았다.

CNN 기반 텍스트 분류: 지역적 문맥 특징 추출

CNN은 이미지 처리에서의 성공 이후 텍스트 처리로도 확장되었는데, 문장을 일종의 2D 행렬로 보고 지역적 패턴을 학습하는 방식으로 사용되었다.

구조

  • 단어 임베딩을 쌓아 n x k 행렬 생성 (n: 문장 길이, k: 임베딩 차원)
  • 다양한 크기의 커널(filter)을 sliding하여 지역 문맥을 포착
  • 1D Convolution으로 한 방향 슬라이딩만 허용
  • Max Pooling으로 가장 강한 특징(feature)을 추출

장점과 한계

  • 병렬 처리에 적합하고 학습 속도가 빠름
  • 지역 문맥은 강하게 잡지만, 전체 문장 구조 파악에는 한계
  • 여전히 단어 의미는 문맥에 따라 고정되지 않음

Word Embedding의 근본적 한계

전통적인 임베딩(Word2Vec, GloVe 등)은 단어를 고정된 벡터로 표현한다. 하지만 실제 언어에서는 같은 단어라도 문맥에 따라 의미가 달라지는 경우가 많다.

예시: play

  • “Let’s play soccer.” → 동작
  • “Watch the play at the theater.” → 연극

하지만 Word2Vec은 이 둘을 동일한 벡터로 처리하기 때문에 중의성 해결이 불가능하며, 이는 downstream task 성능에도 영향을 미친다.

ELMo (Embeddings from Language Models): 문맥을 담는 표현의 시작

ELMo는 이런 한계를 극복하기 위해 등장한 문맥 기반 임베딩(Contextual Embedding) 기법이다. 단어 자체의 의미뿐만 아니라 주변 문맥 전체를 고려하여 단어의 표현을 결정한다.

핵심 구조

  • ELMo는 biLM(Bidirectional Language Model) 구조를 사용
    • 순방향 LSTM: 앞에서 뒤로 문장을 읽음
    • 역방향 LSTM: 뒤에서 앞으로 문장을 읽음
  • 각 단어의 벡터는 이 두 LSTM의 모든 은닉층에서 나온 표현을 선형 결합해 생성

레이어별 표현 차이

  • 하위층: 형태소, 구문 등 구조적 정보
  • 상위층: 의미 해석, 추론, 개체명 인식 등에 필요한 정보
  • 학습 중에는 각 층의 중요도를 학습 가능한 가중치로 조정하여 최적의 조합을 만든다

표현 방식

ELMo는 문맥에 따라 동적으로 임베딩이 변하는 모델이며, 따라서 같은 단어라도 다른 벡터를 가질 수 있다. 이는 곧 문맥 의존 표현의 서막을 연 기술이 되었고, 이후 등장한 BERT와 같은 Transformer 모델의 탄생에 결정적 영향을 주었다.

오늘의 회고

ELMo는 단어 의미 표현 방식의 커다란 전환점을 만들었다. 고정된 벡터 표현에서 문맥에 따라 달라지는 표현으로의 변화는 단지 정확도 향상만이 아니라, 자연어를 바라보는 방식 자체를 근본적으로 바꿨다.

NNLM, BiLSTM, CNN과 같은 모델들은 언어 구조를 학습하는 다양한 시도를 담고 있었지만, 여전히 단어 의미를 문맥에 따라 다르게 표현하는 데 한계를 가졌다. ELMo는 그 간극을 메우는 첫 실질적 시도였고, 이후 자연어처리 기술은 빠르게 Transformer 기반으로 진화하게 된다.