[DL] 토큰에 의미 부여하기

jul ee·2025년 6월 12일

데이터 성장기

목록 보기
133/139

🖇  왜 Word Embedding이 필요한가?
🖇  1. Word2Vec
🖇  2. FastText
🖇  3. ELMo


앞선 글에서는 자연어처리에서 가장 기초가 되는 작업인 토큰화(Tokenization)에 대해 알아보았다. 이제는 이 토큰들이 기계에게 어떤 방식으로 의미를 가질 수 있도록 만드는지를 이해해야 한다.

기계는 숫자 연산을 통해 데이터를 인지한다. 그렇다면 텍스트로 이루어진 문장을 어떻게 숫자로 바꾸고, 또 의미를 담게 할 수 있을까?

단어 하나하나를 숫자로 변환하는 가장 일반적인 방법은 바로 워드 임베딩(Word Embedding)이다. 이 글에서는 워드 임베딩의 개념과 대표적인 세 가지 임베딩 방식인 Word2Vec, FastText, ELMo를 소개한다. 전체 흐름을 이해하는 데 중점을 두고 작성하였다.




🖇  왜 Word Embedding이 필요한가?

기계는 토큰 자체를 이해하지 못한다.

우리가 "고양이"라는 단어를 보면 귀엽고 털복숭복숭..인 동물을 떠올리지만, 컴퓨터는 "고양이"라는 단어가 어떤 의미를 가지는지 전혀 알지 못한다. 따라서 기계가 이해할 수 있도록 각 단어에 숫자 벡터를 부여해야 한다. 이 벡터가 단어의 의미를 표현하는 수단이 된다.

처음에는 각 단어에 랜덤한 실수값이 할당된다. 이렇게 초기화된 벡터는 의미를 담고 있지 않기 때문에 학습을 통해 단어들 사이의 의미적 유사도관계성이 반영된 방향으로 벡터값을 조정해줘야 한다.

이를 위해 고안된 여러 알고리즘들이 Word Embedding 방식들이다.




🖇  1. Word2Vec

Word2Vec은 "단어를 벡터로 만든다"는 이름 그대로, 단어 하나하나를 벡터 공간에 위치시키는 방법이다.

핵심 아이디어는 간단하다. 어떤 단어가 어떤 단어들과 함께 자주 등장하는지를 보면 그 단어의 의미를 유추할 수 있다는 것이다. 이를 Distributional Hypothesis (분포 가설)이라고 부른다.

예를 들어, "난 오늘 술을 한 잔 마셨어" 라는 문장이 있다고 하자. 이 문장에서 '술'과 '마셨어'는 의미적으로 밀접하게 연결되어 있다. Word2Vec은 이러한 공동 등장(co-occurrence) 패턴을 학습해 단어 간의 관계를 벡터에 반영한다.

학습 방식

Word2Vec에는 두 가지 주요 학습 방식이 존재한다.

CBOW (Continuous Bag of Words)

  • 주변 단어들을 보고 중심 단어를 예측하는 방식

Skip-gram

  • 중심 단어를 보고 주변 단어를 예측하는 방식

CBOW는 학습 속도가 빠르고 일반적인 경우에 잘 작동하지만, Skip-gram은 희귀 단어에 더 강하고, 실제 성능 면에서 조금 더 우세한 것으로 알려져 있다.

Word2Vec은 은닉층 없이 단순한 구조를 사용하고, Softmax나 Negative Sampling을 통해 단어 벡터를 학습하는 방식이기 때문에 일반적으로 Shallow Neural Network로 분류된다.

[참고] 위키독스 Word2Vec

💡 Word2Vec: 단어의 주변을 보면 의미가 보인다.




🖇  2. FastText

Word2Vec은 당연히 약점도 존재한다. 특히 자주 등장하지 않는 희귀 단어는 학습 기회가 적기 때문에 그 벡터는 사실상 거의 초기 상태에서 멈춰버리는 경우도 생긴다.

이를 해결하기 위해 등장한 것이 FastText다.

FastText는 단어를 하위 단위(Subword)로 나누어 처리한다.

예를 들어, 'playing'이라는 단어를 3-gram으로 분해하면 pla, lay, ayi, yin, ing 같은 문자 단위 subword들이 생성되고, FastText는 이들의 벡터 평균으로 단어 임베딩을 구성한다. 이 방식 덕분에 처음 등장하는 단어도 그 하위 정보를 기반으로 의미를 추론할 수 있게 된다.

주요 특징

  • 단어를 일정 길이의 문자 단위로 나눈다 (n-gram)
  • OOV(사전에 없는 단어) 문제에 매우 강함
  • 형태가 유사한 단어는 벡터도 유사하게 생성됨
    -> 기존 Word2Vec이 희귀 단어에 약하고, 단어의 부분 정보를 활용하지 못한다는 점에서 유용하게 작용함
[참고] FastText 설명글

💡 FastText: 단어를 잘게 나누면 의미가 보인다.




🖇  3. ELMo

Word2Vec이나 FastText는 아무리 뛰어나도 고정된 단어 벡터를 사용한다는 점에서 한계를 가진다. 예를 들어, 다음 두 문장을 보자.

  • 탐스럽고 먹음직스러웠던 사과가 이렇게 썩어버리다니
  • 당신이 저지른 실수는 사과한다고 용서될 수 없다

두 문장의 '사과'는 전혀 다른 의미지만 Word2Vec은 이 두 단어를 동일한 벡터로 처리한다. 이를 해결하기 위해 등장한 것이 Contextualized Word Embedding, 문맥 기반 임베딩이다.

ELMo의 등장

2018년에 발표된 ELMo(Embeddings from Language Models)는 문장 속에서 단어가 사용된 문맥 전체를 고려해 단어의 임베딩을 생성한다. 즉, 문장이 달라지면 같은 단어라도 벡터가 달라진다. 이 덕분에 동음이의어 문제나 문맥에 따른 의미 변화를 효과적으로 처리할 수 있다.

ELMo의 작동

ELMo는 양방향 LSTM (Bidirectional LSTM)을 사용해 문장의 앞과 뒤 모두를 고려한다. 최종적으로 다음 세 벡터를 합쳐 단어의 의미를 결정한다.

  • ELMo는각 단어에 대해 embedding 레이어와 양방향 LSTM의 여러 층에서 나온 hidden state들을 조합하여 문맥에 맞는 벡터를 생성한다. 최종 벡터는 이 hidden state들을 학습 가능한 가중치로 결합하여 구성된다.

이렇게 만들어진 벡터는 단어마다 사용된 위치와 문맥에 따라 달라지고, 보다 정교하고 정확한 자연어 처리를 가능하게 해준다.

[참고] 모두의 연구소: ELMo 리뷰

💡 ELMo: 문맥을 반영한 의미 임베딩




인사이트 및 회고

지금까지 텍스트를 숫자로 바꾸는 가장 기초적인 방식인 Word Embedding의 기본 개념들을 정리해 보았다.

  • Word2Vec은 단어 주변의 단어들을 통해 의미를 학습한다.
  • FastText는 단어를 잘게 쪼개어 희귀 단어까지도 유의미하게 표현한다.
  • ELMo는 문맥을 반영해 동음이의어조차 정확히 구분할 수 있다.

이렇게 되면 토큰은 단순 기호가 아니라 의미를 담은 벡터로 표현된다. 이런 벡터 덕분에 기계는 단어 간의 유사성, 문장 내의 관계성, 감정의 흐름까지도 이해할 수 있게 된다.

이 글에서는 워드 임베딩이 무엇이고, 어떤 문제를 해결하며, 왜 발전하게 되었는지를 개념적으로 이해하였다. 각 방식의 내부 구조나 수학적 원리에 대한 이해는 실제로 사용해 보면서 정리해 볼 예정이다.

profile
AI에 관심을 가지고, 데이터로 가치를 만들어 나가는 과정을 기록합니다.

0개의 댓글