반응형

NNLM의 한계를 극복하기 위해 탄생한, 단어 임베딩의 대표 주자 Word2Vec에 대해 설명하고 있습니다. 시험에 나올 모든 핵심 포인트를 완벽하게 정리해 드릴게요.

1. Word2Vec의 핵심 아이디어

Word2Vec은 NNLM의 비효율적인 문제를 해결하고, 오직 **'좋은 단어 임베딩을 빠르게 학습하는 것'**에만 집중하기 위해 탄생했습니다.

  • 핵심 전략 (NNLM과의 차이점) ★★★★★:
    1. 은닉 계층(Hidden Layer) 제거: NNLM의 가장 큰 속도 저하 원인이었던 복잡한 은닉 계층을 과감히 없앴습니다.
    2. 예측 모델 최소화: '다음 단어 맞추기'라는 어려운 언어 모델링 대신, 단어 임베딩 학습에 더 효과적인 단순한 '가짜 문제(Fake Task)'를 풀도록 만들었습니다.
  • 두 가지 학습 방식 제안: Word2Vec은 이 '가짜 문제'를 푸는 두 가지 방식을 제안했습니다.
    1. CBOW (Continuous Bag of Words): 주변 단어들을 보고 중심 단어를 예측하는 방식입니다. (빈칸 채우기 문제)
    2. Skip-gram: 중심 단어를 보고 주변 단어들을 예측하는 방식입니다. (하나의 단어로 여러 단어 연상하기)

2. CBOW (Continuous Bag of Words) 모델 상세 분석

CBOW는 "빈칸에 들어갈 단어는 무엇일까?"를 맞추는 방식으로 학습합니다.

  • 학습 목표: 주변 단어(Context Words)를 입력으로 받아, 중심 단어(Center Word)를 예측합니다.
  • 예시: [고양이가, 소파, 위에, 앉았다] 라는 문장에서 윈도우 크기=1 이라면,
    • [고양이가, 위에]가 주어졌을 때 소파를 맞추는 문제를 풉니다.
    • [소파, 앉았다]가 주어졌을 때 위에를 맞추는 문제를 풉니다.
  • CBOW의 구조와 특징:
    1. 은닉 계층 제거: 그림에서 볼 수 있듯, NNLM과 달리 복잡한 은닉 계층이 없습니다. 이로 인해 계산 속도가 엄청나게 빨라졌습니다.
    2. 투사 계층 (Projection Layer): NNLM과 마찬가지로, 각 단어의 임베딩 벡터가 저장된 Lookup Table이 존재합니다.
      • 작동 방식: 주변 단어들('고양이가', '위에')의 임베딩 벡터를 각각 꺼내온 뒤, 이 벡터들의 **평균(average) 또는 합(sum)**을 구합니다. 이렇게 합쳐진 하나의 벡터가 '문맥 전체의 의미'를 나타내게 됩니다.
    3. Bag-of-Words 특징 (★★★★★):
      • 주변 단어 벡터들의 평균을 내는 과정에서 원래 단어들의 순서 정보는 사라집니다.
      • [고양이가, 위에]의 문맥 평균 벡터와 [위에, 고양이가]의 문맥 평균 벡터는 동일합니다.
      • 이처럼 단어의 순서를 무시하고 '단어들의 단순한 집합(가방)'으로 취급하기 때문에 'Bag of Words' 라는 이름이 붙었습니다.

시험 대비 최종 요약

  • Word2Vec의 목표: 효율적인 단어 임베딩 학습.
  • 핵심 전략: NNLM의 은닉 계층을 제거하여 속도를 향상시킴.
  • CBOW란?: 주변 단어중심 단어를 예측하는 모델. (빈칸 채우기)
  • CBOW의 핵심 작동 방식: 주변 단어들의 임베딩 벡터를 평균내어 문맥 벡터를 만들고, 이 문맥 벡터로 중심 단어를 예측한다.
  • CBOW의 특징: 단어 순서를 무시하는 'Bag-of-Words' 모델이다.

 

Word2Vec의 CBOW 모델이 구체적으로 어떻게 작동하는지 그 내부 과정을 상세히 보여주고 있습니다. 시험에 나올 수 있는 모든 단계를 완벽하게 이해할 수 있도록 자세히 설명해 드릴게요.

1. CBOW 학습 데이터 생성 및 Window Size의 의미

CBOW 모델을 학습시키려면, 먼저 문장에서 학습 데이터를 만들어야 합니다.

  • 학습 데이터 생성: 하나의 문장이 주어지면, **윈도우(Window)**를 왼쪽에서 오른쪽으로 한 칸씩 이동시키면서 (주변 단어들, 중심 단어) 쌍을 계속 만들어냅니다. 슬라이드의 예시처럼 "The fat cat sat on the mat" 문장 하나에서 여러 개의 학습 데이터가 생성됩니다.
  • Window Size의 의미 (★★★★★): 윈도우 크기는 임베딩의 성격을 결정하는 중요한 하이퍼파라미터입니다.
    • 윈도우가 작으면 (e.g., 1~2): 모델은 단어의 바로 앞뒤 관계에 집중하게 됩니다. 이는 **문법적인 관계(Syntactic Relationship)**를 학습하는 데 유리합니다. (e.g., 관사 뒤에는 명사가 온다)
    • 윈도우가 크면 (e.g., 5~10): 모델은 좀 더 넓은 범위의 단어들을 문맥으로 학습합니다. 이는 하나의 **주제(Topic)를 공유하는 의미적 관계(Semantic Relationship)**를 학습하는 데 유리합니다. (e.g., '축구'라는 단어 주변에 '선수', '경기장', '골' 등이 나타나는 관계)

2. CBOW 모델의 상세한 작동 과정 (Forward Pass)

입력으로 주변 단어들이 들어와서 어떻게 중심 단어를 예측하는지 단계별로 살펴봅시다.

1단계: 투사 계층 (Projection Layer) - 단어를 벡터로

  • 입력: 주변 단어들은 각각 **원-핫 벡터(One-hot vector)**로 표현됩니다. 원-핫 벡터는 단어사전 크기의 벡터에서 해당 단어의 위치만 1이고 나머지는 모두 0인 비효율적인 벡터입니다.
  • 가중치 행렬 W (Input Weight Matrix): CBOW 모델은 V x M 크기의 가중치 행렬 W를 가지고 있습니다.
    • V: 단어사전의 크기 (e.g., 10,000)
    • M: 우리가 만들고 싶은 임베딩 벡터의 차원 (e.g., 100)
    • 이 행렬 W가 바로 우리가 최종적으로 얻고 싶은 **단어 임베딩 행렬(Lookup Table)**입니다. W의 각 행은 특정 단어의 임베딩 벡터를 의미합니다.
  • 계산: 입력으로 들어온 원-핫 벡터와 가중치 행렬 W를 곱합니다 (W^T * x). 이는 사실상 원-핫 벡터에서 1인 위치에 해당하는 W의 행 벡터를 그대로 꺼내오는(Look-up) 것과 같습니다.
    • 결과: 각 주변 단어는 자신만의 M차원짜리 밀집 벡터(임베딩 벡터)로 변환됩니다.

2단계: 문맥 벡터 생성 - 벡터들의 평균

  • 계산: 1단계에서 얻은 모든 주변 단어들의 임베딩 벡터들을 모두 더한 뒤, 단어의 개수만큼 나누어 평균을 냅니다.
  • 결과: 주변 단어들의 의미가 종합된 단 하나의 문맥 벡터(Context Vector) v̂ 가 만들어집니다. 이 과정 때문에 CBOW는 주변 단어의 순서를 고려하지 않는 Bag-of-Words 모델이 됩니다.

원핫 벡터에서 1이 있는 위치가 바로 W 행렬에서 가져올 **행의 번호(index)**가 됩니다.

  • cat의 원핫 벡터가 [0, 1, 0, 0, ...] 이면, W 행렬의 2번째 행을 그대로 가져옵니다.
  • name의 원핫 벡터가 [1, 0, 0, 0, ...] 이면, W 행렬의 1번째 행을 그대로 가져옵니다.

이것이 바로 투사(Projection)의 실제 작동 방식입니다.


2. 가져온 벡터들 합치기 (Combining)

가져온 두 개의 벡터를 더하는 것이 맞습니다. 하지만 CBOW 모델의 표준적인 방식은, 단순히 더하는 것에서 끝나는 것이 아니라 더한 후에 벡터의 개수로 나누어 '평균'을 냅니다.

최종 문맥 벡터 = (V_cat + V_on) / 2

왜 '평균'을 낼까요?

만약 윈도우 크기가 커져서 주변 단어가 4개가 되면 벡터 4개를 더해야 하고, 2개이면 2개만 더하게 됩니다. 이렇게 되면 주변 단어의 개수에 따라 최종 벡터의 크기가 계속 달라지게 됩니다.

평균을 내면 주변 단어가 몇 개이든 상관없이 항상 일관된 크기의 벡터를 얻을 수 있으며, 이는 **'주변 단어들의 평균적인 의미'**를 더 잘 나타냅니다.

결론적으로, 전체 과정은 이렇습니다.

  1. 주변 단어 각각에 대해 W 행렬에서 해당 행(임베딩 벡터)을 조회합니다.
  2. 조회한 모든 임베딩 벡터들을 모두 더합니다.
  3. 더한 결과를 벡터의 총개수로 나누어 평균 벡터를 만듭니다.

3단계: 출력 계층 (Output Layer) - 중심 단어 예측

  • 가중치 행렬 W' (Output Weight Matrix): CBOW는 M x V 크기의 또 다른 가중치 행렬 **W'**를 가지고 있습니다.
  • 계산:
    1. 2단계에서 만든 문맥 벡터 v̂와 가중치 행렬 W'를 곱합니다. 그러면 단어사전 크기(V)의 벡터 z가 나옵니다. 이 벡터의 각 값은 단어별 '점수'라고 할 수 있습니다.
    2. 이 점수 벡터 z에 소프트맥스(Softmax) 함수를 적용하여 모든 단어에 대한 '중심 단어가 될 확률' 벡터 ŷ를 계산합니다.
  • 손실 계산 (Loss Calculation): 모델이 예측한 확률 벡터 ŷ와 실제 정답 중심 단어의 원-핫 벡터 y를 비교하여 얼마나 다른지 교차 엔트로피(Cross-Entropy) 손실을 계산합니다.
  • 학습: 모델은 이 손실을 최소화하는 방향으로 W와 W' 행렬을 계속 업데이트합니다. (경사하강법 & 역전파 사용)

시험 대비 최종 요약

  • CBOW 과정:
    1. 주변 단어(원-핫) -> 행렬 W (Lookup) -> 각 단어의 임베딩 벡터
    2. 임베딩 벡터들의 평균 -> 단일 문맥 벡터 v̂
    3. v̂ -> 행렬 W' 곱셈 -> 점수 벡터 z
    4. z -> Softmax -> 확률 벡터 ŷ (예측값)
    5. ŷ와 y(정답) 비교 -> Cross-Entropy Loss 계산 후 W, W' 업데이트
  • 최종 결과물: 학습이 모두 끝난 후, 우리가 진짜 사용하는 것은 입력 가중치 행렬 W입니다. 이 행렬이 바로 단어의 의미가 담긴 임베딩 그 자체입니다.

 

Word2Vec의 또 다른 핵심 모델인 Skip-gram에 대해 시험에 나올 모든 것을 완벽하게 설명해 드릴게요.

1. Skip-gram의 핵심 아이디어

Skip-gram은 CBOW와 정반대의 방식으로 문제를 풉니다. "이 단어를 보고 어떤 단어들이 연상되니?"라고 묻는 것과 같습니다.

  • 학습 목표: 중심 단어(Center Word)를 입력으로 받아, 주변 단어(Context Words)들을 예측합니다.
  • 예시: [The, fat, cat, sat, on, the, mat] 라는 문장에서 윈도우 크기=2 이고 중심 단어가 sat이라면,
    • sat을 보고 [cat, fat, on, the]를 맞추는 여러 개의 문제를 풉니다.
  • 학습 데이터 생성: 슬라이드에서 볼 수 있듯이, 중심 단어 하나에 대해 여러 개의 (중심 단어, 주변 단어) 쌍이 학습 데이터로 만들어집니다. (sat, cat), (sat, fat), (sat, on), (sat, the) 처럼 말이죠. 이 때문에 Skip-gram은 CBOW보다 학습 데이터의 양이 훨씬 많아집니다.

'유도되는 것'과 '생각나게 만드는 것'은 사실 같은 과정의 두 가지 측면입니다. 모델은 '유도'되는 과정을 수백만 번 반복함으로써, 결과적으로 '연상(생각나게 만드는 것)' 능력을 획득하게 됩니다.

'개'라는 개념을 배우는 아이 비유

 

이 과정을 아이가 '개'라는 개념을 배우는 것에 비유해 보겠습니다.

1. 유도 (Induction): 미시적 관점 (하나의 예제 학습)

아이에게 골든 리트리버 사진을 처음 보여주며 "이건 '개'야"라고 가르칩니다. 이 순간 아이의 뇌에서는 '골든 리트리버의 생김새'와 '개'라는 단어가 강하게 연결되도록 유도됩니다.

이것이 바로 sat과 fat on the라는 단 하나의 학습 예제를 처리하는 과정과 같습니다. 이 단계에서 sat의 벡터는 fat, on, the의 벡터들과 조금 더 가까워지도록 **유도(수정)**됩니다. 만약 학습이 여기서 멈춘다면, 모델은 그냥 "sat의 주변 단어는 fat, on, the이다"라는 사실 하나만 외운 셈이 됩니다.

2. 연상 (Association): 거시적 관점 (수많은 예제 학습의 결과)

하지만 우리는 아이에게 골든 리트리버 사진만 보여주지 않습니다. 다음에는 푸들 사진을 보여주며 "이것도 '개'야"라고 하고, 그다음엔 비글, 치와와 사진을 보여주며 계속 학습시킵니다.

아이는 수많은 '유도' 과정을 거치면서 더 이상 특정 사진 하나하나를 외우지 않습니다. 대신 모든 예시들의 공통점을 추출하여 '개'라는 추상적인 개념을 머릿속에 형성하기 시작합니다. (네 발, 털, 꼬리, 짖는 소리 등...)

Word2Vec도 마찬가지입니다.

  • The fat cat **sat** on the mat. (-> sat 벡터를 cat, on 쪽으로 유도)
  • A mouse **sat** under the chair. (-> 똑같은 sat 벡터를 이번엔 mouse, under 쪽으로 유도)
  • The king **sat** on his throne. (-> 똑같은 sat 벡터를 이번엔 king, throne 쪽으로 유도)

sat의 벡터는 수많은 문장에서 등장하는 모든 주변 단어들 방향으로 조금씩 계속 끌어당겨집니다. 이 수많은 '유도' 과정이 누적된 결과, sat의 최종 벡터는 이 모든 관계를 절충하는 최적의 중간 지점에 자리 잡게 됩니다.


결론

우리가 원하는 'sat하면 fat, on, the가 생각나는' 연상 능력은, 수많은 문맥 속에서 'sat'의 벡터를 정답 단어들 쪽으로 아주 조금씩 끌어당기는 '유도' 과정이 수백만 번 누적되어 만들어진 통계적인 결과물입니다.

즉, **'유도'는 학습의 메커니즘(방법)**이고, '연상'은 그 결과로 나타나는 능력인 셈입니다. 모델을 올바른 방향으로 계속 '유도'하다 보면, 결국 스스로 '연상'할 수 있는 능력을 갖추게 되는 것입니다.


2. Skip-gram의 구조와 특징

Skip-gram은 중심 단어 하나로 주변의 여러 단어를 예측하는 모델입니다.

  • 입력 (Input Layer): 하나의 중심 단어가 원-핫 벡터로 입력됩니다. (CBOW는 여러 개의 주변 단어가 입력됐죠.)
  • 투사 계층 (Projection Layer): CBOW와 완벽하게 동일합니다.
    • 입력된 중심 단어의 원-핫 벡터를 이용해, 가중치 행렬 W에서 해당 단어의 임베딩 벡터를 꺼내옵니다(Look-up).
  • 출력 계층 (Output Layer): 이 부분이 CBOW와 다릅니다.
    • 투사 계층에서 나온 하나의 중심 단어 임베딩 벡터를 가지고, 윈도우 크기만큼의 주변 단어들을 각각 독립적으로 예측합니다.
    • 예를 들어 윈도우 크기=2이면, 중심 단어 sat의 벡터 하나로 cat을 예측하는 문제, fat을 예측하는 문제, on을 예측하는 문제, the를 예측하는 문제를 총 4번 푸는 셈입니다.
    • 각 예측마다 CBOW와 동일하게 **가중치 행렬 W'**와 소프트맥스 함수를 사용하여 모든 단어에 대한 확률을 계산하고, 실제 정답과 비교하여 손실(Loss)을 구해 모델을 업데이트합니다.

3. CBOW vs. Skip-gram 비교 (★★★★★)

이 비교표는 시험에 나올 확률이 매우 높으니 반드시 암기하세요.

특징 CBOW (Continuous Bag of Words) Skip-gram
학습 목표 주변 단어 → 중심 단어 중심 단어 → 주변 단어
핵심 연산 주변 단어 벡터들의 평균을 구함 중심 단어 벡터로 여러 번 예측
학습 속도 빠름 (하나의 문제만 풀면 됨) 느림 (여러 문제를 풀어야 함)
성능 (일반적) 작은 데이터셋에서 좋음 큰 데이터셋에서 성능이 더 좋음
희귀 단어 처리 평균을 내는 과정에서 희귀 단어 정보가 희석되기 쉬워 성능이 떨어짐 각 단어 쌍을 독립적으로 학습하므로 희귀 단어나 신조어의 의미를 더 잘 학습함
Sheets로 내보내기

시험 대비 최종 요약

  • Skip-gram이란?: 중심 단어주변 단어를 예측하는 모델. (연상 퀴즈)
  • 작동 방식: 중심 단어의 임베딩 벡터 하나를 가지고, 주변에 올 수 있는 여러 단어를 각각 독립적으로 예측하는 문제를 푼다.
  • CBOW와의 핵심 차이: CBOW는 빠르지만 희귀 단어에 약하고, Skip-gram은 느리지만 성능이 더 좋고 특히 희귀 단어 처리에 강하다.
  • 결론: 일반적으로 Skip-gram이 CBOW보다 더 우수한 성능을 보이는 것으로 알려져 있습니다.

NNLM과 Word2Vec의 핵심적인 차이점을 요약한, 시험에 반드시 나올 만한 매우 중요한 자료입니다. 두 모델의 차이를 완벽하게 각인시켜 드릴게요.

NNLM vs. Word2Vec 핵심 비교

Word2Vec은 NNLM의 단점을 개선하기 위해 태어났습니다. 핵심은 **'불필요한 부분을 제거하여 효율성을 극대화'**한 것입니다.


1. 학습 목표: 진짜 문제 vs. 가짜 문제

  • NNLM: **'다음 단어 예측'**이라는 실제 언어 모델링 문제를 풉니다. 이건 매우 어렵고 복잡한 문제입니다. 여기서 단어 임베딩은 '부산물'에 가까웠죠.
  • Word2Vec: 오직 '좋은 임베딩'을 얻기 위해 '주변 단어로 중심 단어 맞추기(CBOW)' 또는 **'중심 단어로 주변 단어 맞추기(Skip-gram)'**라는 훨씬 간단한 **가짜 문제(Fake Task)**를 풉니다. 목표 자체가 임베딩 학습에 맞춰져 있습니다.

2. 입력 단어: 과거 vs. 현재 중심

  • NNLM: 다음 단어를 예측해야 하므로, 예측 시점 이전의 단어들만 입력으로 사용합니다.
  • Word2Vec: 중심 단어를 예측하거나 중심 단어로부터 예측하므로, 특정 단어의 전후(좌우) 문맥을 모두 윈도우 크기만큼 입력으로 사용합니다. 더 풍부한 문맥 정보를 활용하는 셈이죠.

3. 신경망 구조: 은닉층의 유무 (★★★★★)

이것이 두 모델의 결정적인 차이점이자 Word2Vec가 혁신적인 이유입니다.

  • NNLM: 투사 계층(Projection Layer)과 출력 계층(Output Layer) 사이에 은닉층(Hidden Layer)이 존재합니다. 이 은닉층에서 수행되는 복잡한 계산이 NNLM을 매우 느리게 만드는 주범이었습니다.
  • Word2Vec: 과감하게 은닉층을 제거했습니다. 투사 계층에서 나온 벡터(들)를 바로 출력 계층으로 연결합니다. 이 단순화된 구조 덕분에 계산량이 폭발적으로 줄어들어 학습 속도가 비교할 수 없을 만큼 빨라졌습니다. 🚀

시험 대비 최종 요약표

이 표만 외우시면 NNLM과 Word2Vec 비교 문제는 완벽하게 대비할 수 있습니다.

비교 항목 NNLM Word2Vec 핵심 차이
학습 목표 다음 단어 예측 (언어 모델링) 주변/중심 단어 예측 진짜 문제 vs. 가짜 문제
입력 단어 예측 시점 이전 단어들 중심 단어의 전후 단어 과거만 참고 vs. 전후 모두 참고
신경망 구조 은닉층(Hidden Layer) 있음 은닉층(Hidden Layer) 없음 느리고 무거움 vs. 빠르고 가벼움
Sheets로 내보내기

결론적으로 Word2Vec은 NNLM에서 임베딩 학습에 불필요한 부분(은닉층)을 제거하고, 학습 목표를 단순화하여 속도와 성능을 모두 잡은 혁신적인 모델이라고 할 수 있습니다.

 

Word2Vec의 학습 속도를 획기적으로 개선한 두 가지 핵심 기법, **계층적 소프트맥스(Hierarchical Softmax)**와 **네거티브 샘플링(Negative Sampling)**에 대해 설명하고 있습니다. 시험에 반드시 나올 중요한 내용이니, 두 기법의 차이점을 중심으로 완벽하게 이해시켜 드릴게요.

근본적인 문제: Softmax의 비효율성

먼저, 두 기법이 해결하려는 공통의 문제를 알아야 합니다. 기본적인 Word2Vec 모델은 특정 단어를 예측할 때, 출력층에서 단어사전에 있는 모든 단어(수십만 개)에 대한 확률을 계산하고 업데이트해야 합니다. 이 Softmax 계산 과정은 엄청난 계산량을 요구하며, Word2Vec 학습의 가장 큰 속도 저하 원인입니다.

두 기법은 이 비효율적인 전체 계산을 피하기 위한 천재적인 '꼼수'라고 할 수 있습니다.


1. 계층적 소프트맥스 (Hierarchical Softmax)

기본 소프트맥스는 수만 개의 단어라는 거대한 객관식 문제의 모든 보기를 하나하나 계산하는 비효율적인 방식입니다. 반면, 계층적 소프트맥스는 이 문제를 **"정답을 찾아 나무를 타고 내려가는 O/X 퀴즈"**로 바꿉니다.

예를 들어, 10만 개의 단어 중에서 'apple'을 찾는다고 가정해 봅시다.

  • 기본 Softmax: 10만 개의 단어 각각에 대해 "이 단어가 정답일 확률은?"을 모두 계산.
  • 계층적 Softmax: "과일인가? (Yes) → 빨간색인가? (Yes) → 둥근 모양인가? (Yes)" 와 같이 몇 번의 O/X 질문만으로 정답을 빠르게 찾아냅니다.

## 작동 방식: 허프만 트리 (Huffman Tree)

이 O/X 퀴즈의 질문지를 효율적으로 만들기 위해, 단어들을 **허프만 트리(Huffman Tree)**라는 이진 트리 구조로 미리 정리해 둡니다.

허프만 트리의 핵심 특징은 등장 빈도가 높은 단어일수록 트리의 뿌리(root)에서부터 더 짧은 경로에 위치시킨다는 점입니다. 예를 들어, 아주 자주 나오는 단어인 "the"는 단 2~3번의 O/X 질문만으로 찾을 수 있지만, 아주 희귀한 단어는 20번의 질문이 필요할 수도 있습니다.

모델은 예측 시, 트리의 뿌리에서 시작하여 정답 단어가 있는 잎(leaf)까지 이동합니다. 각 갈림길(node)에서 왼쪽으로 갈지 오른쪽으로 갈지만 결정하면 되며, 이 결정 과정이 바로 **이진 분류(Binary Classification)**입니다.


## 장점: 압도적인 속도 향상

이 방식의 가장 큰 장점은 계산량의 감소입니다. 전체 어휘의 수(V)만큼 계산해야 했던 것이, 트리의 깊이(대략 )만큼만 계산하면 됩니다.

  • 만약 단어가 65,536개 있다면, 65,536번의 계산이 아니라 단 16번($log_2(65536) = 16$)의 계산만으로 정답을 예측할 수 있습니다.

특히 자주 사용하는 단어들은 경로가 더 짧기 때문에, 전체적인 학습 속도가 매우 빨라지는 효과를 가져옵니다. 🚀

  • 핵심 아이디어: 수십만 개의 선택지 중 하나를 고르는 다중 분류 문제를, 정답을 찾아 나무를 타고 내려가는 이진 분류 문제로 바꿉니다.
    • 비유: '사과'라는 단어를 찾을 때, 10만 개의 단어를 하나씩 다 비교하는 것이 아니라, "과일인가? -> 빨간색인가? -> 둥근 모양인가?" 처럼 연속된 O/X 퀴즈를 풀며 정답을 찾아가는 것과 같습니다.
  • 작동 방식:
    1. 전체 단어 사전을 이진 트리(Binary Tree), 특히 허프만 트리(Huffman Tree) 구조로 만듭니다.
    2. 허프만 트리는 빈도가 높은 단어는 트리의 루트(뿌리)에 가깝게(짧은 경로) 배치하고, 빈도가 낮은 단어는 멀리(긴 경로) 배치합니다.
    3. 모델은 정답 단어를 예측하기 위해 이 트리의 루트부터 시작해서, 정답 단어가 있는 곳까지 매 갈림길마다 왼쪽으로 갈지, 오른쪽으로 갈지 결정(이진 분류)만 하면 됩니다.
  • 장점:
    • 전체 단어(V)를 모두 계산할 필요 없이, 트리의 깊이만큼(약 번)만 계산하면 되므로 속도가 매우 빠릅니다.
    • 특히 자주 나오는 단어일수록 더 빠르게 계산됩니다.

2. 네거티브 샘플링 (Negative Sampling) ★★★★★

  • 핵심 아이디어: "이 많은 단어들 중에 정답이 뭘까?" 라는 어려운 문제를, "이 단어, 정답 맞아? (Yes/No)" 라는 아주 쉬운 문제로 바꿉니다.
    • 비유: 용의자를 찾기 위해 10만 명의 사진을 다 보는 것이 아니라, 진짜 범인(Positive) 사진 한 장아무 상관 없는 사람(Negative) 사진 몇 장만 뽑아서 "이 사람이 범인인가?"를 반복해서 물어보는 것과 같습니다.
  • 작동 방식:
    1. 학습 시, 실제 정답인 주변 단어(Positive Sample) 하나를 가져옵니다. 이 단어와의 관계는 '정답(1)'으로 학습시킵니다.
    2. 그리고 단어사전에서 아무 상관 없는 단어들을 몇 개(보통 5~20개) 무작위로 뽑습니다. 이것이 바로 Negative Sample입니다. 이 단어들과의 관계는 '오답(0)'으로 학습시킵니다.
    3. 모델은 이 (1개의 Positive + k개의 Negative) 샘플들만 보고 가중치를 업데이트합니다.
  • 장점:
    • 전체 단어가 아닌 (k+1)개의 단어에 대해서만 계산하면 되므로, 계산량이 압도적으로 적어 학습 속도가 엄청나게 향상됩니다. 🚀

시험 대비 최종 요약

기법 핵심 아이디어 장점 비고
계층적 소프트맥스 전체 어휘를 이진 트리로 구성하여, 정답을 찾아가는 문제로 변환 의 계산량, 빈번한 단어에 특히 빠름  
네거티브 샘플링 진짜(Positive) vs. 가짜(Negative) 단어를 구분하는 이진 분류 문제로 변환 업데이트할 가중치가 극히 적어 매우 빠름 성능도 우수하여 실전에서 더 많이 사용됨
Sheets로 내보내기

결론적으로, 두 기법 모두 Softmax의 계산량을 줄이기 위한 효율화 기법이지만, 네거티브 샘플링이 구현이 더 간단하고 임베딩 성능도 우수하여 일반적으로 더 많이 사용된다는 점을 꼭 기억해 주세요!

 

Word2Vec의 성능과 효율을 한 단계 더 끌어올리는 두 가지 추가적인 기법을 설명하고 있습니다. 시험에 대비할 수 있도록 각 기법의 목적과 원리를 명확하게 알려드릴게요.

1. 고빈도 단어 서브샘플링 (Subsampling of Frequent Words)

이 기법은 불필요한 학습을 줄여 효율을 높이는 기술입니다.

  • 문제점: "the", "a", "is", "in" 과 같이 너무 자주 등장하는 단어(고빈도 단어, e.g., a, the, in)들은 문장에 항상 나타나지만, 특별한 의미 정보를 제공하지는 않습니다. 예를 들어, 'France'라는 단어 주변에 'the'가 나타나는 것은 'France'의 의미를 파악하는 데 거의 도움이 되지 않죠. 이런 단어들이 학습 데이터에 너무 많이 포함되면, 학습 속도를 저해하고 오히려 노이즈(noise)로 작용할 수 있습니다.
  • 해결 방법: 아주 간단합니다. 단어의 등장 빈도를 계산해서, 일정 빈도 이상으로 등장하는 단어는 특정 확률로 학습 데이터에서 그냥 제외시켜 버립니다. 단어의 빈도가 높을수록 제외될 확률도 높아집니다.
    • 비유: 중요한 내용만 필기하기 위해 대화에서 "음...", "어..." 같은 군말은 무시하고 듣는 것과 같습니다.
  • 장점:
    1. 학습 속도 향상: 불필요한 학습 데이터가 줄어드니 당연히 속도가 빨라집니다.
    2. 임베딩 품질 향상: 상대적으로 덜 등장하는 중요한 단어들에 대해 더 집중적으로 학습할 수 있게 되어, 희귀 단어의 임베딩 품질이 향상되는 효과가 있습니다.

2. 구 표현 (Phrase Representations)

이 기법은 '단어'의 정의를 확장하는 기술입니다.

  • 문제점: "New"와 "York"는 각각 별개의 단어이지만, "New York"은 합쳐졌을 때 완전히 새로운 고유한 의미를 가집니다. 하지만 기본 Word2Vec은 이들을 "New"와 "York"라는 별개의 단어로만 취급합니다. "Machine Learning"이나 "Ice cream"도 마찬가지죠.
  • 해결 방법: Word2Vec은 본격적인 학습에 들어가기 전, 전처리 단계에서 텍스트 전체를 훑으며 자주 함께 등장하는 단어들의 쌍을 하나의 단어처럼 묶어버립니다.
    • 예를 들어, 텍스트에서 "New"와 "York"가 함께 붙어 나오는 빈도가 각각 따로따로 나오는 빈도보다 통계적으로 유의미하게 높다면, 이 둘을 "New_York"이라는 새로운 단일 토큰으로 치환합니다.
  • 장점: "New_York", "Machine_Learning"과 같이 여러 단어로 이루어진 고유한 개념(구, Phrase)에 대한 하나의 의미 벡터를 학습할 수 있게 됩니다. 이는 단순히 "New" 벡터와 "York" 벡터를 더하는 것보다 훨씬 더 정확하고 유용한 의미 표현입니다.

시험 대비 최종 요약

기법 목표 (Goal) 방법 (How) 효과 (Effect)
서브샘플링 (Subsampling) 불필요한 학습 줄이기 고빈도 단어를 확률적으로 학습에서 제외 속도 및 임베딩 품질 향상
구 표현 (Phrases) 여러 단어로 된 개념 학습 자주 함께 나오는 단어들을 하나의 토큰으로 병합 "New_York" 같은 구(phrase)에 대한 단일 벡터 학습 가능

Word2Vec의 장점과 단점을 명확히 파악하고, 그 아이디어가 어떻게 다른 모델로 확장되었는지 시험에 대비해 완벽하게 설명해 드릴게요.

1. Word2Vec의 장점 (Pros)

Word2Vec은 여러 강력한 장점 덕분에 널리 사용되었습니다.

  • 효율적인 학습: NNLM과 달리 **단순화된 구조(은닉층 제거)**와 학습 효율화 기법(네거티브 샘플링 등) 덕분에, 수억 개의 단어로 이루어진 대규모 데이터에서도 매우 빠르게 학습할 수 있습니다. 🚀
  • 의미적 유사성 반영: **국소적 문맥(주변 단어)**을 기반으로 학습하므로, 단어의 의미적, 문법적 관계를 벡터 공간에 잘 투영합니다. 그 결과, 왕 - 남자 + 여자 ≈ 여왕 과 같은 유추 연산이 가능해집니다.
  • 다양한 응용 가능: 일단 학습된 단어 벡터는 매우 유용합니다. 단어 간 유사도 계산, 문서 분류, 감성 분석, 추천 시스템 등 다양한 머신러닝 모델의 중요한 입력 특징(feature)으로 활용될 수 있습니다.

2. Word2Vec의 단점 (Cons)

물론 Word2Vec에도 명확한 한계점들이 존재합니다.

  • 정적 임베딩 (Static Embedding): Word2Vec의 가장 큰 단점입니다. 단어 하나당 하나의 고정된 벡터만 생성합니다. 따라서 "사과(apple)"와 "사과(apology)" 같은 동음이의어의 의미 변화를 감지하지 못합니다. 어떤 문맥에 쓰이든 '사과'는 항상 똑같은 벡터 값을 가집니다.
  • 국소 맥락만 사용: 정해진 윈도우(window) 크기 내의 주변 단어만 보기 때문에, 문장 전체의 구조나 문단 전체의 긴 문맥은 반영하기 어렵습니다.
  • OOV (Out-of-Vocabulary) 문제: 학습 데이터에 등장하지 않은 단어에 대해서는 임베딩 벡터를 생성할 수 없습니다. 신조어나 오타에 매우 취약합니다.
  • 해석 불가: 결과로 나온 벡터의 각 차원(e.g., 100개의 숫자)이 인간이 이해할 수 있는 특정 의미(e.g., '성별', '직업')를 나타내지 않기 때문에 벡터 자체를 해석하기는 어렵습니다.

3. 후속 모델들: Word2Vec 아이디어의 확장

Word2Vec의 핵심 아이디어, 즉 **"주변 맥락을 통해 대상의 의미를 파악한다"**는 생각은 너무나 강력해서 단어를 넘어 다른 분야로 확장되었습니다.

  • 핵심: '토큰'과 '맥락'을 무엇으로 정의하느냐에 따라 전혀 다른 모델이 탄생합니다.
    • Word2Vec (기준):
      • 토큰: 단어
      • 맥락: 주변 단어들
    • Doc2Vec (Paragraph Vector):
      • 토큰: 문서 (또는 문단)
      • 맥락: 문서 내에 있는 단어들
      • 결과: 문서 전체의 주제나 논조를 나타내는 **'문서 벡터'**를 학습합니다. 문서 간 유사도 비교나 문서 분류에 사용됩니다.
    • Item2Vec:
      • 토큰: 아이템 (e.g., 상품, 영화, 음악)
      • 맥락: 한 사용자의 행동 순서 (e.g., 클릭한 상품 목록, 시청한 영화 목록)
      • 결과: 사용자의 행동 패턴을 기반으로 **'아이템 벡터'**를 학습합니다. '맥주'와 '기저귀'를 함께 구매하는 사람이 많다면, 두 아이템의 벡터는 가까워집니다. 추천 시스템에 널리 활용됩니다.

시험 대비 최종 요약

Word2Vec의 장단점

구분 내용
장점 👍 빠른 학습 속도, 의미적 관계 학습, 높은 활용도
단점 👎 동음이의어 처리 불가(정적), OOV 문제, 긴 문맥 파악 불가
Sheets로 내보내기

Word2Vec 아이디어의 확장

모델 토큰 (Token) 맥락 (Context) 주된 용도
Word2Vec 단어 주변 단어 단어 의미 파악
Doc2Vec 문서 문서 내 단어 문서 분류, 유사도
Item2Vec 아이템 사용자 행동 추천 시스템
반응형

+ Recent posts