AI VIDEO BRIEFING

워드 임베딩과 word2vec 원리: 단어를 숫자로 바꾸는 신경망 쉽게 이해하기

비슷한 단어에 비슷한 숫자를 부여하는 워드 임베딩의 원리를, 다음 단어를 예측하는 간단한 신경망과 word2vec의 CBOW·스킵그램·네거티브 샘플링으로 설명합니다.

단어를 숫자로: 워드 임베딩과 word2vec을 쉽게 풀어보기 영상 대표 이미지

핵심 메시지

  • 머신러닝과 신경망은 단어를 직접 다루기 어렵기 때문에 단어를 숫자로 바꿔야 하며, 무작위 숫자 대신 비슷한 단어에 비슷한 숫자를 주는 것이 핵심이다.
  • 간단한 신경망을 학습해 임베딩을 얻을 수 있다. 다음 단어를 예측하도록 학습하면 입력에서 활성화 함수로 가는 연결 가중치가 곧 각 단어의 임베딩이 된다.
  • 같은 맥락에 등장하는 단어들은 역전파를 거치며 가중치가 가까워져, 그래프에서 서로 비슷한 위치에 모인다.
  • word2vec은 맥락을 더 담기 위해 주변 단어로 가운데를 맞히는 CBOW와 가운데로 주변을 맞히는 스킵그램을 쓰고, 네거티브 샘플링으로 학습을 가속한다.

쉽게 이해하기

단어는 생각을 전달하는 훌륭한 도구지만, 신경망을 포함한 많은 머신러닝 알고리즘은 단어를 그대로 잘 다루지 못한다. 그래서 단어를 숫자로 바꿔야 한다. 가장 단순한 방법은 각 단어에 무작위 숫자를 배정하는 것인데, 이렇게 하면 "great"와 "awesome"처럼 의미와 쓰임이 비슷한 단어가 전혀 다른 숫자를 갖게 된다. 그 결과 신경망은 한 단어를 잘 처리하는 법을 배워도 비슷한 다른 단어에 도움을 받지 못해 더 많은 복잡도와 학습이 필요해진다.

그래서 비슷하게 쓰이는 단어에 비슷한 숫자를 주는 편이 좋다. 또 같은 단어도 맥락에 따라 다르게 쓰이므로 단어 하나에 숫자를 여러 개 부여하면 더 유연해진다. 예컨대 "great"가 긍정적으로 쓰일 때와 비꼬는 부정적 의미로 쓰일 때를 각각 다른 숫자로 추적할 수 있다. 이 모든 작업을 간단한 신경망이 대신 해줄 수 있다는 것이 핵심이다.

동작 원리는 이렇다. 학습 데이터의 고유 단어마다 입력을 만들고, 각 입력을 활성화 함수(여기서는 항등 함수라 덧셈을 위한 자리 역할만 함)에 연결한다. 활성화 함수의 개수가 한 단어에 배정할 숫자의 개수가 된다. 다음 단어를 예측하도록(예: "Troll 2"로 "is"를 예측) 출력과 소프트맥스, 교차 엔트로피 손실로 역전파해 가중치를 최적화한다. 이때 입력에서 활성화 함수로 가는 가중치가 바로 그 단어의 임베딩이다.

학습 전에는 "Troll 2"와 "Gymkata"가 다른 단어들과 별 차이 없이 흩어져 있지만, 둘이 같은 맥락("...is great!")에 등장하기 때문에 역전파를 거치면 가중치가 비슷해져 그래프에서 서로 가까워진다. 학습이 끝나면 각 단어로 다음 단어를 정확히 예측하게 되고, 비슷한 단어가 비슷한 임베딩을 갖게 되어 언어 처리 신경망의 학습이 한결 쉬워진다.

word2vec은 맥락을 더 풍부하게 담기 위해 두 가지 전략을 쓴다. CBOW(연속 단어 가방)는 주변 단어로 가운데 단어를 예측하고, 스킵그램은 가운데 단어로 주변 단어를 예측한다. 실제로는 활성화 함수 2개가 아니라 100개 이상을 써 단어마다 임베딩을 많이 만들고, 위키피디아 전체 같은 대규모 데이터로 약 300만 개 단어·구를 다룬다. 이때 총 가중치가 6억 개에 이르러 학습이 느려지므로, 예측하지 않을 단어 일부만 골라 최적화하는 네거티브 샘플링으로 한 단계당 최적화할 가중치를 크게 줄여 속도를 높인다.

주요 인사이트

  • 임베딩의 목적은 "비슷한 단어 → 비슷한 숫자"다. 그래야 한 단어의 쓰임을 배운 것이 비슷한 단어 학습에도 도움이 되어 언어 모델 학습이 쉬워진다.
  • 임베딩은 별도의 신비한 산물이 아니라, 다음 단어 예측 신경망에서 입력→활성화 함수 연결에 붙은 학습된 가중치 그 자체다.
  • 단어 하나에 숫자를 여러 개 두면 긍정/부정처럼 같은 단어의 다른 맥락을 서로 다른 차원으로 구분해 담을 수 있다.
  • 같은 맥락에서 함께 등장한다는 사실만으로도 역전파가 두 단어의 임베딩을 가깝게 끌어당긴다 — 의미 유사성을 사람이 일일이 지정할 필요가 없다.
  • 네거티브 샘플링은 예측하지 않을 단어를 2~20개만 무작위로 골라 최적화 대상에서 나머지를 빼는 방식으로, 6억 개 가중치 중 한 단계에 300개 정도만 갱신해 대규모 어휘 학습을 현실화한다.

자주 묻는 질문

단어를 무작위 숫자로 바꾸면 왜 안 되나요?

의미와 쓰임이 비슷한 단어("great", "awesome")가 전혀 다른 숫자를 갖게 되어, 한 단어를 잘 처리하는 법을 배워도 비슷한 단어 처리에 도움이 되지 않습니다. 그만큼 신경망에 더 많은 복잡도와 학습이 필요해집니다.

임베딩은 신경망의 어느 부분에서 나오나요?

다음 단어를 예측하도록 학습하는 신경망에서, 입력 단어로부터 활성화 함수로 이어지는 연결의 가중치가 곧 그 단어의 임베딩입니다. 활성화 함수 개수가 단어당 숫자(차원) 개수를 결정합니다.

CBOW와 스킵그램의 차이는 무엇인가요?

CBOW(연속 단어 가방)는 주변 단어들로 가운데 단어를 예측하고, 스킵그램은 반대로 가운데 단어로 주변 단어들을 예측합니다. 둘 다 단어의 맥락을 더 풍부하게 담기 위한 word2vec의 전략입니다.

네거티브 샘플링은 무엇을 해결하나요?

대규모 어휘에서는 가중치가 수억 개에 달해 학습이 느립니다. 네거티브 샘플링은 예측하지 않을 단어를 소수(보통 2~20개)만 무작위로 골라 최적화함으로써, 한 단계에 갱신할 가중치 수를 크게 줄여 학습을 빠르게 만듭니다.

원문과 출처

이 글은 원본 영상의 자막을 바탕으로 한국어 독자를 위해 요약했습니다. 전체 맥락과 최신 정보는 원문에서 확인하세요.

YouTube 원본 영상 보기 ↗

관련 AI 소식