들어가기전에..
자연어 처리(NLP)를 공부하다 보면 Word2Vec이라는 이름을 정말 자주 보게 됩니다.
Word2Vec은 한 문장으로 말하면 아래와 같습니다.
단어를 숫자 벡터(임베딩)로 바꿔서, 의미가 비슷한 단어끼리 벡터 공간에서 가깝게 만들도록 학습하는 방법
이 글에서는 Word2Vec이 왜 필요한지, 어떤 방식(CBOW/Skip-gram)으로 학습하는지, 그 것의 장단점은 뭔지까지 처음 배우는 관점에서 정리해보겠습니다.
왜 굳이 단어를 ‘벡터’로 바꿔야 할까?
컴퓨터는 텍스트를 그대로 이해하지 못합니다. 그렇기 때문에 결국 숫자로 바꿔야 하죠.
이를 위해 가장 단순한 방법은 원-핫 인코딩(One-hot)입니다.
예를 들어 단어 사전이 10,000개면, 각 단어를 길이 10,000짜리 벡터로 표현하게 됩니다.
- “사과” → [0,0,0, …, 1, …,0]
- “바나나” → [0,0,0, …, 1, …,0]
하지만 원-핫은 큰 문제가 있어요.
- 너무 차원이 크다 (단어 수만큼 차원이 늘어남)
- 단어 간 의미 관계가 표현되지 않는다 (“사과”와 “바나나”는 둘 다 과일인데, 원-핫에서는 완전히 다른 축이라 유사도가 0에 가깝다)
그래서 등장한 것이 임베딩입니다. 단어를 예를 들어 100차원, 300차원의 빽빽한(dense) 실수 벡터로 바꿔서 의미가 비슷한 단어는 가까운 벡터가 되도록 만드는 것이죠.
Word2Vec이 의미를 학습하는 방식 - 같은 문맥이면 비슷한 의미다
Word2Vec은 아래 가설 위에서 동작합니다.
같은 문장/주변 단어(문맥)에 자주 같이 등장하는 단어들은 의미가 비슷하다.
예를 들어 “고양이”는 “야옹”, “애완”, “털”, “귀엽다” 같은 단어와 자주 같이 등장합니다.
“강아지”도 비슷한 문맥에서 많이 등장하죠. 그래서 Word2Vec을 학습하면 “고양이”와 “강아지” 벡터가 가까워지는 식입니다.
Word2Vec의 두 가지 모델: CBOW vs Skip-gram
Word2Vec은 크게 두 가지 학습 방식이 유명합니다.
CBOW (Continuous Bag of Words)
주변 단어(문맥)를 보고 가운데 단어를 맞추는 방식입니다.
예를 들어 아래 문장 일부가 있다고 해봅시다.
“나는 오늘 ___ 를 먹었다”
주변 단어가 “나는 / 오늘 / 먹었다”라면, 빈칸이 “사과”일 확률이 높아집니다.
CBOW는 이런 식으로 주변 단어 → 중심 단어를 예측하도록 학습하.
- 장점: 학습이 빠르고 안정적
- 단점: 희귀 단어(자주 안 나오는 단어)에 약할 수 있음
Skip-gram
가운데 단어를 보고 주변 단어를 맞추는 방식입니다.
예를 들어 중심 단어가 “사과”라면, 주변에 “먹었다”, “맛있다”, “과일” 같은 단어가 등장할 확률이 높아집니다.
Skip-gram은 중심 단어 → 주변 단어들을 예측하도록 학습하죠.
- 장점: 희귀 단어에도 비교적 강함
- 단점: 계산량이 더 크고 학습이 느릴 수 있음
데이터가 작거나 희귀 단어도 중요하면 Skip-gram, 속도와 효율이 더 중요하면 CBOW를 고려합니다.
임베딩 공간에서의 유사도와 의미 관계 - 단어 유사도와 벡터 연산
Word2Vec으로 학습한 뒤에는 단어 간 유사도를 벡터로 계산할 수 있습니다. 보통 코사인 유사도(Cosine Similarity)를 쓰죠.
- 유사도가 높다 → 의미가 비슷할 가능성이 크다
- 유사도가 낮다 → 의미가 다를 가능성이 크다
그리고 Word2Vec이 유명해진 이유 중 하나가 벡터 연산 예시 입니다.
- king - man + woman ≈ queen
이게 항상 완벽히 맞는 건 아니지만 관계/방향성이 벡터 공간에 어느 정도 반영되는 게 관찰됩니다.
Word2Vec의 장점
- 단어를 의미 기반으로 표현할 수 있음
- 단어 유사도, 클러스터링 등 다양한 작업에 유용
- 차원이 작고(dense) 계산이 효율적
- 많은 NLP 파이프라인의 기본 개념(임베딩)을 이해하는 데 최적의 출발점
Word2Vec의 한계
Word2Vec은 단어마다 하나의 벡터만 갖게 되서 문맥에 따라 의미가 달라지는 단어에 약합니다.
예를 들면 아래와 같은데
- 은행 = 금융기관 / 강가(강둑)
- Word2Vec은 은행을 1개 벡터로만 표현 → 두 의미를 구분하기 어려움
이 한계를 해결하려고 나온 흐름이 문맥 기반 임베딩(Contextual Embedding)이고, 대표적으로 BERT 계열이 있습니다.
그리고 또 다른 한계로는 아래와 같은데
- 학습 데이터에 없는 단어(OOV: Out-Of-Vocabulary)에 약함
- (이를 보완하는 대표 기법이 FastText처럼 서브워드(subword)를 쓰는 방식)
그럼 Word2Vec은 언제 쓰면 좋을까요?
요즘은 문장 임베딩이나 LLM 기반 임베딩이 강력해서 무조건 Word2Vec은 아닙니다만, 그럼에도 불구하고 Word2Vec이 유용한 상황이 있습니다.
- 단어 수준의 유사도/관계가 중요할 때
- 데이터가 비교적 단순하고 모델을 가볍게 가져가고 싶을 때
- 임베딩의 기본 원리를 이해하고 싶은 학습 단계
Word2Vec은 단어를 벡터로 만들고, 의미가 비슷한 단어를 가깝게 배치한다는 아이디어를 아주 깔끔하게 구현한 모델입니다.
CBOW/Skip-gram이라는 두 방식만 이해해도 임베딩이 왜 중요한지와 이후 NLP 모델들이 무엇을 개선해왔는지 흐름이 잡힐 겁니다.
'AI' 카테고리의 다른 글
| [바미] 백엔드 관점에서 정리한 LLM 개념들 (1) | 2026.01.25 |
|---|