반응형

Ⅰ. ELMo의 최종 임베딩 생성 방법: 계층별 표현의 가중합

ELMo의 강력함은 단순히 마지막 LSTM 계층의 결과만 사용하는 것이 아니라, 모델의 모든 계층(layer)에 담긴 정보를 종합하여 사용하는 데 있습니다.

ELMo는 보통 여러 층(e.g., 2-layer)의 양방향 LSTM으로 구성됩니다. 각 계층은 서로 다른 수준의 의미 정보를 학습합니다.

  • 초기 입력 계층 (Character CNN): 단어의 표면적인 형태(morphology) 정보.
  • 첫 번째 LSTM 계층: 주로 품사(POS)와 같은 문법적인(syntactic) 정보.
  • 두 번째 (상위) LSTM 계층: 문맥에 따른 단어의 의미(semantic) 정보.

ELMo는 이 모든 계층의 표현(representation)들을 그냥 합치거나 이어 붙이는 것이 아니라, **가중합(weighted sum)**하여 최종 임베딩 벡터를 생성합니다.

가중합(weighted sum)은 각 요소의 **중요도(가중치)**를 반영하여 값을 합산하는 방식입니다. 그냥 모두 더하는 게 아니라, "어떤 것은 더 중요하게, 어떤 것은 덜 중요하게" 여기며 더하는 거죠.


쉬운 예시: 최종 성적 계산 📝

대학교에서 최종 성적을 계산할 때를 생각해 보세요.

  • 중간고사: 30% 반영
  • 기말고사: 50% 반영
  • 과제: 20% 반영

만약 당신의 점수가 중간고사 80점, 기말고사 100점, 과제 90점이라면, 최종 성적은 단순히 (80 + 100 + 90) / 3 으로 계산되지 않아요. 각 항목의 **중요도(반영 비율)**를 곱해서 더해야 하죠.

최종 성적 = (80점 × 0.3) + (100점 × 0.5) + (90점 × 0.2) = 24 + 50 + 18 = 92점

여기서 **반영 비율(30%, 50%, 20%)**이 바로 **가중치(weight)**이고, 이렇게 계산하는 방식이 가중합입니다. 기말고사가 가장 중요하기 때문에 가장 높은 가중치가 부여되었어요.


ELMo에서의 가중합 🤖

ELMo도 똑같은 원리를 적용합니다. ELMo는 단어의 임베딩을 만들 때 여러 재료(각 계층의 정보)를 가지고 있어요.

  • 재료 1 (입력층): 단어의 철자/형태 정보 (-ing, -ed 등)
  • 재료 2 (1층 LSTM): 단어의 문법/품사 정보 (명사, 동사 등)
  • 재료 3 (2층 LSTM): 단어의 문맥적 의미 정보 (먹는 사과 vs 회사 애플)

ELMo는 이 재료들을 그냥 섞는 게 아니라, 풀고자 하는 문제에 따라 어떤 재료가 더 중요한지 스스로 학습해서 가중치를 다르게 부여합니다.

  • 만약 품사 판별 문제를 푼다면, 모델은 **'재료 2(문법 정보)'**가 가장 중요하다고 판단해 이 계층에 가장 높은 가중치를 부여할 거예요.
  • 만약 문장의 의미를 파악하는 문제를 푼다면, **'재료 3(문맥적 의미)'**에 가장 높은 가중치를 부여해서 최종 임베딩을 만들죠.

결론적으로, ELMo가 가중합을 한다는 건 각 계층(형태, 문법, 의미)의 정보 중에서 현재 푸는 문제에 더 중요한 정보에 높은 가중치를 곱해, 최종적으로 가장 유용한 맞춤형 임베딩 벡터를 만들어낸다는 뜻입니다.

  • : 번째 단어에 대한 번째 계층의 표현 벡터 (j=0은 초기 입력층, j>0은 LSTM 은닉 상태)
  • : 각 계층의 중요도를 나타내는 소프트맥스 정규화 가중치. 이 가중치는 풀고자 하는 특정 과제(task)에 맞게 학습됩니다. 예를 들어, 품사 판별 과제에서는 첫 번째 LSTM 계층의 가중치가 높아지고, 의미 파악 과제에서는 두 번째 LSTM 계층의 가중치가 높아질 수 있습니다.
  • : 전체 벡터의 크기를 조절하는 스케일링 파라미터.

결론적으로, ELMo는 특정 과제(Task)에 가장 유용한 정보가 담긴 계층에 더 높은 가중치를 부여하여, 각 계층의 정보를 동적으로 조합함으로써 문맥을 반영한 풍부한 임베딩 벡터를 생성합니다.


Ⅱ. BERT의 등장: NLP의 새로운 시대 🚀

ELMo가 동적 임베딩의 가능성을 열었지만, BERT(Bidirectional Encoder Representations from Transformers)는 그 패러다임을 완전히 바꾸어 놓았습니다.

BERT의 핵심 아이디어는 다음 세 가지로 요약됩니다.

1. 토큰화: WordPiece (Subword 기반)

  • FastText나 ELMo의 Character CNN처럼, BERT 역시 단어를 더 작은 단위로 쪼개는 Subword 방식을 사용합니다.
  • WordPiece는 자주 함께 등장하는 글자들을 하나의 단위로 묶는 통계적 방법입니다. 예를 들어 embedding은 em + ##bed + ##ding처럼 의미 있는 단위로 분리됩니다. (##는 단어의 중간 부분임을 표시)
  • 이를 통해 OOV 문제를 해결하고 단어의 형태론적 정보를 효율적으로 처리합니다.

2. 양방향 문맥 반영: Transformer 구조 사용

이것이 ELMo와 BERT의 가장 결정적인 차이점입니다.

  • ELMo의 한계 (Shallow Bidirectionality): ELMo는 순방향 LSTM과 역방향 LSTM을 독립적으로 학습한 뒤, 그 결과를 단순히 이어 붙였습니다(concatenate). 이는 진정한 의미의 양방향 소통이 아니라, 왼쪽 문맥 따로, 오른쪽 문맥 따로 본 것에 가깝습니다.
  • BERT의 혁신 (Deep Bidirectionality): BERT는 RNN을 버리고 Transformer의 인코더(Encoder) 구조를 채택했습니다. Transformer의 핵심인 셀프 어텐션(Self-attention) 메커니즘은 처음부터 문장 내의 모든 단어가 서로의 관계를 동시에 참고하도록 합니다. 즉, 특정 단어의 의미를 파악할 때 왼쪽과 오른쪽 문맥을 동시에, 그리고 모델의 모든 계층에서 깊게 고려합니다. 이것이 바로 '진정한 양방향성(Deep Bidirectionality)'입니다.

3. 대규모 사전학습 (Pre-training) → 태스크별 미세조정 (Fine-tuning)

BERT는 모델 활용 방식을 표준화했습니다.

  • 사전학습 (Pre-training): 먼저 엄청난 양의 텍스트 데이터(e.g., 위키피디아, 책)를 사용하여 BERT 모델이 '언어 자체'를 이해하도록 학습시킵니다. 이때 BERT는 두 가지 독창적인 과제를 수행합니다 (다음 시간에 배울 Masked Language Model, Next Sentence Prediction).
  • 미세조정 (Fine-tuning): 이렇게 언어에 대한 일반적인 이해를 마친 모델을 가져와, 우리가 실제로 풀고 싶은 특정 과제(e.g., 감성 분석, 질의응답)에 맞는 소량의 데이터로 추가 학습을 진행합니다. 이 과정을 통해 모델은 특정 과제에 맞게 빠르고 쉽게 최적화됩니다.

결론적으로, BERT는 WordPiece 토큰화, Transformer를 통한 진정한 양방향 문맥 이해, 그리고 Pre-training & Fine-tuning이라는 강력한 패러다임을 제시하며 이후 등장하는 대부분의 NLP 모델의 표준을 정립했습니다.

 

BERT (Bidirectional Encoder Representations from Transformers) 완전 정복

BERT는 ELMo의 '사전 학습된 언어 모델'이라는 아이디어를 계승했지만, Transformer라는 강력한 아키텍처를 도입하여 '진정한 양방향성'을 구현하고, '사전학습-미세조정' 패러다임을 확립하며 NLP의 새로운 표준을 제시했습니다.


1. BERT의 입력 임베딩: 세 가지 정보의 총합

BERT는 단어의 의미를 파악하기 위해 단순히 단어 자체의 의미뿐만 아니라, 그 단어가 어느 문장에 속해 있는지, 그리고 문장 내 어느 위치에 있는지에 대한 정보까지 모두 입력으로 사용합니다. BERT의 최종 입력 임베딩은 이 세 가지 임베딩의 총합으로 구성됩니다.

  1. 토큰 임베딩 (Token Embeddings)
    • 역할: 각 단어(Subword) 자체의 의미를 나타내는 벡터입니다.
    • 방식: WordPiece라는 Subword 토크나이저를 사용합니다. playing은 play + ##ing로 분리되어 각각의 토큰 임베딩을 갖게 됩니다. 이는 OOV 문제를 해결하는 데 효과적입니다.
  2. 세그먼트 임베딩 (Segment Embeddings)
    • 역할: 입력된 텍스트가 첫 번째 문장인지, 두 번째 문장인지를 구분해주는 역할을 합니다.
    • 방식: 문장 두 개를 입력받는 과제(e.g., 질의응답, 문장 관계 추론)를 위해 설계되었습니다. 모든 첫 번째 문장 토큰들에는 임베딩을, 모든 두 번째 문장 토큰들에는 임베딩을 더해줍니다.
  3. 포지션 임베딩 (Position Embeddings)
    • 역할: 단어의 위치(순서) 정보를 알려주는 벡터입니다.
    • 필요성: Transformer는 RNN과 달리 순환 구조가 없어서, 그대로 사용하면 단어의 순서를 인지하지 못합니다. "A가 B를 때렸다"와 "B가 A를 때렸다"를 구별하지 못하게 되는 것입니다. 따라서 각 위치(0번, 1번, 2번...)에 고유한 위치 벡터를 학습시켜 더해줌으로써 모델이 단어의 순서를 이해하게 만듭니다.

결론: BERT는 **단어의 의미(Token) + 문장 구분(Segment) + 위치 정보(Position)**를 모두 합친 풍부한 정보를 바탕으로 문맥을 파악하기 시작합니다.


2. BERT의 핵심 구조: Transformer와 진정한 양방향성

BERT의 심장은 Transformer의 인코더(Encoder) 부분입니다. 이 구조가 ELMo를 뛰어넘는 '진정한 양방향성(Deep Bidirectionality)'을 가능하게 합니다.

  • ELMo와의 비교: ELMo는 순방향 LSTM과 역방향 LSTM을 따로따로 학습한 후 결과를 단순히 이어 붙였습니다. 이는 마치 왼쪽 문맥을 보는 눈과 오른쪽 문맥을 보는 눈이 서로 소통하지 않는 것과 같습니다.
  • BERT의 방식: Transformer의 **셀프 어텐션(Self-attention)**은 문장 내 한 단어를 처리할 때, 처음부터 문장 내의 모든 단어(왼쪽, 오른쪽 모두)를 동시에 참고합니다. "I love you"에서 "love"의 의미를 파악하기 위해 "I"와 "you"의 정보를 동시에, 그리고 모든 12개의 레이어(12-layers)를 통과하는 내내 깊게 고려합니다. 이것이 바로 진정한 양방향 소통입니다.

3. BERT의 학습 전략: Pre-training → Fine-tuning

BERT는 특정 과제를 푸는 법을 직접 배우기 전에, 먼저 '언어' 자체에 대한 깊은 이해를 하는 사전학습(Pre-training) 단계를 거칩니다.

  • 사전학습 과제 1: Masked Language Model (MLM)
    • 목표: 진정한 양방향 문맥 학습.
    • 방식: 기존 언어 모델처럼 다음 단어를 예측하면, 예측하려는 단어의 오른쪽 문맥을 볼 수 없게 됩니다. 이 문제를 해결하기 위해 BERT는 문장의 단어 중 일부(15%)를 [MASK] 토큰으로 무작위로 가립니다. 그리고 주변의 양방향 문맥을 모두 이용하여 [MASK]에 들어갈 원래 단어가 무엇인지 맞추도록 학습합니다. 마치 빈칸 추론 문제를 푸는 것과 같습니다.
  • 사전학습 과제 2: Next Sentence Prediction (NSP)
    • 목표: 문장 간의 관계 이해.
    • 방식: 두 문장을 [SEP] 토큰으로 이어 붙여 입력으로 준 뒤, 두 번째 문장이 실제로 첫 번째 문장 바로 다음에 오는 문장인지(IsNext), 아니면 전혀 관련 없는 문장인지(NotNext)를 맞추도록 학습합니다. 이는 질의응답(QA)이나 자연어 추론(NLI)처럼 두 문장의 관계 파악이 중요한 과제를 잘 풀기 위함입니다.
  • 미세조정 (Fine-tuning):
    • 이렇게 사전학습을 통해 언어에 대한 통찰력을 얻은 BERT 모델 위에, 풀고 싶은 특정 과제에 맞는 간단한 분류기(FFNN + Softmax)를 하나 추가합니다.
    • 그리고 해당 과제의 데이터로 전체 모델을 아주 조금만(보통 2~4 epoch) 추가 학습시키면, 놀랍도록 높은 성능을 발휘합니다. 이것이 바로 Pre-training & Fine-tuning 패러다임입니다.

최종 요약 🎯

  1. 입력: 단어의 의미(Token) + 문장 구분(Segment) + 순서(Position) 정보를 모두 합쳐 사용한다.
  2. 구조: Transformer 인코더를 사용하여 문장 전체의 양방향 문맥을 동시에, 그리고 깊게 이해한다.
  3. 사전학습: **Masked LM (빈칸 맞히기)**과 **NSP (다음 문장 맞히기)**를 통해 언어 자체를 학습한다.
  4. 활용: 사전학습된 모델을 가져와 각 **과제에 맞게 미세조정(Fine-tuning)**하여 사용한다.

 

정적 임베딩의 한계와 동적 임베딩의 필요성 (제안 동기)

1. 문제점: "하나의 단어, 하나의 의미"의 한계

기존의 Word2Vec, GloVe, FastText와 같은 단어 임베딩 방식을 **정적 임베딩(Static Embedding)**이라고 부릅니다. 이 방식들의 가장 큰 문제점은 한 단어에 대해 단 하나의 고정된 벡터 값만을 할당한다는 것입니다.

하지만 실제 우리가 사용하는 언어에서 대부분의 단어는 여러 의미를 갖는 **다의어(Polysemy)**입니다.

  • "I bought an **apple**." 🍎 에서는 과일을 의미합니다.
  • "**Apple** released a new iPhone." 🏢 에서는 회사를 의미합니다.

정적 임베딩 모델은 이 두 "Apple"에 완전히 동일한 벡터를 부여합니다. 결과적으로 이 벡터는 '과일'과 '회사'의 의미가 어중간하게 섞인, 그 어떤 문맥에도 완벽하게 들어맞지 않는 평균적인 의미를 갖게 됩니다.

슬라이드의 한국어 예시는 이 문제를 더 명확하게 보여줍니다.

  • "나는 **눈**이 좋다. 그래서 멀리 있는 것도 잘 보인다." 👀 에서는 **신체 부위(eye)**를 의미합니다.
  • "나는 **눈**이 좋다. 그래서 겨울이 좋다." ❄️ 에서는 **날씨(snow)**를 의미합니다.

이처럼 단어의 의미는 전적으로 **문맥(context)**에 의해 결정되지만, 정적 임베딩은 이 문맥을 반영하지 못하는 치명적인 한계를 가집니다.


2. 해결책: "의미는 문맥이 결정한다"

이러한 한계를 극복하기 위해 등장한 것이 바로 **동적 임베딩(Dynamic/Contextualized Embedding)**입니다. 핵심 아이디어는 슬라이드에 명시된 그대로입니다.

"동일한 단어라도 문맥에 따라 그 의미가 달라질 수 있으니, 벡터 공간에서도 다르게 표현되어야 한다!"

이를 위해 모델의 작동 방식을 근본적으로 바꿨습니다.

  • 입력: 단어 하나가 아닌, 문장 전체 (토큰의 집합)
  • 처리 방식: 단어의 벡터를 미리 정해두는 것이 아니라, 문장이 입력되었을 때 주변 단어들과의 관계를 실시간으로 계산하여 해당 단어의 벡터를 동적으로 생성합니다.
  • 결과: 이제 "Apple"이라는 단어는 문맥에 따라 완전히 다른 벡터 값을 갖게 됩니다. 'fruit'과 함께 쓰인 "apple"의 벡터는 'pear', 'orange'와 가까운 곳에 위치하고, 'iPhone'과 함께 쓰인 "Apple"의 벡터는 'Google', 'Microsoft'와 가까운 곳에 위치하게 됩니다.

슬라이드의 오른쪽 그림은 단어 임베딩이 의미를 벡터 공간에 표현하는 방식을 보여줍니다. 정적 임베딩이 king, queen, man, woman의 관계를 학습했다면, 동적 임베딩은 이 개념을 확장하여 같은 단어라도 다른 의미를 가질 때 벡터 공간의 다른 지점에 위치시키는 것을 목표로 합니다.

반응형
반응형

Ⅰ. 유도 바이어스 (Inductive Bias)란 무엇인가? 🤔

**유도 바이어스(Inductive Bias)**란, 기계학습 모델(특히 딥러닝 알고리즘)이 아직 보지 못한 데이터에 대해 예측을 수행할 때, 학습 과정에서 특정한 패턴이나 가정을 선호하도록 우리가 부여하는 제약 또는 힌트를 의미합니다.

쉽게 말해, 모델이 아무런 사전 지식 없이 맨땅에 헤딩하는 것이 아니라, "이 문제는 대충 이런 식으로 푸는 게 맞아"라고 인간이 미리 귀띔해주는 것입니다. 이 '귀띔' 덕분에 모델은 방대한 가설 공간(hypothesis space) 속에서 정답을 훨씬 빠르고 효과적으로 찾아낼 수 있습니다.

슬라이드의 설명처럼, 얕은 신경망(DNN)에 특정 태스크를 해결하기 위한 힌트(hint)를 주는 것이 바로 유도 바이어스입니다.


Ⅱ. 유도 바이어스의 작동 방식: 예시로 이해하기

예시 1: 강아지 사진 구별하기 🐶

  • 문제 상황: 강아지 사진을 보고 완벽하게 구분하고 싶다.
  • 학습 목표: 정답(강아지 사진)을 알려주고 그 답을 외우도록 한다.
  • 힌트 (유도 바이어스):
    • "눈은 2개, 코는 1개야."
    • "다리는 4개고, 4발로 걸어 다녀."
    • "꼬리가 있고 멍멍 소리를 내."

만약 이런 힌트가 없다면, 모델은 픽셀의 색상 조합, 배경의 질감 등 온갖 관련 없는 정보까지 모두 학습하려고 할 것입니다. 하지만 "눈, 코, 다리의 개수와 형태가 중요해!"라는 유도 바이어스를 주면, 모델은 이미지의 특정 영역(얼굴, 다리 등)에 더 집중하여 효율적으로 학습하게 됩니다.

이미지 인식 분야에서 주로 사용되는 **CNN(Convolutional Neural Network)**이 바로 이러한 유도 바이어스를 구조적으로 구현한 대표적인 예입니다. CNN은 '이미지 속 객체는 주변 픽셀들과 연관성이 높다(locality)'는 강력한 힌트를 내장하고 있습니다.

예시 2: 영어 문장 번역하기 🌐

  • 문제 상황: "I am taking a lecture now." 라는 영어 문장을 한국어로 번역한다.
  • 학습 목표: 정답("나는 지금 강의를 듣고 있습니다.")을 알려주고 그 답을 외우도록 한다.
  • 힌트 (유도 바이어스):
    1. 순차적 정보 처리 (Sequentiality): 언어는 단어의 시간적 순서가 문맥 이해에 매우 중요하다. (나 다음에 는이 오고, 강의 다음에 를이 오는 순서)
      • ➡️ 이 힌트를 반영하여 설계된 신경망이 바로 **RNN(Recurrent Neural Network)**입니다. RNN은 이전 단계의 정보를 기억하여 다음 단계 계산에 활용하는 구조로, 순서가 중요한 데이터를 처리하는 데 특화되어 있습니다.
    2. 어휘의 유사성 (Locality/Similarity): 의미가 비슷한 단어는 비슷한 방식으로 처리되어야 한다. (e.g., '강의'와 '수업'은 문맥상 비슷하게 쓰일 수 있다)
      • ➡️ 이는 CNN이 단어 주변의 n-gram 패턴을 포착하거나, 단어 임베딩 자체가 이 속성을 반영하도록 학습됩니다.
    3. 문맥의 중요성 (Context-dependency): 단어의 의미는 주변 문맥에 따라 달라질 수 있다. (앞서 배운 'bank'의 예시)
      • ➡️ 이 힌트를 극대화하여 문장 전체의 관계를 한 번에 파악하도록 설계된 것이 바로 트랜스포머(Transformer)와 어텐션(Attention) 메커니즘입니다.

Ⅲ. 최종 요약 및 시험 대비 📝

  1. 정의: 유도 바이어스란, 모델이 더 잘 학습할 수 있도록 인간이 제공하는 유용한 가정, 제약, 힌트이다.
  2. 목적: 방대한 탐색 공간을 줄여주어 모델이 더 **빠르고 효율적으로 일반화(generalization)**할 수 있도록 돕는다. (즉, 처음 보는 데이터도 잘 맞히게 한다.)
  3. 프로세스:
    • ① 인간이 문제에 유용할 것 같은 힌트를 먼저 정의한다. (e.g., "언어는 순서가 중요해!")
    • ② 이 힌트를 잘 반영할 수 있는 신경망 구조(Architecture)를 설계한다. (e.g., RNN을 만들자!)
    • ③ 이 구조를 통해 신경망을 학습시켜 성능을 확인한다.
  4. 핵심 예시:
    • 이미지 인식 문제 ➡️ CNN (객체는 주변 픽셀과 관련이 깊다)
    • 자연어 처리(순차 데이터) 문제 ➡️ RNN (데이터는 시간적 순서가 중요하다), Transformer (문맥에 따라 의미가 달라진다)

결론적으로, **"어떤 문제에 어떤 모델 아키텍처를 선택하는가?"**라는 질문은 **"그 문제에 가장 적합한 유도 바이어스는 무엇인가?"**라는 질문과 같습니다. 이 관계를 이해하는 것이 핵심입니다.

 

🧠 힌트(유도 바이어스)와 신경망 구조의 연결고리

딥러닝 모델, 특히 자연어 처리(NLP) 모델의 발전은 "어떻게 하면 언어의 본질적인 특성을 모델 구조에 잘 녹여낼까?"에 대한 고민의 역사입니다. 슬라이드의 세 가지 힌트는 그 고민의 핵심을 담고 있으며, 각각 특정 아키텍처의 탄생을 이끌었습니다.


힌트 1. 순차적 정보 처리 (Sequentiality)

  • "언어의 시간적 순서가 문맥 이해에 중요하다."
  • 문제: "철수가 영희를 좋아한다"와 "영희가 철수를 좋아한다"는 단어는 같지만 순서가 달라 의미가 완전히 다릅니다. 이처럼 순서 정보를 처리할 수 있는 구조가 필요했습니다.
  • 해결사: RNN (Recurrent Neural Network, 순환신경망)
    • 구조적 특징: RNN은 이름처럼 '순환'하는 구조를 가집니다. 각 시점(time step)의 단어를 처리할 때, 이전 시점의 처리 결과(hidden state)를 함께 입력으로 받습니다.
    • 작동 방식: "I"를 처리한 결과를 기억했다가, "am"을 처리할 때 그 기억을 활용합니다. 다시 "I am"을 처리한 결과를 기억했다가 "a"를 처리할 때 활용하는 식입니다. 이 과정을 통해 문장의 순서와 흐름에 따른 문맥을 자연스럽게 학습합니다.
    • 결론: RNN의 순환 구조는 '순서가 중요하다'는 유도 바이어스를 완벽하게 구현한 아키텍처입니다.

힌트 2. 어휘의 유사성 (Lexical Similarity)

  • "의미가 유사한 단어는 유사한 방식으로 처리해야 한다."
  • 문제: '자동차'와 '승용차'는 문장에서 비슷한 역할을 할 때가 많습니다. 모델이 이 두 단어를 완전히 다른 것으로 취급하면 비효율적입니다.
  • 해결사: 단어 임베딩 (Word Embedding)
    • 구조적 특징: 이는 특정 아키텍처라기보다는 RNN과 Transformer의 입력단에 공통으로 적용되는 기본 원리입니다. Word2Vec, GloVe, FastText 등을 통해 사전 학습된 임베딩은 의미가 비슷한 단어를 벡터 공간에서 가까운 위치에 배치합니다.
    • 작동 방식: 모델은 '자동차'의 벡터 [0.1, 0.8, -0.2]와 '승용차'의 벡터 [0.2, 0.7, -0.3]가 유사하다는 것을 입력 단계부터 인지합니다. 따라서 두 단어가 입력되었을 때 후속 계산 과정에서도 비슷한 결과를 내놓게 됩니다.
    • 결론: 단어 임베딩 자체가 '의미가 비슷한 단어는 벡터도 비슷하다'는 유도 바이어스를 시스템에 주입하는 역할을 합니다.

힌트 3. 문맥의 중요성 (Context-dependency)

  • "단어의 의미가 문맥에 따라 달라질 수 있다."
  • 문제: RNN은 순서 정보를 잘 처리하지만, 문장이 길어지면 앞부분의 정보를 잊어버리는 **장기 의존성 문제(Long-term dependency problem)**가 있었습니다. 또한, 문장 내 모든 단어와의 관계를 동등하게 보는 것이 아니라, '나'라는 단어의 의미를 파악하기 위해 어떤 단어가 더 중요한지 선별하는 능력이 필요했습니다.
  • 해결사: Transformer (어텐션 메커니즘 활용)
    • 구조적 특징: Transformer는 순환 구조를 과감히 버리고 어텐션(Attention) 메커니즘을 도입했습니다. 어텐션은 문장 내의 한 단어를 표현할 때, 문장의 다른 모든 단어를 동시에 참고하되, 각 단어에 **서로 다른 중요도(가중치)**를 부여하는 방식입니다.
    • 작동 방식: "The animal didn't cross the street because it was too tired." 라는 문장에서 it의 의미를 파악할 때, 어텐션 메커니즘은 'animal'에 높은 가중치를, 'street'에는 낮은 가중치를 부여합니다. 이를 통해 'it'이 'animal'을 가리킨다는 것을 명확히 이해하고, 문맥에 맞는 동적 임베딩을 생성합니다.
    • 결론: Transformer의 어텐션 메커니즘은 '문맥에 따라 단어의 의미가 달라지며, 문맥 속 단어들의 중요도는 각기 다르다'는 유도 바이어스를 가장 정교하게 구현한 아키텍처입니다.

최종 정리 🎯

힌트 (유도 바이어스) 핵심 내용 이를 구현한 주요 신경망 구조/기술
순차적 정보 처리 단어의 순서가 중요하다. RNN (Recurrent Neural Network)
어휘의 유사성 비슷한 단어는 비슷하게 처리한다. Word Embedding (RNN/Transformer의 입력)
문맥의 중요성 문맥에 따라 의미가 변한다. Transformer (Attention Mechanism

RNN vs. Transformer: 문장을 이해하는 두 가지 접근법

RNN과 Transformer는 문장과 같은 순차적인 데이터를 처리하기 위해 설계되었지만, 그 접근 방식과 철학에는 근본적인 차이가 있습니다.


순환 신경망 (RNN): 순서대로 차근차근 이해하는 방식

RNN은 언어를 마치 사람이 글을 읽는 것처럼, 순서대로 한 단어씩 처리하는 구조입니다.

  • 핵심 가정 (Inductive Bias): "자연어는 입력된 순서대로 해석해야 한다. 그리고 가까운 위치에 있는 단어일수록 더 밀접한 관계가 있다."
    • 이 가정은 매우 직관적이고 합리적입니다. '나는 학교에 간다'를 이해할 때 '나' 다음에 '학교'가 온다는 순서가 중요하기 때문입니다.
  • 구현 방법 (시퀀스 구조):
    1. 첫 번째 단어("Jon")를 입력받아 처리하고, 그 결과(hidden state)를 출력합니다.
    2. 두 번째 단어("and")를 입력받을 때, 첫 번째 단어의 처리 결과(hidden state)를 함께 입력으로 사용합니다.
    3. 이 과정을 문장의 마지막 단어까지 반복합니다. 각 단계의 결과물은 이전 모든 단어의 정보를 누적하여 압축한 요약본과 같습니다.
    • 이처럼 이전 토큰의 표현을 다음 입력과 결합하여 순차적으로 고려하는 것을 시퀀스(sequence) 구조라고 합니다.
  • 한계:
    • 병렬 처리 불가: 한 단어를 처리해야 다음 단어를 처리할 수 있는 구조라 연산 속도가 느립니다.
    • 장기 의존성 문제: 문장이 길어지면, 초반부 단어의 정보가 뒤로 갈수록 희석되어 잊어버리는 경향이 있습니다.

트랜스포머 (Transformer): 전체를 한 번에 보고 관계를 파악하는 방식

Transformer는 RNN의 순차적인 처리 방식의 한계를 극복하기 위해 등장했습니다. 마치 하늘에서 문장 전체를 조망하듯, 모든 단어를 동시에 처리합니다.

  • 핵심 가정 (Inductive Bias): "한 단어의 의미는 멀리 떨어진 단어나, 심지어 이전이 아닌 이후에 오는 단어와도 관련 있을 수 있다. 따라서 그 중요도는 학습을 통해 알아내야 한다."
    • "The animal didn't cross the street because it was too tired."에서 it의 의미는 멀리 떨어진 'animal'과 관련이 있습니다. RNN은 이 관계를 파악하기 어렵지만, Transformer는 쉽게 파악할 수 있습니다.
  • 구현 방법 (셀프 어텐션):
    1. 문장 내의 모든 단어를 한 번에 입력으로 받습니다.
    2. 셀프 어텐션(Self-attention) 메커니즘을 통해, 문장 내의 모든 단어 쌍(pair) 간의 관계 점수를 계산합니다.
    3. 예를 들어, it이라는 단어의 의미를 파악할 때 The, animal, street 등 다른 모든 단어가 it에 얼마나 중요한 영향을 미치는지 가중치를 계산하여, 이 가중치를 바탕으로 it의 문맥적 의미를 재구성합니다.
    • 이처럼 입력 내의 모든 단어 간 관계를 가중치 파라미터로 두고 한 번에 학습하기 때문에, 전체 문장에 대한 관계를 동시에 고려할 수 있습니다.
  • 장점:
    • 병렬 처리 가능: 모든 단어를 동시에 계산하므로 GPU를 활용한 병렬 연산에 유리하여 학습 속도가 매우 빠릅니다.
    • 장기 의존성 해결: 거리와 상관없이 모든 단어의 관계를 직접 계산하므로 장기 의존성 문제를 효과적으로 해결합니다.

최종 비교 정리 🎯

특징 RNN (Recurrent Neural Network) Transformer
처리 방식 순차적 (Sequential), 한 번에 한 단어씩 동시적 (Simultaneous), 한 번에 모든 단어
핵심 가정 순서근접성이 중요하다. 문장 전체의 관계가 중요하다.
구현 메커니즘 순환하는 Hidden State Self-Attention
장점 구조가 직관적이고 간단함 병렬 처리 가능(빠른 속도), 장기 의존성 해결
단점 병렬 처리 불가(느린 속도), 장기 의존성 문제 연산량이 많고 많은 데이터 필요
반응형
반응형

Ⅰ. 동적 임베딩의 등장 배경: 정적 임베딩의 근본적 한계

우리가 지금까지 배운 Word2Vec, GloVe, FastText는 모두 정적 임베딩(Static Embedding) 또는 문맥 독립적(Context-independent) 임베딩이라고 불립니다. 이들의 공통된, 그리고 치명적인 한계는 바로 **'하나의 단어는 오직 하나의 벡터만 가진다'**는 점입니다.

하지만 실제 언어에서 단어의 의미는 문맥에 따라 크게 달라집니다.

  • "My wife and I have a joint bank account." (나와 아내는 공동 은행 계좌가 있다.) -> 금융 기관
  • "He had a nice walk along the river bank." (그는 강을 따라 기분 좋게 걸었다.) -> 지형

정적 임베딩 방식으로는 이 두 'bank'를 구별할 수 없습니다. 두 단어는 완전히 동일한 벡터 값을 갖게 되며, 이는 모델이 문맥을 제대로 이해하는 데 큰 방해가 됩니다.

이러한 문제를 해결하기 위해, "동일한 단어라도 문맥에 따라 그 의미가 달라질 수 있으니, 벡터 공간에서도 다르게 표현되어야 한다!"는 아이디어에서 출발한 것이 바로 동적 임베딩(Dynamic Embedding) 또는 **문맥 의존적 임베딩(Context-dependent/Contextualized Embedding)**입니다.


Ⅱ. 동적 임베딩의 핵심 개념과 작동 방식

동적 임베딩의 핵심은 **'사전에 계산된 벡터 값을 조회(lookup)하는 방식이 아니라, 문장이 입력되었을 때 실시간으로(on-the-fly) 단어의 벡터를 계산하는 방식'**이라는 점입니다.

  • 입력: 단어 하나가 아닌, 문장 전체 (토큰의 집합)
  • 고려 사항: 어떤 단어(토큰)와 함께 입력으로 사용되는지에 따라 의미를 파악
  • 원하는 결과: 문맥을 반영하여 각 토큰별로 고유한 숫자 벡터(단어 임베딩)를 생성

이것이 어떻게 가능한가? 바로 ELMo, BERT와 같은 거대한 **사전 훈련된 언어 모델(Pre-trained Language Model, PLM)**을 사용하기 때문입니다.

이 모델들은 수십억 개의 문장으로 이루어진 방대한 텍스트 데이터를 미리 학습하면서, 특정 단어가 어떤 문맥에서 어떤 의미로 쓰이는지에 대한 패턴을 내부적으로 익혔습니다.

따라서 우리가 "I went to the river bank."라는 문장을 이 모델에 입력하면, 모델은 'bank'라는 단어가 'river'라는 단어와 함께 쓰인 것을 보고, '금융 기관'이 아닌 '강둑'의 의미를 가진 벡터를 동적으로 생성해 줍니다.

이미지에 나온 bank의 예시 그래프는 이 개념을 시각적으로 명확하게 보여줍니다.

  • "river bank" (녹색, 파란색 점)는 서로 가까이 묶여 있습니다.
  • "money at the bank", "cash from the bank" (빨간색, 노란색 점)는 서로 가까이 묶여 있습니다.
  • "joint bank account" (청록색 점)는 금융 관련 의미이므로 빨간색, 노란색 점과 가깝습니다.
  • 중요한 것은, 이 5개의 'bank'는 모두 다른 위치에 찍혀 있으며, 이는 곧 모두 다른 벡터 값을 가짐을 의미합니다.

Ⅲ. 단어 임베딩 모델의 분류

이미지의 분류 다이어그램은 전체적인 흐름을 이해하는 데 매우 중요합니다.

  • Word Embeddings Models (단어 임베딩 모델)
    • Context-independent (문맥 독립적/정적): 문맥 고려 X, 단어마다 고정된 벡터 1개
      • Word2Vec, GloVe, FastText
    • Context-dependent (문맥 의존적/동적): 문맥 고려 O, 같은 단어도 문맥마다 다른 벡터 생성
      • RNN based: 순환 신경망(RNN) 기반. 문장의 순차적 정보를 활용.
        • ELMo, CoVe
      • Transformer-based: 트랜스포머 아키텍처 기반. 문장 전체의 관계를 한 번에 파악하여 더 강력한 문맥 이해 능력을 보임. 현대 NLP의 대세.
        • BERT, ALBERT, RoBERTa, XLM 등 (GPT 계열도 여기에 속함)

최종 요약 및 시험 대비 🎯

  • 제안 동기: 정적 임베딩은 **단어의 다의성(polysemy)**을 처리하지 못한다.
  • 핵심 아이디어: 단어의 벡터는 고정된 값이 아니라, 주변 문맥에 따라 동적으로 계산되어야 한다.
  • 작동 방식: 문장 전체를 거대한 언어 모델(ELMo, BERT 등)의 입력으로 사용하여, 모델이 문맥을 이해하고 각 단어에 대한 문맥 맞춤형 벡터를 출력한다.
  • 결과: 동일한 단어 bank라도 문맥에 따라 벡터 공간의 서로 다른 위치에 표현되며, 이를 통해 모델의 성능을 획기적으로 향상시켰다.
  • 분류: Word2Vec, GloVe, FastText는 정적(Context-independent), ELMo와 BERT 이후의 모델들은 동적(Context-dependent) 임베딩이다.

 

기본 신경망 방식(MLP 기반)의 명확한 한계점 🎯

Word2Vec과 같은 기본 신경망 모델은 단어 임베딩의 시대를 열었지만, 그 구조( 형태의 단순한 MLP) 때문에 본질적인 한계에 부딪혔습니다. 이 한계를 극복하기 위한 고민이 바로 동적 임베딩의 출발점입니다.

1. 입력 크기 고정 (Fixed Input Size)

  • 문제점: 기본 신경망은 입력과 출력의 크기가 항상 고정되어 있습니다. Word2Vec의 경우, 한 번에 하나의 중심 단어(또는 정해진 개수의 주변 단어)만 입력으로 받을 수 있습니다. 이는 "나는 오늘 학교에 갔다" 처럼 길이가 다양한 문장 전체를 한 번에 처리하고 이해하는 데 근본적으로 부적합한 구조입니다. 모델의 유연성이 떨어질 수밖에 없습니다.

2. 제한된 국소 맥락(Local Context)의 범위

  • 문제점: Word2Vec은 사용자가 지정한 고정된 크기의 윈도우(window size) 내에 있는 단어들만 문맥으로 간주합니다. 예를 들어 window size가 2라면, "The cat, which was very cute, sat on the mat"이라는 문장에서 'cat'의 의미를 파악하는 데 'The', 'which', 'was', 'very'만 참고할 뿐, 문장 뒤쪽에 있는 중요한 단어 'sat'나 'mat'는 전혀 고려하지 못합니다. 이처럼 문장 내의 **장거리 의존성(long-range dependency)**을 학습할 수 없다는 치명적인 단점이 있습니다.

3. 정적 임베딩 (Static Embedding)

  • 문제점: 이 구조에서는 학습이 완료된 후, 각 단어는 문맥과 상관없이 단 하나의 고정된 벡터를 갖게 됩니다. 이는 앞서 계속 강조했듯, "강"과 "은"처럼 완전히 다른 의미의 'bank'를 전혀 구별하지 못하는 결과를 낳습니다.

해결을 위한 발상의 전환: 아키텍처를 바꾸자! 💡

이러한 문제들은 단순히 파라미터를 조정하거나 데이터를 더 많이 사용하는 것만으로는 해결할 수 없는, 모델 구조 자체의 한계였습니다. 따라서 연구자들은 다음과 같은 결론에 도달했습니다.

"더 나은 임베딩을 만들려면, 신경망의 구조(Architecture) 자체를 바꿔야 한다!"

이것이 바로 슬라이드에서 노란색으로 강조된 핵심 메시지입니다. 즉, 하나의 단어만 입력받는 단순한 피드포워드 신경망(Feed-forward Neural Network) 구조를 버리고, 가변적인 길이의 순차적인 데이터(sequential data)를 처리하는 데 특화된 새로운 신경망 구조를 도입해야 한다는 것입니다.

이러한 요구에 따라 등장한 것이 바로 **순환 신경망(Recurrent Neural Network, RNN)**이며, 이는 ELMo와 같은 초기 동적 임베딩 모델의 기반이 되었습니다. RNN은 문장의 단어를 순서대로 하나씩 입력받으면서 이전 단계의 정보를 기억(hidden state)하고 다음 단계로 넘겨주기 때문에, 고정된 윈도우를 넘어 문장 전체의 문맥을 이해할 수 있는 가능성을 열었습니다.

결론적으로, 기본 신경망의 '고정된 입력', '제한된 문맥', '정적인 결과'라는 3가지 한계는 RNN과 같은 새로운 아키텍처의 등장을 촉발했으며, 이것이 동적 임베딩 시대로 나아가는 결정적인 전환점이 되었습니다.

반응형
반응형

Ⅰ. 기존 방식의 한계와 FastText의 등장 배경

Word2Vec과 GloVe는 뛰어난 단어 임베딩 모델이지만, 이미지에서 지적하듯 명확한 한계점을 가지고 있었습니다.

  • 단어 단위(Word-level) 학습: 이 모델들은 단어를 더 이상 쪼갤 수 없는 최소 단위, 즉 하나의 '통'으로 취급합니다. 이로 인해 두 가지 큰 문제가 발생합니다.
  • 내부 형태(Morphology) 무시: 'dark', 'darker', 'darkest'는 모두 'dark'라는 어근(root)을 공유하며 의미적으로 매우 유사합니다. 하지만 Word2Vec과 GloVe는 이 단어들을 전혀 별개의 단어로 취급하여 각각 독립적으로 벡터를 학습합니다. 이처럼 단어의 내부 구조(접두사, 어근, 접미사 등)에 담긴 풍부한 정보를 활용하지 못합니다. 이는 특히 한국어처럼 교착어(조사, 어미 등이 발달한 언어)에서 더욱 불리합니다.
  • OOV (Out-of-Vocabulary) 문제: 학습 데이터에 등장하지 않은 단어에 대해서는 벡터를 생성할 수 없습니다. 'embedding'을 학습했지만 'embeddings'가 등장하면 OOV가 되어 처리할 수 없는 문제가 발생합니다.

이러한 문제들을 해결하기 위해 2016년 페이스북 AI 연구팀(FAIR)에서 FastText를 제안했습니다.


Ⅱ. FastText의 핵심 아이디어: Subword 확장 💡

FastText의 가장 중요한 혁신은 단어를 더 작은 단위인 문자 n-gram(character n-gram)의 집합으로 간주하는 것입니다.

  • Subword 분해: 각 단어를 문자 n-gram들로 분해합니다. 보통 n은 3에서 6 사이의 값을 사용합니다.
    • 예를 들어, n=3일 때 where라는 단어는 3글자씩 쪼갠 whe, her, ere로 나뉩니다.
    • 여기에 추가로, 단어의 시작과 끝을 알리는 특별한 기호 <와 >를 추가하여 <wh, ere>, 그리고 원래 단어 자체인 <where>도 부분 단어(subword) 집합에 포함시킵니다.
    • 최종적으로 where의 subword 집합 $G_{where}$는 {<wh, whe, her, ere, re>, <where>} 가 됩니다.
  • 단어 벡터는 Subword 벡터의 합: FastText는 단어 자체가 아니라, 이 모든 subword 각각에 대해 벡터를 학습합니다. 그리고 최종 단어 'where'의 벡터는 이 subword 벡터들의 총합으로 계산됩니다.
    • : subword 에 해당하는 벡터 (이것이 실제 학습되는 파라미터)
    • : 단어 'where'의 최종 임베딩 벡터

Subword 방식의 강력한 장점

  1. OOV 문제 해결: 학습 데이터에 없던 'embeddings'라는 단어가 등장해도, 이를 emb, mbe, bed, ddi, ... 등의 subword로 분해할 수 있습니다. 이 subword들은 학습 데이터의 다른 단어들('embedding', 'embedded' 등)을 통해 이미 학습되었을 가능성이 높으므로, 이들의 벡터 합을 통해 처음 보는 단어에 대해서도 그럴듯한 벡터를 생성할 수 있습니다.
  2. 형태론적 정보 반영: 'darker'는 <darker>와 dark, ark, rke, ker 등의 subword를 가집니다. 'darkest' 역시 <darkest>와 dark, ark, kes, est 등의 subword를 가집니다. 두 단어는 dark, ark 등 많은 subword 벡터를 공유하게 되므로, 최종 단어 벡터도 자연스럽게 매우 유사한 값을 갖게 됩니다. 이로써 단어의 형태적 유사성이 벡터 공간에 효과적으로 반영됩니다.

Ⅲ. FastText의 학습 방식: Skip-gram + Subword

FastText는 Word2Vec의 Skip-gram with Negative Sampling 모델을 기본 구조로 사용합니다. 하지만 중심 단어(center word)를 다루는 방식에서 결정적인 차이가 있습니다.

  • 기본 구조: Skip-gram (중심 단어가 주어졌을 때, 주변 단어를 예측)
  • Word2Vec과의 차이점:
    • 주변 단어 (Context Word, ): Word2Vec과 동일하게 단어 전체에 대한 벡터를 사용합니다.
    • 중심 단어 (Center Word, ): Word2Vec처럼 단어 하나의 벡터를 사용하는 것이 아니라, 중심 단어를 구성하는 모든 subword 벡터들의 합을 사용합니다.

이를 통해 스코어 함수(score function) $s(w, c)$가 정의됩니다. 이 함수는 중심 단어 와 주변 단어 가 함께 등장할 확률을 나타내며, 이 값이 최대화되도록 학습합니다.

  • : 중심 단어 의 subword 집합
  • : subword 의 벡터
  • : 주변 단어 의 벡터

학습 목표: 실제 주변 단어(Positive sample)에 대해서는 스코어()를 최대화하고, 랜덤으로 뽑은 가짜 주변 단어(Negative samples)에 대해서는 스코어를 최소화하는 방향으로 subword 벡터()와 주변 단어 벡터()를 업데이트합니다.


최종 요약 및 시험 대비 🎯

  • 등장 배경: Word2Vec/GloVe는 단어를 통으로 학습하여 형태론적 정보를 무시하고 OOV 문제에 취약하다.
  • 핵심 아이디어: 단어를 문자 n-gram(subword)의 집합으로 본다. 최종 단어 벡터는 subword 벡터들의 합이다.
  • 장점:
    1. Subword 정보를 활용해 OOV 단어에 대한 벡터 추정이 가능하다.
    2. 어근, 접사 등 형태론적 유사성을 벡터에 자연스럽게 반영할 수 있다.
  • 학습 방식: Word2Vec의 Skip-gram 구조를 기반으로 하되, 중심 단어의 벡터를 해당 단어의 subword 벡터들의 합으로 대체하여 학습한다.

이 네 가지 포인트를 정확히 이해하면 FastText 관련 문제는 모두 해결할 수 있습니다. FastText는 "단어를 쪼개서 본다"는 간단하지만 강력한 아이디어로 기존 모델의 한계를 극복한 모델이라는 점을 기억하는 것이 핵심입니다.

 

Ⅰ. FastText 모델의 장점 (Advantages) ✨

FastText의 장점은 모두 **Subword(문자 n-gram)**라는 핵심 아이디어에서 비롯됩니다.

  • OOV (Out-of-Vocabulary) 단어 처리 가능: 이게 FastText의 가장 큰 강점이죠.
    • 원리: 학습 데이터에 없던 새로운 단어가 나타나도, 그 단어를 subword로 분해합니다. 이 subword들은 학습 데이터의 다른 단어들에서 이미 학습되었을 가능성이 높기 때문에, 이들의 벡터를 조합하여 처음 보는 단어의 벡터를 추정할 수 있습니다.
    • 예시: electrofishing이라는 단어를 학습한 적이 없더라도, ele, lec, ctr, tro 등의 subword는 electric, electrolux 같은 단어들을 통해 이미 학습되었습니다. 따라서 electrofishing의 벡터를 성공적으로 만들어낼 수 있습니다. 이와 반대로 Word2Vec/GloVe는 OOV 단어가 나오면 그냥 무시하거나 임의의 값(거의 0에 가까운 벡터)으로 처리할 수밖에 없습니다.
  • 형태소/어근 정보 반영: 단어의 내부 구조를 이해합니다.
    • 원리: helpful과 helpless는 help라는 공통 어근을 가집니다. FastText는 이 두 단어를 subword로 분해할 때 hel, elp 등의 공통된 n-gram을 발견하고, 이 n-gram들이 공유하는 벡터 때문에 두 단어의 최종 벡터가 유사한 공간에 위치하게 됩니다. 이로써 단어의 형태론적 유사성이 벡터에 자연스럽게 반영됩니다.
    • 효과: 특히 한국어(먹다, 먹고, 먹으니)나 독일어처럼 단어의 변형(inflection)이 많은 언어에서 매우 효과적입니다.
  • 희귀 단어 표현 개선: 데이터에 몇 번 등장하지 않는 희귀 단어(rare word)도 상대적으로 더 잘 표현합니다.
    • 원리: Word2Vec/GloVe는 등장 빈도가 너무 낮은 단어는 정보가 부족하여 품질 좋은 벡터를 학습하기 어렵습니다. 하지만 FastText는 희귀 단어라도 그 단어를 구성하는 subword가 다른 흔한 단어에도 포함되어 있다면, 그 subword들의 벡터 정보를 빌려와(borrow) 더 안정적이고 품질 좋은 벡터를 만들어낼 수 있습니다.

Ⅱ. FastText 모델의 단점 (Disadvantages) 🐢

혁신적인 만큼 감수해야 할 비용도 존재합니다.

  • 정적 임베딩 (Static Embedding): 이 한계는 GloVe와 동일합니다. FastText 역시 단어의 문맥에 따른 의미 변화를 포착하지 못합니다. "사과(apple)를 먹었다"의 '사과'와 "스티브 잡스의 애플(Apple)"의 '애플'은 subword 기반으로 계산된 동일한 하나의 벡터로 표현됩니다.
  • 모델 크기 증가: 학습해야 할 벡터의 수가 훨씬 많습니다.
    • 원인: Word2Vec/GloVe는 단어 사전에 있는 단어의 개수만큼만 벡터를 저장하면 됩니다. 하지만 FastText는 단어 사전의 모든 단어 벡터는 물론, 학습 과정에서 발견된 모든 subword(n-gram)에 대한 벡터까지 전부 저장해야 합니다. 이로 인해 모델의 파일 크기가 훨씬 커져 저장 공간을 많이 차지합니다.
  • 학습 속도 느림: 계산 과정이 더 복잡합니다.
    • 원인: Word2Vec은 학습 시 단어 벡터 하나만 조회(lookup)하면 됩니다. 하지만 FastText는 학습할 단어가 나올 때마다 매번 그 단어를 subword로 분해하고, 데이터베이스에서 모든 subword 벡터를 찾아낸 뒤, 이들을 모두 더하는 추가적인 연산이 필요합니다. 이 과정 때문에 전체적인 학습 속도가 Word2Vec보다 느려질 수밖에 없습니다.

Ⅲ. 코드 예제 분석 💻

제시된 코드는 gensim 라이브러리를 사용하여 FastText 모델을 학습하고 활용하는 예제입니다.

Python
 
from gensim.models import FastText

# 1. 모델 학습
# result: 토큰화된 문장들의 리스트 (e.g., [['fasttext', 'is', 'good'], ['word2vec', 'is', 'also', 'good']])
# size=100: 임베딩 벡터의 차원을 100으로 설정
# window=5: 중심 단어 기준, 앞뒤로 고려할 단어의 개수(문맥의 크기)
# min_count=5: 전체 데이터에서 5번 미만으로 등장하는 단어는 무시
# workers=4: 학습에 사용할 CPU 쓰레드 수
# sg=1: 학습 방식을 Skip-gram으로 설정 (0이면 CBOW)
model = FastText(result, size=100, window=5, min_count=5, workers=4, sg=1)

# 2. 모델 활용: 유사 단어 찾기
# 'electrofishing'과 가장 유사한 단어들을 벡터 공간에서 찾아 출력
model.wv.most_similar('electrofishing') 

# [결과 분석]
# ('electrolux', ...), ('electrolyte', ...), ('electro', ...), ('electric', ...)
# -> 'electrofishing'이라는 단어를 학습한 적이 없어도, 'electro-' 라는 subword 정보를 활용하여
#    전기/전자와 관련된 단어들을 성공적으로 찾아낸 것을 볼 수 있습니다.
# ('overfishing', ...)
# -> '-fishing' 이라는 subword 정보를 활용하여 'overfishing'과의 유사성도 포착했습니다.

핵심 파라미터 해설:

  • size: 만들어질 벡터의 차원 수.
  • window: 한 번에 학습에 사용할 문맥의 크기.
  • min_count: 너무 희귀한 단어는 노이즈일 수 있으므로 학습에서 제외하는 기준. FastText는 subword 덕분에 min_count를 1로 설정해도 Word2Vec보다 안정적인 학습이 가능합니다.
  • sg: 1이면 Skip-gram, 0이면 CBOW. 일반적으로 Skip-gram이 성능이 더 좋다고 알려져 있습니다.

이 코드는 FastText가 어떻게 OOV 단어인 electrofishing에 대해서도 그 의미(전기 + 낚시)를 성공적으로 유추해내는지를 명확히 보여주는 훌륭한 예시입니다.

 

📚 단어 임베딩 모델 최종 요약 (Word2Vec, GloVe, FastText)

1. 시작점: Word2Vec의 성공과 명확한 한계

  • Word2Vec (예측 기반): 신경망을 이용해 주변 단어를 예측하는 방식(Skip-gram)이나 주변 단어로 중심 단어를 예측하는 방식(CBOW)을 통해 단어의 의미를 벡터 공간에 담아내는 데 성공했습니다. 특히 단어 간의 선형 관계('king' - 'man' + 'woman' ≈ 'queen')를 잘 학습하는 능력으로 큰 주목을 받았습니다.
  • 한계점 1: 전역 통계 정보 부족
    • Word2Vec은 지정된 윈도우(window) 크기 내의 지역적(local) 문맥 정보만 학습에 반영합니다. 이 때문에 코퍼스 전체에서 나타나는 단어 동시 등장 패턴, 즉 전역적(global) 통계 정보를 놓치는 단점이 있었습니다.
    • ➡️ 해결사: GloVe 등장!
  • 한계점 2: 단어 단위 처리의 문제 (OOV 및 희귀 단어)
    • Word2Vec은 단어를 '통'으로 보기 때문에, 학습 사전에 없는 단어(OOV)나 등장 빈도가 매우 낮은 희귀 단어에 대한 벡터를 제대로 학습하거나 생성할 수 없었습니다.
    • ➡️ 해결사: FastText 등장!

2. 대안 ① GloVe: 전역적 통계의 힘을 보여주다

  • GloVe의 핵심 철학: "단어의 의미는 단순 빈도가 아니라, 전체 코퍼스에서의 동시 출현 확률의 비율(Ratio)로 드러난다."
  • 방법론: LSA와 같이 코퍼스 전체의 **동시 등장 행렬(Co-occurrence Matrix)**을 먼저 계산하여 전역 통계 정보를 확보합니다. 그 후, "두 단어 벡터의 내적이 동시 등장 빈도의 로그값과 같아지도록"() 학습하여 Word2Vec의 장점인 단어 간 선형 관계 학습 능력까지 통합했습니다.
  • 결론: 전역 정보를 활용하여 Word2Vec보다 단어 유추(Analogy) 등에서 더 높은 성능과 빠른 학습 속도를 달성했습니다.

3. 대안 ② FastText: 단어를 쪼개어 의미를 찾다

  • FastText의 핵심 철학: "단어의 의미는 그 단어를 구성하는 내부 subword(문자 n-gram) 벡터들의 합으로 표현할 수 있다."
  • 방법론: Word2Vec의 Skip-gram 모델을 기반으로 하되, 단어를 통째로 사용하지 않고 문자 n-gram으로 분해합니다. 예를 들어 apple은 app, ppl, ple 등의 부분 벡터들의 합으로 표현됩니다.
  • 결론: Subword 정보를 활용하여 OOV 문제를 해결하고, 단어의 형태론적 특징을 반영하여 희귀 단어에 대해서도 품질 좋은 벡터를 생성해냈습니다.

4. 그리고 남은 숙제: 정적 임베딩의 한계

  • 공통된 한계점: Word2Vec, GloVe, FastText 모두 정적 임베딩(Static Embedding) 방식입니다. 즉, 문맥에 상관없이 한 단어는 언제나 단 하나의 고정된 벡터 값을 갖습니다.
    • 예: "사과(Apple) 주식을 샀다"와 "사과(apple)를 먹었다"에서 '사과'는 완전히 다른 의미지만, 이 모델들은 두 '사과'를 똑같은 벡터로 취급합니다.
  • 다음 세대로의 진화: 이 한계를 극복하기 위해 등장한 것이 바로 문맥에 따라 단어의 의미가 바뀌는 동적 임베딩, 즉 Contextualized Embeddings입니다.
    • 이 계열의 대표적인 모델이 바로 ELMo, BERT, GPT 등이며, 현대 자연어 처리의 주류를 이루고 있습니다. 이 모델들은 문장 전체를 입력으로 받아 특정 위치에 있는 단어의 의미를 문맥에 맞게 동적으로 계산해냅니다.

이 흐름을 완벽히 이해하시면 각 모델이 어떤 문제를 해결하기 위해 어떤 아이디어를 제시했는지 명확하게 파악하여 시험에 완벽하게 대비할 수 있을 것입니다.

반응형
반응형

Ⅰ. 단어 임베딩의 개념과 전통적 방법론

단어 임베딩(Word Embedding)은 사람이 쓰는 자연어를 컴퓨터가 이해할 수 있도록 단어들을 밀집된 형태의 벡터(dense vector)로 변환하는 기술입니다. 초기 단어 표현 방식인 원-핫 인코딩(One-hot Encoding)은 단어의 의미를 전혀 담지 못하고 차원의 저주 문제가 있었지만, 분포 가설(Distributional Hypothesis)의 등장으로 새로운 전기를 맞습니다.

분포 가설은 "비슷한 위치(문맥)에 등장하는 단어는 비슷한 의미를 가진다"는 아이디어로, 이를 기반으로 단어의 의미를 벡터 공간에 표현하려는 시도가 이어졌습니다. LSA, Word2Vec, GloVe 모두 이 가설에 기반하고 있습니다.


Ⅱ. 행렬 기반 방식: LSA (Latent Semantic Analysis)

LSA(잠재 의미 분석)는 전체 문서-단어 행렬(Document-Term Matrix, DTM) 또는 단어-문맥 행렬(Term-Context Matrix)을 기반으로 단어의 의미를 벡터로 표현하는 대표적인 행렬 기반 방법론입니다.

1. 핵심 원리

LSA는 거대한 행렬에 **특이값 분해(Singular Value Decomposition, SVD)**라는 수학적 기법을 적용하여 행렬의 차원을 축소하고, 그 과정에서 단어 벡터를 얻습니다.

  • 입력: 문서와 단어의 등장 빈도를 기록한 거대한 행렬 (DTM 또는 Co-occurrence Matrix)
  • 과정: 이 행렬을 수학적으로 의미 있는 작은 행렬들()로 분해합니다. 여기서 행렬의 작은 특이값들을 제거하여 노이즈를 줄이고 핵심 의미 구조만 남깁니다.
  • 결과: 차원이 축소된 행렬에서 각 행(또는 열)이 해당 단어의 의미를 압축한 벡터, 즉 단어 임베딩 벡터가 됩니다.

2. 장점

  • 전체 데이터의 통계 정보 활용: 특정 문서나 문장이 아닌, 전체 코퍼스(Corpus)의 단어 사용 통계 정보를 종합적으로 활용하여 단어의 의미를 파악합니다. 이는 단어 간의 광범위한 관계(e.g., 동의어, 연관어)를 학습하는 데 유리합니다.
  • 의미 기반의 연산 가능: 벡터 공간에서 단어 벡터 간의 코사인 유사도 등을 통해 의미적 유사성을 계산할 수 있으며, 'king' - 'man' + 'woman' ≈ 'queen'과 같은 단어 유추(Word Analogy)도 어느 정도 가능합니다.

3. 한계점 (매우 중요)

  • Vector Space Structure 활용 비효율성: 이미지에서 지적한 대로, LSA는 전체 통계 정보(Global Statistical Information)를 사용하지만, 그 정보를 벡터 공간 구조에 효율적으로 담아내지 못합니다. 즉, 단어 유추(Word Analogy) 같은 선형적 관계를 학습하는 데 취약하며 성능이 떨어집니다. SVD라는 강력한 도구를 사용함에도 불구하고, 단어 의미의 미세한 관계를 벡터 공간에 정교하게 매핑하는 능력이 부족합니다.
  • 계산 복잡성: 코퍼스가 커지면 행렬의 크기도 기하급수적으로 커져 SVD 계산에 막대한 시간과 메모리가 필요합니다.
  • 새로운 단어 추가의 어려움: 새로운 단어가 추가되면 전체 행렬을 다시 만들고 처음부터 SVD 계산을 다시 해야 하는 경직된 구조입니다.

Ⅲ. 예측 기반 방식: Word2Vec (Word to Vector)

Word2Vec은 2013년 구글에서 제안한 모델로, 신경망을 기반으로 특정 단어 주변의 문맥(local context)을 예측하거나, 문맥을 통해 특정 단어를 예측하는 방식으로 단어 임베딩을 학습합니다.

1. 핵심 원리

Word2Vec은 두 가지 주요 모델 아키텍처를 가집니다.

  • CBOW (Continuous Bag-of-Words): 주변 단어들(문맥)이 주어졌을 때, 중앙에 있는 단어를 예측하는 모델입니다. ["나는", "___", "먹는다"] 라는 문맥에서 빈칸에 "밥을"이 올 확률을 높이는 방향으로 학습합니다.
  • Skip-gram: 중앙 단어가 주어졌을 때, 주변 단어들(문맥)을 예측하는 모델입니다. "밥을"이라는 단어가 주어졌을 때 ["나는", "먹는다"] 등을 예측하도록 학습합니다. 일반적으로 Skip-gram이 더 큰 데이터셋에서 성능이 좋다고 알려져 있습니다.

2. 장점

  • 선형 관계 학습: 'king' - 'man' + 'woman' ≈ 'queen'과 같은 단어 유추 문제를 LSA보다 훨씬 잘 해결합니다. 이는 단어의 의미적, 문법적 관계를 벡터 공간에 효과적으로 투영함을 의미합니다.
  • 계산 효율성: 전체 행렬을 한 번에 계산하는 LSA와 달리, 작은 크기의 문맥(local context window)을 슬라이딩하며 학습하므로 계산이 훨씬 효율적이고 대용량 데이터에도 적용하기 쉽습니다.

3. 한계점 (매우 중요)

  • 지역적 문맥(Local Context)에만 집중: Word2Vec은 학습 과정에서 설정된 윈도우 크기(window size) 내의 지역적 문맥 정보만 활용합니다. 이로 인해 코퍼스 전체에 걸친 포괄적인 통계 정보(Global Co-occurrence Counts)를 제대로 반영하지 못하는 단점이 있습니다. 예를 들어, 'ice'와 'steam'은 보통 같은 문장에 등장하지 않지만, 코퍼스 전체적으로 보면 둘 다 'water'라는 단어와 자주 함께 등장하는 패턴을 보입니다. Word2Vec은 이러한 전역적인 관계를 직접적으로 학습하기 어렵습니다.

Ⅳ. 통합 방식: GloVe (Global Vectors for Word Representation)

GloVe는 2014년 스탠포드 대학에서 제안한 모델로, LSA의 장점(전역 통계 정보 활용)과 Word2Vec의 장점(단어 유추 등 선형 관계 학습)을 모두 결합하려는 시도에서 탄생했습니다.

1. 제안 동기 및 핵심 주장 (이미지 내용)

  • 문제 제기: 기존의 단어 임베딩 학습은 모두 단어 동시 등장 통계(Co-occurrence Statistics)에 기반하는데, 어떻게 이 통계로부터 단어의 의미가 생성되는가? 어떤 통계적 특징이 의미 구별 능력을 제공하는가?
  • 핵심 주장: 단어의 의미를 포착하는 데에는 단순한 등장 빈도(raw probability)나 동시 등장 횟수 자체가 아니라, 동시 등장 확률의 비율(Ratio of Co-occurrence Probabilities)이 가장 중요하다!

2. 핵심 원리: 확률의 비율(Ratio)

GloVe의 아이디어를 이해하기 위해 이미지의 표를 살펴봅시다.

  • Probe Words (문맥 단어): k=solid, k=gas, k=water, k=fashion
  • Target Words (타겟 단어): ice, steam

우리가 알고 싶은 것은 'ice'와 'steam'의 의미 차이입니다.

  1. 'ice'와 관련이 깊고 'steam'과 관련이 먼 단어: solid
    • P(solid|ice) / P(solid|steam) = 8.9 -> 값이 1보다 훨씬 큼
  2. 'steam'과 관련이 깊고 'ice'와 관련이 먼 단어: gas
    • P(gas|ice) / P(gas|steam) = 8.5 x 10⁻² -> 값이 1보다 훨씬 작음
  3. 'ice'와 'steam' 모두와 관련이 있는 단어: water
    • P(water|ice) / P(water|steam) = 1.36 -> 값이 1에 가까움
  4. 'ice'와 'steam' 모두와 관련이 없는 단어: fashion
    • P(fashion|ice) / P(fashion|steam) = 0.96 -> 값이 1에 가까움

결론: 이 확률의 비율이야말로 ice와 steam의 의미적 차이를 명확하게 드러내는 척도입니다. GloVe는 바로 이 비율 정보를 단어 벡터 공간에 직접 인코딩하도록 모델을 설계했습니다.

이를 위해 GloVe는 손실 함수(Loss Function)를 다음과 같이 설계했습니다.

여기서 는 각각 중심 단어와 주변 단어의 벡터이며, $X_{ij}$는 단어 가 동시에 등장한 횟수입니다. 이 손실 함수는 두 벡터의 내적이 동시 등장 빈도의 로그값에 가까워지도록 학습합니다. 이는 벡터의 차이가 동시 등장 확률 비율의 로그값에 대응되도록 만들어, 결과적으로 단어 벡터 공간에 확률 비율 정보를 인코딩하는 효과를 낳습니다.

3. 장점

  • 전역 통계 정보와 지역 문맥의 결합: 코퍼스 전체의 동시 등장 확률(Global Co-occurrence Statistics)을 직접적으로 학습에 사용하여 LSA의 장점을 취합니다.
  • 빠른 학습 속도: Word2Vec처럼 윈도우 기반으로 학습하지 않고, 미리 계산된 전체 동시 등장 행렬을 사용하므로 학습이 빠르고 효율적입니다.
  • 뛰어난 단어 유추 성능: 단어 의미 간의 선형적 관계를 Word2Vec만큼, 혹은 그 이상으로 잘 학습합니다.

Ⅴ. 세 가지 모델 최종 비교 정리

특징 LSA (Latent Semantic Analysis) Word2Vec GloVe (Global Vectors)
기반 방법론 행렬 분해 기반 (Count-based) 예측 기반 (Prediction-based) 행렬 분해 + 예측 (Count-based)
활용 정보 전역 통계 정보 (Global) 지역 문맥 정보 (Local) 전역 통계 정보 (Global)
핵심 아이디어 SVD를 통한 차원 축소 신경망을 통한 주변 단어 예측 동시 등장 확률의 비율(Ratio) 학습
장점 전체 데이터 통계 활용 단어 간 선형 관계 학습 우수, 빠른 학습 LSA와 Word2Vec의 장점 결합, 성능 우수
단점 단어 유추 등 선형 관계 학습에 취약, 계산 복잡 전역 통계 정보 반영 미흡 상대적으로 단점이 적음

이 내용을 숙지하시면 LSA, Word2Vec, GloVe에 대한 어떤 시험 문제든 자신 있게 해결하실 수 있을 겁니다. 핵심은 LSA(전역) -> Word2Vec(지역, 예측) -> GloVe(전역 정보 + 예측의 장점 통합, '비율'이 핵심!) 의 흐름을 이해하는 것입니다.

 

 

GloVe 모델 수식 완전 정복 📝

GloVe의 핵심은 이전 설명에서 강조했듯 "동시 등장 확률의 비율(Ratio of Co-occurrence Probabilities)" 이라는 정보를 단어 벡터 공간에 어떻게 녹여낼 것인가에 대한 수학적 해답을 찾는 과정입니다.


1단계: 목표 설정 - '확률의 비율'을 벡터로 표현하기

가장 먼저, GloVe의 목표는 세 단어 , , 의 관계를 벡터로 표현하는 것입니다. 여기서 는 비교하려는 중심 단어(target words)이고, 는 문맥 단어(context word)입니다.

  • 핵심 아이디어: "단어 가 주어졌을 때, 단어 가 등장할 조건부 확률()"과 "단어 가 주어졌을 때, 단어 가 등장할 조건부 확률()"의 **비율()**은 세 단어 벡터의 함수로 표현할 수 있어야 한다.

이 아이디어를 수식으로 표현하면 다음과 같습니다. 이것이 모든 것의 시작입니다.

  • : 중심 단어(target word) 벡터
  • : 문맥 단어(context word) 벡터
  • : 세 단어 벡터의 관계를 정의할 미지의 함수

여기서 중심 단어 벡터()와 문맥 단어 벡터()를 구분하는 이유는, 두 단어의 역할이 다르기 때문에 초기에는 다른 벡터로 취급하는 것이 수학적으로 더 유연하기 때문입니다. (최종적으로는 합쳐서 사용하기도 합니다.)


2단계: 관계의 단순화 - 벡터의 차이로 의미 표현하기

이미지에서 강조된 것처럼, 우리는 벡터 공간에서 "의미의 차이"가 "벡터의 차이"로 표현되기를 기대합니다. (예: )

이 성질을 함수 에 적용하고 싶습니다. 즉, 함수 가 입력으로 받는 의 관계는 이 둘의 차이 벡터인 $(w_i - w_j)$로 표현되어야 한다는 제약을 가합니다. 이렇게 하면 수식 (1)은 다음과 같이 변형됩니다.

그런데 벡터와 벡터의 연산 결과는 스칼라(하나의 숫자 값)가 되어야 합니다. 우변인 확률의 비율()이 스칼라이기 때문입니다. 벡터 공간에서 두 벡터를 연산하여 스칼라를 만드는 가장 일반적인 방법은 **내적(dot product)**입니다. 따라서 함수 는 $(w_i - w_j)$와 의 내적을 입력으로 받는 형태로 구체화할 수 있습니다.

이것이 이미지에 나온 두 번째 핵심 수식입니다. 이제 우리는 복잡했던 함수 $F(w_i, w_j, \tilde{w}_k)$를 하나의 스칼라 값을 입력으로 받는 함수 로 단순화했습니다.


3단계: 함수 F의 형태 추론 - '준동형(Homomorphism)' 성질 이용

이제 함수 의 정체를 밝혀야 합니다. 여기서 GloVe 논문은 매우 중요한 수학적 속성인 **준동형(Homomorphism)**을 이용합니다.

  • 입니다. (벡터 내적의 분배법칙)
  • 가 성립해야 합니다. (수식 (3)의 좌변과 우변의 구조적 동일성 요구)

결합하면, 우리는 함수 가 다음의 성질을 만족해야 함을 알 수 있습니다.

이고 라고 치환하면, 함수 는 다음 조건을 만족해야 합니다.

이 성질을 만족하는 함수는 바로 **지수 함수(exponential function)**입니다. 라고 하면, 이 성립합니다.

따라서 우리는 가 지수 함수라고 결론 내릴 수 있습니다!


4단계: 최종 목표 수식 도출

가 지수 함수()이므로, 수식 (3)의 양변에 로그(log)를 취해봅시다. 우선 를 (3)에 대입하면,

양변을 비교하면 다음의 관계를 얻을 수 있습니다.

드디어 우리가 원하는 최종 목표 수식이 나왔습니다! 즉, 두 단어 벡터의 내적이 동시 등장 확률의 로그값과 같아지도록 학습하면 되는 것입니다.

하지만 조건부 확률 ()는 계산이 복잡하고, 항이 와 무관하여 노이즈가 될 수 있습니다. 논문에서는 이 항을 편향(bias) 항으로 분리하여 처리하는 것이 더 안정적이라고 말합니다.

따라서 최종적으로 학습을 위한 관계식은 다음과 같이 정의됩니다.

  • : 중심 단어 의 편향 (bias)
  • : 문맥 단어 의 편향 (bias)
  • : 단어 가 동시에 등장한 횟수 (Co-occurrence Count)

이것이 바로 이미지에서 **"학습을 위한 정답으로 정의"**된 최종 수식입니다. GloVe 모델은 손실 함수(Loss function)를 통해 모든 단어 쌍 $(i,k)$에 대해 값이 값에 최대한 가까워지도록 단어 벡터 와 편향 들을 학습시키는 것입니다.

요약 정리 📌

  1. 목표 설정: 벡터 함수 로 확률의 비율 $\frac{P_{ik}}{P_{jk}}$을 표현하자.
  2. 관계 단순화: 의미 차이 = 벡터 차이. 에 의존하도록 만들고, 스칼라 출력을 위해 내적을 사용 .
  3. 함수 F 추론: 라는 준동형 성질을 만족해야 하므로, 는 **지수 함수()**다.
  4. 최종 수식: 양변에 로그를 취하고 편향(bias)을 추가하여 학습 목표를 로 정의한다.

GloVe 모델의 마지막 핵심 파트인 **손실 함수(Loss Function)**와 Word2Vec 대비 성능에 대해 시험 문제를 모두 맞힐 수 있도록 완벽하게 설명해 드리겠습니다.

Ⅰ. GloVe의 최종 손실 함수 형태: 가중치 함수의 도입

앞서 우리는 GloVe의 학습 목표가 모든 단어 쌍 $(i, j)$에 대해 아래 수식을 만족시키는 것임을 확인했습니다.

이제 이 목표를 달성하기 위한 **손실 함수(Loss Function)**를 설계해야 합니다. 손실 함수는 모델의 예측()과 실제 정답() 사이의 오차를 측정하는 함수이며, 모델은 이 오차를 최소화하는 방향으로 학습됩니다.

가장 간단한 방법은 최소 제곱법(Least Squares)을 사용하는 것입니다.

하지만 이 수식에는 두 가지 심각한 문제점이 있습니다.

  1. 희귀 단어 쌍의 문제: 값이 0이면 $\log(X_{ij})$는 음의 무한대로 발산하여 계산이 불가능합니다.
  2. 중요하지 않은 단어 쌍의 문제: "the", "a", "is"와 같은 불용어(stopwords)들은 거의 모든 단어와 함께 등장하기 때문에 값이 매우 큽니다. 이런 단어 쌍들은 단어의 의미를 구별하는 데 별 도움이 되지 않음에도 불구하고, 손실 함수에서 큰 비중을 차지하여 학습을 방해하게 됩니다.

이 문제들을 해결하기 위해 GloVe는 **가중 함수 **를 도입한 가중 최소 제곱 회귀(Weighted Least Squares Regression) 방식을 사용합니다. 이것이 GloVe의 최종 손실 함수입니다.

반응형

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 아이템 사용자 행동 추천 시스템
반응형
반응형

1. 신경망 기반 단어 임베딩: 제안 동기 (Why?)

"왜 굳이 복잡한 신경망까지 사용해야 할까?"에 대한 답입니다.

  • 기존 방식(LSA)의 문제점:
    • 이전까지의 방식(DTM, LSA)은 단어의 '의미'를 단순히 **'출현 빈도'**로만 정의했습니다.
    • 하지만 진짜 '의미'는 빈도수뿐만 아니라, 단어의 순서나 주변에 어떤 단어가 오는지(국소적 문맥)에 따라 결정됩니다. LSA는 이를 반영하지 못했죠.
  • 새로운 가설과 접근법 (★★★★★):
    • 핵심 가설 (분포 가설, Distributional Hypothesis): "비슷한 의미의 단어는 비슷한 주변 단어들과 함께 나타난다." 이 문장은 반드시 외워두세요. "왕(King)"이라는 단어 주변에는 "여왕, 왕자, 성, 왕관" 등이 나타나고, "여왕(Queen)" 주변에도 비슷한 단어들이 나타날 것이라는 아이디어입니다.
    • 새로운 접근: 따라서 이제는 문서 전체를 보는 것이 아니라, 특정 단어 주변의 몇 개 단어(윈도우, window)로 이루어진 **'국소 맥락'**에 집중하여 단어의 의미를 파악하기로 합니다.

2. 참조: 신경망의 학습 원리 (How?)

위의 새로운 아이디어를 구현할 도구로 '신경망'을 선택했습니다. 신경망이 어떻게 학습하는지 기본 원리를 알아봅시다.

신경망이란?

  • 뉴런(Neuron): 신경망을 구성하는 가장 작은 단위로, 입력값(x)을 받아 가중치(w)를 곱하고 편향(b)을 더해 출력값(y)을 내보내는 간단한 계산기입니다.
  • 깊은 신경망(DNN): 이 뉴런들이 여러 층(Layer)으로 수없이 모여 복잡한 구조를 이룬 것입니다. 이를 이용한 기술을 딥러닝이라고 합니다.

신경망의 학습 과정

신경망은 마치 학생과 같습니다. 문제를 풀고, 정답과 비교하며 실력을 키워나갑니다.

  1. 학습 목표(Task) 설정: 신경망에게 풀 문제를 줍니다.
    • 예시: 수많은 강아지 사진(Input X)을 보여주고, "이건 '개'야" 라고 정답(Output Y)을 알려주는 문제를 냅니다.
  2. 예측 및 오차 계산: 신경망은 현재 아는 지식(초기 가중치 w)으로 사진을 보고 예측을 합니다. 당연히 처음에는 틀리겠죠. 그러면 정답과 예측이 얼마나 다른지 '오차(Error)'를 계산합니다. 이 오차를 측정하는 함수를 **손실 함수(Loss Function)**라고 합니다.
  3. 가중치(w) 업데이트 (핵심!)
    • 신경망 학습의 핵심은 **"오차(손실 함수 값)를 최소화하는 방향으로 내부의 가중치(w)를 계속 수정하는 것"**입니다.
    • 이때 **역전파(Backpropagation)**라는 아주 효율적인 방법을 사용합니다. 역전파는 계산된 오차를 바탕으로 "이 오차에 어떤 가중치가 얼마나 영향을 미쳤는지"를 거꾸로 추적하여, 각 가중치를 어느 방향으로 얼마나 수정해야 할지 알려주는 역할을 합니다.

시험 대비 최종 요약

  • 신경망 기반 임베딩의 동기: LSA가 놓친 단어 순서와 국소 문맥을 반영하기 위함.
  • 핵심 가설: 분포 가설 ("비슷한 의미의 단어는 비슷한 주변 문맥에서 등장한다.")
  • 접근 방식: 문서 전체가 아닌, 윈도우(window) 기반의 지역적 문맥에 집중.
  • 학습 원리:
    1. **학습 목표(Task)**를 설정한다.
    2. 예측값과 정답의 차이인 **손실(Loss)**을 계산한다.
    3. **역전파(Backpropagation)**를 이용해 손실을 줄이는 방향으로 **가중치(w)**를 업데이트한다.
  • 궁극적인 목표: 이 학습 과정이 끝나고 나면, 신경망 내부에 남는 최적화된 가중치(w)가 바로 우리가 원하던 '단어의 의미가 응축된 벡터(Word Embedding)'가 됩니다!

 

1. 경사하강법 (Gradient Descent): 신경망의 나침반

신경망이 학습한다는 것은 **'손실(오차)을 최소화하는 최적의 가중치(W)를 찾아가는 과정'**입니다. 경사하강법은 바로 이 최적의 값을 찾아가는 가장 기본적이고 강력한 방법입니다.

  • 핵심 아이디어: 마치 안개 속에서 산을 내려가는 등산가와 같습니다. 가장 낮은 계곡으로 가고 싶지만 안개 때문에 어디가 낮은지 보이지 않습니다. 이때 등산가가 할 수 있는 최선의 방법은, 지금 서 있는 위치에서 발을 딛고 가장 가파르게 경사진 내리막길 방향으로 한 걸음씩 나아가는 것입니다.
  • 용어 매칭 (★★★★★):
    • 산의 지형: 손실 함수 (Loss Function)
    • 등산가의 위치: 현재 가중치(W) 파라미터 값
    • 가장 낮은 계곡: 손실이 최소가 되는 지점 (최적의 가중치 값)
    • 발밑의 경사 (기울기): 그래디언트 (Gradient)
    • 한 걸음의 보폭: 학습률 (Learning Rate)

시험 대비 요약: **경사하강법(Gradient Descent)**이란, 손실 함수의 최솟값을 찾기 위해 현재 지점의 그래디언트(기울기)가 가리키는 가장 가파른 하강 방향으로 가중치를 조금씩 이동시켜, 점차 손실을 줄여나가는 최적화 알고리즘입니다.


2. Neural Network Language Model (NNLM): 신경망, 언어를 배우다

NNLM은 2003년 요슈아 벤지오(Yoshua Bengio)가 제안한, 경사하강법과 신경망을 언어 모델링에 적용한 최초의 시도로, 단어 임베딩 역사에 한 획을 그은 매우 중요한 모델입니다.

  • 핵심 아이디어: NNLM 이전의 통계적 언어 모델들은 여러 한계(e.g., 희소성 문제)가 있었습니다. NNLM은 이 문제를 신경망으로 해결하고자 했습니다.
  • 학습 목표 (Task) 정의 (★★★★★): NNLM의 학습 목표는 아주 명확합니다. 바로 **"이전 단어들을 보고 다음 단어를 예측하는 것"**입니다.
    • 공식: 주어진 (n-1)개의 단어n번째에 올 단어를 맞추는 문제입니다.
    • 예시: "고양이가 소파 위에" 라는 단어들이 주어졌을 때, "앉았다" 라는 다음 단어를 예측하도록 신경망을 학습시킵니다.
  • NNLM의 두 가지 위대한 유산:
    1. 단어 임베딩의 탄생: NNLM은 "다음 단어 예측"이라는 원래의 목표를 수행하는 과정에서, 부산물(by-product)로 아주 중요한 것을 만들어냈습니다. 바로 각 단어의 의미가 압축된 밀집(dense) 벡터, 즉 **단어 임베딩(Word Embedding)**입니다. 신경망의 내부 가중치가 단어의 의미 벡터가 된 것입니다.
    2. 가능성 입증: 신경망을 통해 언어를 학습하고, 단어의 의미를 벡터로 표현할 수 있다는 가능성을 최초로 보여주어 이후 Word2Vec, GloVe, BERT 같은 후속 모델들의 탄생에 지대한 영향을 주었습니다.

시험 대비 요약: **NNLM(신경망 언어 모델)**이란, **'(n-1)개의 이전 단어로 n번째 단어를 예측'**하는 과제를 신경망으로 학습하는 모델입니다. 이 과정에서 부산물로 단어의 의미가 담긴 **밀집 벡터(단어 임베딩)**를 얻을 수 있다는 것을 보여준 최초의 모델입니다.

 

NNLM 아키텍처 완전 정복

NNLM의 목표는 **"이전 (n-1)개의 단어들이 주어졌을 때, n번째 단어가 무엇일지 예측하는 것"**입니다. 이 목표를 달성하기 위해 아래와 같은 구조를 사용합니다.

1단계: 입력 계층 (Input Layer)

  • 역할: 예측에 사용할 이전 단어들, 즉 **문맥(Context)**을 입력받는 부분입니다.
  • 예시: "고양이가 소파 위에" 라는 문맥이 주어지면, '고양이', '소파', '위에' 라는 3개의 단어가 입력됩니다. 실제로는 단어 자체가 아니라 단어 사전에 정의된 각 단어의 **고유 번호(index)**가 입력됩니다.

2단계: 투사 계층 (Projection Layer) ★★★★★

  • 역할: NNLM의 가장 핵심적인 부분입니다. 바로 이 계층에서 단어 임베딩이 만들어집니다.
  • 구성: 이 계층은 'Matrix C' 라고 불리는 거대한 행렬(Lookup Table) 하나로 이루어져 있습니다. 이 행렬의 각 행(row)은 우리 단어 사전에 있는 모든 단어 각각에 대한 임베딩 벡터를 의미합니다.
  • 작동 방식:
    1. 입력 계층에서 단어의 고유 번호(index)를 받습니다.
    2. 그 번호에 해당하는 행(row)을 Matrix C에서 그대로 꺼내옵니다(Look-up).
    3. 꺼내온 행이 바로 그 단어의 밀집(dense) 벡터, 즉 임베딩 벡터입니다.
  • 핵심 포인트: 처음에는 이 Matrix C가 무작위 숫자로 채워져 있지만, 모델이 학습을 진행하면서 "다음 단어를 더 잘 예측하는 방향으로" 이 행렬의 값들이 계속 업데이트됩니다. 학습이 끝나면, 이 Matrix C 자체가 우리가 원하던 '단어 임베딩 모델'이 됩니다!

3단계: 은닉 계층 (Hidden Layer)

  • 역할: 문맥을 이루는 각 단어의 임베딩 벡터들을 하나로 합쳐서, 단어들 사이의 의미적, 문법적 관계를 학습하는 부분입니다.
  • 작동 방식:
    1. 투사 계층에서 나온 여러 개의 단어 임베딩 벡터들을 하나의 긴 벡터로 연결(concatenate)합니다.
    2. 이 긴 벡터를 입력받아 비선형 변환(tanh 함수)을 거쳐 다음 계층으로 전달합니다. 이 과정을 통해 단어들의 조합이 갖는 복합적인 패턴을 파악합니다.

은닉 계층(Hidden Layer)은 개별 단어들의 의미를 조합하여 문맥 전체의 복합적인 의미를 파악하기 위해 반드시 필요합니다. 단순히 단어 벡터들을 합치기만 해서는 알 수 없는 더 깊은 관계를 학습하는 '중간 관리자' 역할을 합니다.


은닉 계층의 역할: 단순한 조합을 넘어 상호작용 학습하기

간단한 비유를 들어보겠습니다. [New, York, is] 라는 단어들이 주어졌을 때 다음 단어를 예측한다고 생각해 보세요.

  • 은닉 계층이 없다면? 모델은 그저 'New'의 의미 벡터, 'York'의 의미 벡터, 'is'의 의미 벡터를 단순히 합치거나 평균 낼 뿐입니다. 이 경우, 모델은 New + York이 New_York이라는 특별한 도시를 의미한다는 상호작용을 제대로 학습하기 어렵습니다. 그냥 '새롭다'와 '요크'라는 의미가 섞인 애매한 벡터가 될 뿐이죠.
  • 은닉 계층이 있다면?
    1. 의미의 조합: "New"라는 단어와 "York"라는 단어가 특정 순서로 함께 나오면, 이것은 '새롭다'는 의미가 아니라 '미국의 도시'라는 완전히 새로운 의미의 개념으로 해석해야 한다는 패턴을 학습합니다.
    2. 문법적 구조 파악: "is"라는 be동사 뒤에는 명사나 형용사가 올 확률이 높다는 등의 문법적 구조를 파악합니다.
    3. 비선형 관계 학습: 언어는 단순한 덧셈(A+B=C)으로 표현되지 않는 복잡한 관계가 많습니다. 예를 들어 "not good"은 "good"의 의미를 완전히 뒤집습니다. 은닉 계층의 **비선형 변환(tanh 함수 등)**은 이러한 복잡하고 비선형적인 관계를 잡아내는 데 결정적인 역할을 합니다.
  • 은닉 계층은 투사 계층에서 합쳐진 긴 벡터([New_York_is])를 입력받아 다음과 같은 복합적인 패턴을 학습합니다.

결론적으로, 은닉 계층은 각 단어라는 개별 재료들을 받아서, 이 재료들이 어떻게 어우러져 '문맥'이라는 하나의 요리를 만드는지 그 레시피를 학습하는 핵심적인 두뇌와 같습니다. 이 과정이 없다면 모델은 단어들의 단순한 나열 이상의 의미를 파악할 수 없습니다.

 

tanh(탄젠트에이치)를 이용한다는 것은, 신경망의 은닉층에서 들어온 신호를 다음 층으로 그냥 전달하지 않고, tanh라는 '활성화 함수(Activation Function)'를 한번 통과시켜 신호의 형태를 바꿔주는 것을 의미합니다.

핵심적인 이유는 '비선형성(Non-linearity)'을 추가하기 위해서입니다.

왜 비선형 변환이 필요한가?

신경망의 기본 계산은 입력값에 가중치를 곱하고 더하는, 아주 단순한 선형(Linear) 계산의 반복입니다. 만약 활성화 함수 없이 이런 선형 계산만 여러 겹 쌓는다면, 그 결과는 결국 하나의 거대한 선형 계산과 다를 바 없습니다. 이는 마치 직선 자만 여러 개 가지고 복잡한 곡선을 그리려는 것과 같아서, 단순한 패턴밖에 학습할 수 없습니다.

tanh와 같은 비선형 활성화 함수는 이 직선적인 신호를 구부리고 휘게 만드는 역할을 합니다. 이 과정을 통해 신경망은 훨씬 더 복잡하고 유연한 패턴을 학습할 수 있는 능력을 갖추게 됩니다.


tanh의 작동 방식

tanh 함수는 들어온 값을 -1과 +1 사이의 S자 형태로 바꿔주는 역할을 합니다.

  • 입력: 뉴런에 들어온 신호의 총합 (양수든 음수든, 값이 얼마든 상관없음)
  • 출력: -1에서 +1 사이의 값
    • 입력값이 크면 출력은 +1에 가까워집니다 (신호를 강하게 '활성화' 또는 '긍정').
    • 입력값이 작으면 출력은 -1에 가까워집니다 (신호를 강하게 '억제' 또는 '부정').
    • 입력값이 0에 가까우면 출력도 0에 가까워집니다 (신호가 '중립적'임).

결론적으로, 은닉층에서 tanh를 이용한다는 것은, 각 뉴런이 단순한 덧셈기가 아니라, 들어온 신호의 중요도를 판단하여 '강한 긍정', '강한 부정', '중립'과 같이 의미 있는 결정을 내리는 똑똑한 부품이 되도록 만드는 과정이라고 이해하시면 됩니다.

 

벡터를 길게 연결하는 것은 **'재료를 한곳에 모으는 것'**이고, 비선형 변환을 하는 것은 **'그 재료들을 레시피에 따라 요리하여 완전히 새로운 맛을 만드는 것'**과 같습니다.


## 왜 이 과정이 복합적인 패턴을 만들까요?

두 단계로 나누어 자세히 설명해 드릴게요.

1단계: 연결 (Concatenation) - "재료를 순서대로 나열하기"

"The cute cat"이라는 구절이 있다고 해봅시다. 각 단어의 임베딩 벡터가 3차원이라고 가정하면 다음과 같습니다.

  • The 벡터: [0.1, 0.2, 0.1]
  • cute 벡터: [0.5, 0.1, 0.1]
  • cat 벡터: [0.2, 0.8, 0.3]

이 벡터들을 그냥 더하거나 평균을 내면 각 단어의 고유한 순서와 정보가 일부 손실됩니다. 하지만 '연결(concatenate)'하면 모든 정보가 순서대로 보존된 하나의 긴 벡터가 만들어집니다.

  • 연결된 벡터: [0.1, 0.2, 0.1, 0.5, 0.1, 0.1, 0.2, 0.8, 0.3]

하지만 여기까지는 그저 재료를 순서대로 늘어놓은 것뿐입니다. 이 상태만으로는 "cute라는 형용사가 cat이라는 명사를 꾸며준다"는 **단어들의 조합이 갖는 특별한 관계(패턴)**를 알 수 없습니다.

2단계: 비선형 변환 (tanh) - "레시피로 요리하기"

이제 은닉층(Hidden Layer)이 이 길게 연결된 벡터를 입력받습니다. 은닉층의 뉴런들은 이 긴 벡터의 특정 부분들에 가중치를 곱하고 더하는 연산을 하는데, 이것이 바로 **'레시피'**입니다.

  • 비선형 변환이 없다면 (선형 변환만 있다면): 단순히 재료의 양을 조절해서 섞는 것과 같습니다. 아무리 섞어도 밀가루, 계란, 설탕은 그냥 '밀가루+계란+설탕'일 뿐, '빵'이 되지 않습니다. 즉, "형용사 뒤에 명사가 오는 패턴" 같은 복잡한 관계를 학습할 수 없습니다.
  • 비선형 변환(tanh)이 있다면 (★★★★★): tanh와 같은 비선형 함수는 **'재료들을 가열하고 굽는 과정'**과 같습니다. 이 과정을 통해 재료들은 서로 화학 반응을 일으켜 완전히 새로운 물질인 '빵'이 됩니다. 신경망에서도 마찬가지입니다.
    • 어떤 뉴런은 연결된 벡터의 4~6번째 자리(cute 벡터 부분)와 7~9번째 자리(cat 벡터 부분)에 높은 가중치를 부여하도록 학습될 수 있습니다.
    • 그리고 tanh 함수를 통해, 이 두 부분이 동시에 특정 조건을 만족할 때만 강한 신호(예: +1에 가까운 값)를 발생시키도록 학습합니다. 이것이 바로 "형용사가 명사를 꾸며준다"는 복합적인 패턴을 인식하는 순간입니다.
    • 다른 뉴런은 "not good"처럼 'not'이 'good' 앞에 올 때 의미가 완전히 반전되는 패턴을 학습할 수도 있습니다.

4-단계: 출력 계층 (Output Layer)

  • 역할: 은닉 계층에서 파악한 문맥 정보를 바탕으로, 단어 사전에 있는 **모든 단어들 각각에 대해 "다음 단어로 나올 확률"**을 계산합니다.
  • 작동 방식:
    • 소프트맥스(Softmax) 함수를 사용합니다. 소프트맥스는 여러 개의 숫자 값을 '확률' 개념으로 바꾸어주는 역할을 합니다. (모든 출력값은 0~1 사이이고, 총합은 1이 됩니다.)
    • 이 확률값들 중에서 가장 높은 확률을 가진 단어가 모델의 최종 예측이 됩니다. (e.g., '앉았다'가 80% 확률로 예측)

시험 대비 최종 요약

  • NNLM 목표: 이전 단어들로 다음 단어 예측.
  • 핵심 구성 요소: 투사 계층(Projection Layer)의 Matrix C. 이 행렬 자체가 학습의 결과물이자 단어 임베딩이다.
  • 전체 흐름:
    1. 입력: 단어의 고유 번호(Index)
    2. 투사: Matrix C에서 해당 번호의 행(임베딩 벡터)을 꺼냄.
    3. 은닉: 여러 단어 벡터를 조합해 문맥 패턴 학습.
    4. 출력: 모든 단어에 대한 다음 단어 등장 확률 계산 (Softmax 사용).
  • 의의와 한계: 단어 임베딩의 개념을 최초로 제시했지만, 은닉층과 출력층의 계산이 너무 복잡하고 느리다는 단점이 있었습니다. 이 단점을 개선한 모델이 바로 Word2Vec입니다.

NNLM의 한계점 (Limitations)

NNLM의 한계는 주로 **'느린 속도'**와 **'부수적인 학습 목표'**라는 두 가지 큰 문제로 요약할 수 있습니다.


1. 계산량이 너무 크다 (느린 학습 속도)

이것이 NNLM의 가장 치명적인 단점입니다.

  • 원인: NNLM은 다음 단어를 예측할 때, 출력층(Output Layer)에서 단어 사전에 있는 모든 단어에 대해 각각 확률을 계산해야 합니다. (Softmax 함수 때문)
  • 문제점: 만약 단어 사전에 10만 개의 단어가 있다면, 매 학습 단계마다 10만 개의 단어에 대한 확률 계산을 반복해야 합니다. 이는 엄청난 계산 비용을 유발하여 학습 속도를 매우 느리게 만듭니다. 🐢

2. 고정된 크기의 문맥 (긴 문맥 반영 불가)

NNLM은 정해진 개수의 단어만 보고 다음 단어를 예측합니다.

  • 원인: 모델의 입력 크기가 (n-1)개의 단어로 고정되어 있습니다. 예를 들어 n=5라면, 항상 바로 앞 4개의 단어만 봅니다.
  • 문제점: "저 멀리 파란 지붕을 가진 집에 사는 사람들은..." 이라는 문장에서, 뒤에 나올 동사를 예측하려면 아주 멀리 있는 '사람들은'이라는 단어를 봐야 합니다. 하지만 NNLM은 정해진 창(window) 크기 때문에 이렇게 멀리 떨어진 단어의 정보를 반영할 수 없습니다. 즉, 국소 맥락(Local Context)에만 의존하는 한계가 있습니다.

3. 새로운 단어 추가의 어려움

이것은 LSA와 NNLM이 공유하는 문제입니다.

  • 원인: 모델이 한번 학습되고 나면, 입력과 출력 계층의 크기는 단어 사전의 크기에 맞춰 완전히 고정됩니다.
  • 문제점: 학습 데이터에 없던 새로운 단어(신조어 등)가 등장하면 모델은 이를 처리할 수 없습니다. 이 단어를 추가하려면 모델 전체를 처음부터 다시 학습시켜야만 합니다.

4. 임베딩 학습의 비효율성 (★★★★★)

이것은 NNLM의 근본적인 한계를 지적하는 매우 중요한 포인트입니다.

  • 원인: NNLM의 진짜 학습 목표는 '단어 임베딩을 잘 만드는 것'이 아니라, **'다음 단어를 잘 예측하는 언어 모델을 만드는 것'**입니다. 단어 임베딩(Matrix C)은 이 과정을 통해 얻어지는 **부산물(by-product)**일 뿐입니다.
  • 문제점: 우리는 좋은 '단어 임베딩'을 얻고 싶은데, NNLM은 상대적으로 별로 중요하지 않은 '다음 단어 예측'이라는 무겁고 어려운 작업을 억지로 수행하고 있는 셈입니다. 이 때문에 학습이 비효율적이고, 결과물로 나온 임베딩이 정말 최적인지 확신하기 어렵습니다.

시험 대비 최종 요약

한계점 종류 문제점 핵심 원인
속도 / 효율성 학습이 매우 느리고 계산량이 많음 어휘집 전체에 대한 Softmax 계산
문맥 파악 긴 문맥을 반영하지 못하고 짧은 문맥에만 의존 고정된 입력 윈도우 (n-1)
확장성 새로운 단어가 추가되면 전체 재학습 필요 고정된 모델 구조
학습 목표 단어 임베딩 자체가 아닌 언어 모델 성능에 최적화됨 임베딩은 학습의 부산물(By-product)
Sheets로 내보내기

이러한 NNLM의 한계, 특히 **'느린 속도'**와 **'비효율적인 학습 방식'**을 개선하기 위해 등장한 모델이 바로 Word2Vec입니다. 이 흐름을 이해하는 것이 매우 중요합니다!

반응형
반응형

매수매도 추천 아닙니다



최근에 iren이 비트코인 채굴업체에서 데이터 센터로 업종을 변경하고 2.9GW의 전력부지를 확보한 후 2028년까지 개발하겠다고 발표한 이후 주가가 폭등했다. 이처럼 기존에 코인을 채굴하며 설치한 GPU와 채굴업체들이 쌓은 노하우들이 모아져 데이터센터 사업을 시도하려는 움직임을 보이고 있다. 이 글을 쓰는 날 새벽에 아이렌이 8.75억 달러 규모의 전환사채를 발행을 했는데도 불구하고 시장에서는 악재로 받아들였다가 다시 말아 올렸다. 물론 시장이 지금 매우 좋은 것도 있지만 데이터센터를 짓기 위해 필요한 자금조달을 호재로 받아들이고 있다.
 
https://news.nate.com/view/20250716n02983

[GAM] '서학개미 픽' IREN ②우호적인 월가 시각, 적정한 밸류 : 네이트 뉴스

한눈에 보는 오늘 : 경제 - 뉴스 : 이 기사는 7월 15일 오후 4시33분 '해외 주식 투자의 도우미' GAM(Global Asset Management)에 출고된 프리미엄 기사입니다. GAM에서 회원 가입을 하면 9000여 해외 종목의 프

news.nate.com

 
네오클라우드에 관심을 가지게 된 계기는 2분기 오라클 실적발표였다. 오라클은 실적발표때 수주 잔고가 작년 대비 359% 증가하며 하이퍼스케일러들이 컴퓨팅 파워가 필요하다는 걸 제대로 입증했다. 물론 저 수주잔고 대부분이 open ai 거고, 알트먼이 amd와의 계약을 보면 사기꾼 기질이 보이는 건 사실이지만 최근 네비우스와 MS 계약을 보면 네오클라우드의 수요가 사실인 것을 알 수 있다.

 

오라클 '수주 잭팟'에 월가 목표가 줄줄이 상향…최고 375달러 - 연합인포맥스

오라클(NYS:ORCL)이 수주 잔고(Remaining Performance Obligation, RPO)가 4천550억달러(약 632조원)에 이른다고 발표하자 월스트리트의 투자은행(IB)은 10일(현지시간) 줄줄이 오라클 주식의 목표가를 상향 조정.

news.einfomax.co.kr

 

네오클라우드란?

 
네오클라우드는 AI 연산에 특화된 GPU 중심 클라우드 인프라를 의미한다. AI 기술의 급성장으로 대규모 병렬 연산을 수행하는 GPU 수요가 폭발적으로 증가하면서, 기존의 CPU 중심 범용 클라우드는 AI 워크로드를 충분히 지원하지 못한다. 따라서 빠르고 비용 효율적인 GPU 자원을 유연하게 제공하는 네오클라우드가 필요해졌다. 기업들은 네오클라우드를 통해 고성능 AI 인프라를 빠르게 확장하고, 불필요한 자원 낭비 없이 비용 최적화를 도모할 수 있기 때문에 네오클라우드 업체들이 주목 받기 시작했다.
 
https://www.hankyung.com/article/2025052541921

"3분의 1값에 GPU 빌려줘"…네오클라우드 기업 뜬다

"3분의 1값에 GPU 빌려줘"…네오클라우드 기업 뜬다, 산업리포트 AI 그래픽처리장치 34弗에 대여 AWS·MS·구글의 30% 수준 엔비디아는 코어위브 투자 확대 크루소는 16조 자금 조달 성공 맞춤 서비스

www.hankyung.com

 
네오클라우드의 가장 큰 장점은 뛰어난 가성비에 있다. 네오클라우드를 통해 GPU 컴퓨팅 파워를 제공받으면, 기업들은 직접 데이터센터를 구축하는 것보다 훨씬 비용 효율적으로 AI 워크로드를 처리할 수 있다. 실제로 네오클라우드 업체들은 하이퍼스케일러(예: AWS, MS, 구글) 대비 약 3분의 1 수준의 가격으로 GPU 자원을 제공하고 있어, 초기 인프라 투자 및 운영비 부담을 크게 줄인다.
 
오라클 역시 실적 발표에서 네오클라우드의 가성비를 가장 큰 경쟁력으로 강조했다. 네오클라우드 시장에서 엔비디아가 대표적인 업체인 코어위브에 대규모 투자를 진행하는 배경도 여기에 있다. 빅테크들이 네오클라우드 업체들과 앞다퉈 계약을 맺는 이유는 단순한 기술력이나 규모의 경쟁이 아니라, 경제성과 비용 효율성에서 앞선 가성비 덕분이다.
 
 

출처: https://www.hankyung.com/article/2025052541921

 
네오클라우드를 사용할 때의 두 번째 중요한 장점은 전력 공급 문제에 대한 부담이 사라진다는 점이다. 빅테크 기업들은 AI 및 클라우드 서비스를 운영하기 위해 안정적이고 대규모 전력 공급처를 직접 확보해야 하는 과제를 안고 있다. 이들은 전력을 얻기 위해 최적의 입지를 찾아 물리적 부지를 확보하고, 전력 계약을 체결하며, 자체 발전 설비 구축 등을 위해 직접 뛰어다녀야 한다. 실제로 MS만 봐도 원전회사와 직접 계약하여 전력을 공급하는 계약도 맺었다.
 
하지만 네오클라우드를 이용하면 이러한 고민이 크게 줄어든다. 네오클라우드 운영 기업들은 이미 전력 인프라가 잘 갖춰진 장소에 대규모 GPU 클러스터를 설치하고, 안정적인 전력 공급 계약을 체결한 상태이다. 고객사는 복잡한 인프라와 전력 문제를 신경 쓸 필요 없이, 필요한 만큼의 GPU 자원을 즉시 이용할 수 있다. 네오클라우드 업체들은 특히 친환경 에너지(수력발전 등)를 활용해 저비용, 저탄소 전력을 확보하는 데 집중하고 있어 전력 문제에서 오는 운영 리스크와 비용을 효과적으로 줄이고 있다.
 
예를 들어, 아이렌(IREN) 같은 네오클라우드 운영 기업은 100% 수력 발전 기반 전력을 안정적으로 공급해 고객이 30년에 걸쳐 최대 27억 달러를 절감할 수 있다고 주장합니다. 이는 네오클라우드가 전력 인프라 문제를 해결하는 핵심 경쟁력 중 하나임을 보여줍니다.
 
https://www.g-enews.com/article/Securities/2025/10/202510031318496751edf69f862c_1

[해외주식 집중분석 제3편] 네오 클라우드 기업 ②...친환경과 인프라 확장으로 무장 - 글로벌이

[편집자 주] AI가 생성형을 넘어 스스로 추론하는 에이전틱 AI, 물리적 현실에서 행동하는 피지컬 AI로 진화하며 데이터센터가 'AI 팩토리'로 변모하고 있다. 마이크로소프트, 알파벳, 아마존 등 주

www.g-enews.com

 

그중에 왜 BITF야?


비트팜즈(Bitfarms Ltd, BITF)는 2017년 캐나다 토론토에서 설립된 글로벌 비트코인 채굴 전문 기업이다. 자체 설계한 고성능 데이터센터와 자체 소유 전력 인프라를 바탕으로 비트코인 블록체인에서 거래를 검증하며 수익을 창출하는 수직 통합형 디지털 인프라 기업이다. 주 사업은 비트코인 채굴용 해싱 연산을 제공하는 서버 팜 운영이며, 캐나다, 미국, 파라과이, 아르헨티나 등에서 데이터센터와 채굴 시설을 보유하고 있다. 현재 BITF의 전력용량은 421MW이다.'
 
그런데 이 회사가 심상치 않다. 아이렌처럼 데이터센터 쪽으로 넘어가려는 움직임을 자속적으로 보여주고 있다. T5 데이터센터는 미국에 본사를 둔 데이터센터 전문 기업으로, 엔터프라이즈와 하이퍼스케일 고객을 대상으로 맞춤형 데이터센터 설루션을 제공하는 회사인데 이 회사와 파트너십을 맺었다.
 
https://investor.bitfarms.com/news-releases/news-release-details/bitfarms-announces-partnership-t5-data-centers-advance-hpcai

Bitfarms Announces Partnership with T5 Data Centers to Advance HPC/AI Development at Panther Creek Campus | Tue, 08/05/2025 - 07

TORONTO, Ontario and NEW YORK , Aug. 05, 2025 (GLOBE NEWSWIRE) -- Bitfarms Ltd. (Nasdaq/TSX: BITF) (the “Company”), a global energy and compute infrastructure company, today announced its partnership with T5 Data Centers, LLC (“T5”) to advance HPC/

investor.bitfarms.com

 
 
2025년 8월 18일, 비트팜즈(Bitfarms, BITF)는 전 Amazon Web Services(AWS) 임원인 Wayne Duso를 이사회에 임명했다. Wayne Duso는 AWS에서 대규모 데이터 저장 및 클라우드 프로젝트를 확장하고 관리하는 핵심 역할을 맡았던 인물로, 그의 임명은 비트팜즈가 단순 비트코인 채굴에 그치지 않고 데이터센터 및 AI, 고성능 컴퓨팅(HPC) 인프라 사업에 집중하겠다는 강력한 메시지로 해석된다.
 
누가 봐도 "나 데이터센터 사업할 거야"라고 외치는 것과 다를 바 없으며, 이사회 구성부터 그런 방향성을 명확히 하고 있는 것이다. 이는 비트팜즈가 AI 및 HPC 시장으로 전략적 전환을 가속화하는 중요한 신호로 받아들여지고 있다.
 

출처:BITF IR

 
https://investor.bitfarms.com/news-releases/news-release-details/bitfarms-appoints-former-aws-executive-wayne-duso-board

Bitfarms Appoints Former AWS Executive Wayne Duso to Board of Directors | Mon, 08/18/2025 - 07:00

TORONTO, Ontario and NEW YORK, N.Y. , Aug. 18, 2025 (GLOBE NEWSWIRE) -- Bitfarms Ltd. (Nasdaq/TSX: BITF) (the “Company”), a global energy and compute infrastructure company, today announced that the Board of Directors (the “Board”) has unanimously

investor.bitfarms.com

 
BITF(비트팜스)는 2분기 실적 발표에서 대놓고 네오클라우드 사업으로의 전환을 선언하며, 향후 성장 전략을 명확히 했다. 현재 사용할 수 있는 전력은 410MW이지만, 1.3GW까지 확장 가능한 전력 파이프라인을 확보하여, 대규모 데이터센터와 AI 인프라 시장에 본격적으로 진출할 준비를 갖추고 있음을 알렸다.
 
전력 확장 파이프라인과 네오클라우드 전환 전략은 회사의 성장 잠재력을 높이는 핵심 포인트로 작용하며, 현재의 밸류를 다시 산정할 때가 온 것 같다.
 
 

BITF IR

 

BITF IR

 

그렇다면 밸류를 어떻게 짜야될까

 
 
밸류를 산정하기 전에 세 가지 가정을 하고 가려고 한다.
 
첫째로, 네오클라우드 시장에 대한 하이퍼 스케일러들의 수요가 계속된다는 가정을 깔고 가겠다. 이 가정을 깔지 않으면 이 기업에 투자할 이유가 없다.
 
둘째로, 그리고 아이렌을 보았을 때 전환사채 등으로 돈을 잘 빌려서 사업자금을 당기고 있는데 아이렌이나 코어위브가 하는 것처럼 돈을 유증이나 전환사채 또는 GPU 담보 대출등으로 차입금 걱정은 없다는 가정도 깔고 가겠다. 
 
셋째로, 지금까지 인수된 네오클라우드 업체들의 1MW당 밸류가 BITF에도 적용된다고 가정한다. 최적화나 GPU 성능 등 여러 가지 요인이 영향을 끼치겠지만 1MW에 맞는 GPU가 있다고 가정하겠다. 말도 안 되는 가정이긴 하지만 BITF가 데이터센터에 신규로 진입을 하는 만큼 네오클라우드 업체에 티어표에 따른 밸류를 적용시키기도 애매한 것 같다. 또한 인수된 시기를 고려했을 때 그때보다 네오클라우드의 중요성이 커졌기에 인수되었을 때 가격으로 보수적으로 잡아도 될 거 같다.(아니면 아쉬운 거고)
 

출처: 퍼블렉시티

 
 
밑의 블로그에서는 iren 목표주가를 구할 때 1MW당 1100만 달러라고 하던데 필자는 690만 달러 2000만 달러일 때 케이스를 다 따져보겠다. BlackStone에서 Airtrunk는 아시아 태평양 쪽 데이터센터가 많아서 프리미엄이 붙은 거라고 한다.
 
http://www.gfr.co.kr/news/articleView.html?idxno=24151

블랙스톤, 에어트렁크 22조원에 인수 - 글로벌금융신문

블랙스톤 컨소시엄이 호주 데이터 센터 그룹인 에어트렁크(AirTrunk)를 240억호주 달러(21조6000억원)에 인수한다.블랙스톤 리얼에스테이트파트너스(Blackstone Real Estate Partners), 블랙스톤 인프라스트

www.gfr.co.kr

https://marketin.edaily.co.kr/News/ReadE?newsId=04309926642232224

코어위브, 코어사이언티픽 전량 주식 인수…90억달러 규모

미국 인공지능(AI) 전문 데이터센터 기업 코어위브(CoreWeave)가 데이터센터 인프라 업체인 코어사이언티픽(Core Scientific)의 주식 전량을 인수하기로 했다.지난 3월 28일 미국 뉴욕의 나스닥 마켓에서

marketin.edaily.co.kr

 
https://hypertechinvest.substack.com/p/iren-undervalued-ai-bitcoin-infrastructure-stock

IREN: 100x or Bust?

A Highly Controversial Bitcoin + AI Infrastructure Play: What’s the Real Potential of IREN?

hypertechinvest.substack.com

 
 
1. 690만 달러 평가 시




2. 1,100만 달러 평가 시 




3. 2,000만 달러 평가 시




 
필자는 BITF의 데이터센터 위치를 고려하였을 때 690만 달러로 잡는 것도 괜찮아 보인다. 왜냐하면 아시아 쪽이 프리미엄을 받는거 같은데 아시아쪽 데이터센터가 없기 때문이다. 그니까 현재 데이터센터 업종으로 변환 시 28.3억 달러를 미니멈으로 둘 수 있을 거 같다. 
 
그런데 1.3GW로 확장한다고 가정하자. 1.3GW를 추가가 가능하다는 건지 다 해서 1.3GW인지는 모르겠어서 보수적으로 1.3GW로 두었다. 위에서 iren 블로그에서 자금조달까지 고려해서 희석된 거까지 구하길래 한 번 그거를 이용해서 퍼블렉시티를 통해서 구해봤다. 현재 BITF의 시총은 1.9B, 유통주식 수는 552.6 million이고, 야후 파이낸스 보면  2025년 6월 30일 기준, 해당 기업의 *현금 및 현금성 자산(Cash, Cash Equivalents...)은144,468천 달러, 즉 약 1억 4,446만 달러(144.5 million USD)이다.
 
물론 1.3GW까지 확장가능하니까 1.3GW*6.9M USD 하면 89.7억 달러가 나오지만 중간에 전환사채나 유증으로 희석되는 걸 고려해서 유통 주식수가 늘어난다고 생각하면 28.3억~89.7억 달러를 목표시가총액으로 잡을 수 있을 거 같다.
 
참고로 1.3GW를 확장한다고 생각하면 공사비는 다음과 같다. 1.3GW를 확장하는 건지 1.3GW로 확장하는 건지 모르겠어서 공사비는 보수적으로 1.3GW확장한다고 계산했고, 목표주가는 1.3GW로 확장한다고 생각했다.
 

  • 1MW당 평균 비용: IREN 사례에서 준용 (6.5M USD)
  • 총 Capex:1300 MW×6.5 M USD=8.45 B USD1300 MW×6.5 M USD=8.45 B USD

 
 
 
 

반응형
반응형

1. 단어 임베딩 (Word Embedding) 이란?

핵심부터 말하자면, **단어 임베딩은 '단어를 숫자로 된 좌표(벡터)로 바꾸는 기술'**입니다. 컴퓨터는 '사과'나 '오렌지' 같은 글자를 직접 이해하지 못해요. 그래서 각 단어를 컴퓨터가 이해하고 계산할 수 있는 숫자들의 모음, 즉 벡터로 변환하는 과정이 필요합니다.

정의 (Definition)

  • 단어(Word): 우리가 사용하는 수많은 단어 중, 분석할 텍스트에서 골라낸 단어 목록(어휘집, Vocabulary)에 있는 모든 단어를 의미합니다.
  • 임베딩(Embedding): '끼워 넣다'라는 뜻처럼, 단어를 특정 공간에 '끼워 넣는' 과정입니다.
    • 고차원 이산 공간 (High-dimensional discrete space): 단어를 벡터로 바꾸는 가장 간단한 방법은 '원-핫 인코딩(One-hot encoding)'입니다. 예를 들어, 어휘집에 10,000개의 단어가 있다면 '사과'는 3번째 단어라고 할 때 [0, 0, 1, 0, ..., 0] (10,000개의 숫자 중 3번째만 1)처럼 표현됩니다. 이는 차원이 매우 높고(고차원), 0 아니면 1로만 표현되어 연속적이지 않습니다(이산).
    • 저차원 연속 벡터 공간 (Low-dimensional continuous vector space): 단어 임베딩은 이 10,000차원의 벡터를 훨씬 낮은 차원(예: 100차원)의 실수(소수)로 구성된 벡터 [0.2, -0.4, 0.7, ...]로 압축하고 매핑(mapping)하는 것입니다. 이 벡터는 단어의 **'의미'**를 함축하고 있습니다.

주요 방법론

  • 카운트 기반 (Count-based): 단어가 어떤 문서나 주변 단어와 함께 등장하는지 그 빈도를 세는 방식입니다.
    • LSA (Latent Semantic Analysis): DTM(문서 단어 행렬)이라는 거대한 표를 만든 뒤, SVD(특이값 분해)라는 수학적 기법을 사용해 단어들의 잠재적인(Latent) 의미를 포함한 벡터를 추출합니다.
  • 예측 기반 (Prediction-based): 신경망(Neural Network)을 이용해 특정 단어 주변에 어떤 단어가 나타날지 예측하거나, 주변 단어를 보고 중심 단어를 예측하는 과정에서 단어 벡터(Word Embeddings)를 학습합니다.
    • Word2Vec, GloVe, FastText: 이 모델들은 모두 예측 기반 방식으로, 현재 '단어 임베딩'이라고 하면 보통 이 방법들을 가리킵니다.

2. 카운트 기반 벡터화 vs. 단어 임베딩 비교

이 부분이 시험에 나올 확률이 가장 높습니다. 두 방식의 차이점을 명확히 알아두세요.

특징 카운트 기반 벡터화 (e.g., DTM, TF-IDF) 단어 임베딩 (e.g., Word2Vec, GloVe)
표현 방식 희소 표현 (Sparse Representation) 밀집 표현 (Dense Representation)
설명 대부분의 값이 0인 벡터. 어휘집 크기가 차원의 크기가 됨 (e.g., 10,000차원) 대부분의 값이 실수인 꽉 찬 벡터. 차원 수를 직접 정함 (e.g., 100~300차원)
목표 단어의 출현 빈도 표현 단어의 잠재적 의미 표현
설명 "이 단어가 이 문서에서 얼마나 중요한가?"에 초점 "이 단어는 어떤 단어들과 비슷한 의미를 갖는가?"에 초점
의미 유사성 반영 못 함 반영 가능
설명 '왕'과 '여왕'의 관계를 알 수 없음. 단지 다른 단어로만 취급. 벡터 공간에서 '왕'과 '여왕'이 가까이 위치. 왕-남자+여자 ≈ 여왕 같은 벡터 연산도 가능.
벡터화 대상 주로 문서를 벡터화 주로 단어를 먼저 벡터화
설명 각 문서를 단어 빈도로 구성된 하나의 긴 벡터로 만듦. 각 단어의 벡터를 먼저 학습한 후, 이를 조합하여 문장의 의미를 파악하는 모델링을 진행함.

핵심 요약 (시험 대비 암기 포인트!)

  1. 희소(Sparse) vs. 밀집(Dense):
    • 카운트 기반은 단어사전 크기만큼의 차원을 가지며 대부분이 0인 희소 벡터.
    • 단어 임베딩은 사용자가 지정한 저차원(e.g., 100)에 실수 값이 꽉 찬 밀집 벡터.
  2. 빈도 vs. 의미:
    • 카운트 기반은 단어의 빈도수나 중요도를 나타냄.
    • 단어 임베딩은 단어의 문맥적, 의미적 유사성을 벡터 공간에 반영함.
  3. 차원의 의미:
    • 카운트 기반 벡터의 각 차원은 특정 '단어' 그 자체를 의미함.
    • 단어 임베딩 벡터의 각 차원은 명확히 정의할 순 없지만, 의미적으로 혼합된 여러 특징 (e.g., 성별, 직업, 사물 종류 등)을 반영함.

1. 잠재 의미 분석 (Latent Semantic Analysis, LSA) 이란?

LSA는 한마디로 **"문서와 단어에 숨겨진 진짜 의미(주제)를 찾아내는 기술"**입니다.

컴퓨터는 '자동차'와 '차'가 비슷한 단어인지 몰라요. 단순히 다른 글자로 인식하죠. LSA는 수많은 문서 데이터를 분석해서 '자동차'와 '차'가 비슷한 맥락에서 자주 사용된다는 것을 파악하고, "아, 얘네 둘은 비슷한 주제(의미)를 공유하는구나!"라고 스스로 학습하게 만드는 방법입니다.


2. LSA의 개념 및 작동 원리

LSA는 다음의 두 단계를 거쳐 숨겨진 의미를 찾아냅니다.

1단계: 고차원 행렬 만들기 (시작점)

  • 우선 컴퓨터가 텍스트를 이해할 수 있도록 단어-문서 행렬 (DTM) 이나 TF-IDF 행렬을 만듭니다.
  • 이것은 거대한 표(행렬)인데, 보통 행은 단어, 열은 문서를 나타내고 각 칸에는 특정 단어가 특정 문서에 몇 번 등장했는지 빈도를 적습니다.
  • 문제점: 이 행렬은 단어의 개수만큼 차원이 커서 고차원이고(수만 차원), 대부분의 칸이 0으로 채워진 **희소 행렬(Sparse Matrix)**입니다. 이런 상태로는 단어의 '의미'를 파악하기 어렵습니다.

2단계: 저차원 공간으로 압축하기 (핵심 과정)

  • 여기서 LSA의 핵심 기술인 **특잇값 분해(SVD)**가 등장합니다.
  • SVD를 이용해 거대하고 복잡한 DTM 행렬을 의미 있는 작은 단위들로 분해하고, 그중에서 가장 중요한 의미(주제)들만 남기고 나머지는 버려서 차원을 확 줄여버립니다.
  • 가설: 이렇게 카운트 기반의 희소 행렬을 의미 기반의 저차원 공간으로 압축하면, 원래는 달라 보였던 단어들(e.g., '자동차', '차')이 비슷한 의미를 갖는 경우, 서로 아주 가까운 벡터(좌표) 값을 갖게 될 것이다! 라는 것이 LSA의 핵심 아이디어입니다.

3. 핵심 연산: SVD (특잇값 분해)

SVD가 시험에 나올 확률이 매우 높으니 꼭 이해해 두세요!

  • SVD (Singular Value Decomposition): 우리말로 '특잇값 분해'입니다. 복잡한 행렬을 더 단순하고 이해하기 쉬운 3개의 행렬()로 쪼개는 수학적 기법입니다.
    • 분해 (Decomposition): 숫자를 소인수 분해(e.g., )하는 것처럼, 행렬을 그 구조를 이루는 핵심 성분으로 쪼개는 것을 의미합니다.
    • 특잇값 (Singular Value): SVD로 분해했을 때 나오는 값 중 하나로, **"데이터에 잠재된 각각의 주제(의미)가 전체에서 얼마나 중요한가?"**를 나타내는 중요도 또는 의미의 강도라고 생각할 수 있습니다. 특잇값이 클수록 더 중요한 핵심 주제입니다.

LSA는 SVD를 통해 수많은 단어-문서 관계 속에서 핵심 주제(Topic)들을 추출하고, 이 주제들을 새로운 '축'으로 삼아 단어와 문서를 다시 표현합니다. 예를 들어, 원래는 '자동차', '엔진', '바퀴', '정부', '투표' 등 수만 개의 단어 축이 있었다면, LSA를 거치면 '교통수단', '정치' 같은 몇 개의 핵심 주제 축으로 압축되는 것입니다.

시험 대비 최종 요약

  • LSA란? DTM 같은 카운트 기반 행렬에 SVD를 적용해 단어와 문서에 **잠재된 의미(주제)**를 분석하는 기법.
  • 입력: DTM 또는 TF-IDF 행렬 (고차원, 희소).
  • 핵심 연산: SVD (특잇값 분해).
  • SVD의 역할: 복잡한 행렬을 분해하여 데이터의 중요한 축(의미, 주제)을 찾음. 이때 축의 중요도를 특잇값이라고 함.
  • 결과: 단어와 문서를 저차원의 의미 공간에 표현. 의미가 비슷한 단어는 벡터 공간에서 가까운 거리에 위치하게 됨.

1. SVD (특잇값 분해)란 무엇인가?

SVD는 한마디로 **"어떤 복잡한 행렬(데이터)이라도, 세 개의 간단한 행렬로 분해하는 마법 같은 기술"**입니다. LSA에서는 이 기술을 사용해 단어-문서 행렬(DTM)에 숨어있는 의미(주제)를 찾아냅니다.

핵심 공식 (이건 꼭 외우세요!)

모든 행렬 A는 아래와 같이 세 행렬의 곱으로 분해할 수 있습니다.

  • A: 우리의 원본 데이터 (e.g., 단어-문서 행렬, DTM)
  • U (문서와 주제의 관계): 분해된 행렬 중 하나로, '특이 벡터(Singular Vector)'를 담고 있습니다. LSA에서는 **'문서들이 어떤 주제와 관련이 있는지'**에 대한 정보를 가집니다.
  • Σ (시그마, 주제의 중요도): 대각 행렬(diagonal matrix)로, 대각선에만 0이 아닌 값이 있습니다. 이 값들을 **'특잇값(Singular Value)'**이라고 부르며, **'각 주제가 전체 데이터에서 얼마나 중요한지'**를 나타냅니다. 특잇값은 중요도 순으로 정렬되어 있습니다.
  • V (단어와 주제의 관계): 또 다른 '특이 벡터' 행렬입니다. LSA에서는 **'단어들이 어떤 주제와 관련이 있는지'**에 대한 정보를 가집니다. (는 V를 전치(transpose)한 행렬입니다.)

기하학적 의미

SVD를 기하학적으로 보면 **'데이터 변환(Transformation)'**으로 이해할 수 있습니다. 데이터를 나타내는 동그란 원이 행렬 A를 만나 찌그러진 타원이 될 때, SVD는 이 과정을 3단계로 분해해서 설명합니다.

  1. 데이터를 회전시키고 ()
  2. 각 축 방향으로 늘리거나 줄이고 ()
  3. 다시 회전시키는 () 과정

이 과정에서 데이터가 어떤 축으로 가장 많이 늘어나는지(가장 중요한지)를 파악할 수 있게 됩니다.


2. LSA의 진짜 핵심: 데이터 압축 (Truncated SVD)

"그래서 SVD로 DTM을 분해해서 뭘 할 수 있는가?"에 대한 답이 바로 여기에 있습니다. 이게 LSA의 전부라고 해도 과언이 아닙니다.

낮은 계수 근사 (Low-rank Approximation)

SVD로 DTM을 분해하면 수많은 주제(특잇값)가 나옵니다. 하지만 이 주제들이 모두 중요할까요? 아닙니다. 핵심적인 몇 개의 주제만으로도 원본 데이터의 특징을 대부분 설명할 수 있습니다. 나머지는 그냥 노이즈(noise)에 가깝죠.

그래서 **'Truncated SVD (절단된 SVD)'**라는 기법을 사용합니다.

  1. SVD로 A를 로 분해합니다.
  2. 행렬에서 중요도가 높은(값이 큰) 상위 k개의 특잇값만 남기고 나머지는 모두 버립니다.
  3. 그에 맞춰 행렬도 k개의 열과 행만 남깁니다.
  4. 이 '다이어트'한 행렬들()을 다시 곱하면 원본 A와 매우 유사한 근사 행렬()을 얻을 수 있습니다.

이 과정을 **'낮은 계수(rank) 근사'**라고 하며, 이것이 바로 차원 축소이자 데이터 압축의 원리입니다.

슬라이드의 폭포수 사진 예시가 완벽한 설명입니다. 원본 이미지(수많은 rank)를 단 50개의 rank(상위 50개의 특잇값)만으로 복원해도 우리는 폭포수임을 충분히 인지할 수 있습니다. 약간의 디테일은 잃었지만(lossy, 손실 압축), 핵심 정보는 모두 보존한 것이죠.

LSA에서는 이 원리를 이용해 수만 차원의 DTM을 100~300차원 정도의 **'잠재 의미 공간'**으로 압축합니다. 이 압축된 공간에서는 의미가 비슷한 단어와 문서들이 서로 가까운 위치에 놓이게 됩니다.


3. 주성분 분석 (PCA)과의 관계

주성분 분석(PCA) 역시 데이터의 차원을 축소하는 대표적인 기법입니다. 데이터가 가장 넓게 퍼져있는(분산이 가장 큰) 방향을 새로운 축(주성분)으로 삼는 방식이죠.

결론부터 말하면, SVD는 PCA를 수행하는 매우 강력하고 일반적인 도구입니다. 데이터의 평균을 0으로 맞춘 후 SVD를 적용하면, 그 결과가 PCA를 수행한 것과 수학적으로 매우 유사합니다.

시험 대비 포인트: "LSA는 DTM에 SVD를 적용하여 차원을 축소하고 잠재 의미를 분석하는 것이고, PCA와 SVD는 모두 데이터의 핵심을 파악하여 차원을 축소하는 데 사용되는 강력한 기법이다" 라고 정리해두시면 됩니다.

 

1. LSA의 정의: 그래서 최종 결과물은 무엇인가? (★★★★★)

이 부분이 시험에 나올 확률이 가장 높습니다. LSA를 통해 얻어지는 단어와 문서의 벡터(좌표)를 어떻게 계산하는지 묻는 문제입니다.

우선, LSA는 거대한 단어-문서 행렬(DTM) Truncated SVD를 적용합니다.

여기서 는 우리가 남기기로 선택한 핵심 주제(Topic)의 개수입니다. 이렇게 분해된 행렬들을 조합하여 최종적인 단어와 문서의 임베딩 벡터를 만듭니다.

  • 문서 임베딩 (Document Embedding) =
    • 는 **'각 문서가 k개의 주제와 얼마나 관련 있는가'**를 나타내는 행렬입니다.
    • 는 **'k개 각 주제가 전체에서 얼마나 중요한가'**를 나타내는 행렬입니다.
    • 따라서 이 둘을 곱하면, 각 주제의 중요도가 반영된 최종 문서 벡터가 완성됩니다. 이 벡터가 바로 압축된 '의미 공간'에서의 문서 좌표입니다.
  • 단어 임베딩 (Word Embedding) =
    • 는 **'각 단어가 k개의 주제와 얼마나 관련 있는가'**를 나타내는 행렬입니다.
    • 마찬가지로 여기에 주제의 중요도인 를 곱하여, 각 주제의 중요도가 반영된 최종 단어 벡터를 만듭니다.

암기 팁: "U는 문서(Document)와 생김새가 비슷하니 문서 임베딩에 쓰인다"고 연상하면 헷갈리지 않습니다!


2. LSA의 의도: 왜 이런 복잡한 일을 할까?

LSA의 근본적인 목표, 즉 '의도'는 다음과 같습니다.

  1. 카운트 기반 정보 활용: 일단은 단어의 출현 빈도(DTM)라는 객관적인 정보를 바탕으로 시작합니다.
  2. 문맥 파악: 단순히 단어 하나하나를 보는 것이 아니라, "문서 전체의 문맥을 더 잘 고려하기 위해" 이 모든 과정을 수행합니다.
  3. 핵심 축 발견: 입력된 DTM에서 **가장 중요한 방향(의미 축, 즉 주제)과 그 중요도(크기)**를 계산해냅니다.
  4. 새로운 공간에 표현: 이 중요도 순으로 정렬된 축들을 새로운 좌표계로 삼아, 모든 단어와 문서를 그 공간에 다시 표현(벡터화)합니다.

결론적으로 LSA는 **"단어의 빈도수라는 겉보기 정보 너머에 있는, 문서 집단 전체를 관통하는 숨겨진 의미(주제)를 찾아내기 위함"**입니다.


3. 간단한 예제로 이해하기

이런 단순 출현 횟수 기반 문서-단어 행렬이 LSA의 **입력(Input)**입니다.

  • 문서1: 저는 바나나 싫은
  • 문서2: 저는 바나나 사과 싫은
  • 문서3: 길고 노란 먹고 사과 사과

LSA를 여기에 적용하면 어떤 일이 일어날까요? (k=2, 즉 주제를 2개 찾는다고 가정)

  • LSA는 이 문서들 속에서 '과일'이라는 주제와 '감정/취향'이라는 두 가지 핵심 주제를 발견할 수 있습니다.
  • '바나나'와 '사과'는 '과일'이라는 주제 축에서 높은 값을 가지므로, 최종 벡터 공간에서 서로 가까운 위치에 놓이게 됩니다. (비록 이 예제에서는 같이 등장한 문서가 있지만, LSA는 전혀 다른 문서에 등장해도 문맥이 비슷하면 가깝게 만듭니다.)
  • '문서1'과 '문서2'는 두 주제 모두와 관련이 있으므로, 두 문서의 벡터는 서로 가깝게 표현될 것입니다.

시험 대비 최종 요약

  • LSA의 목표: DTM에 숨어있는 **잠재적인 의미(주제)**를 찾아내어, 단어와 문서를 저차원의 의미 공간에 표현하는 것.
  • 핵심 연산: Truncated SVD ()
  • 최종 결과물 (★★★★★):
    • 문서 임베딩 벡터 =
    • 단어 임베딩 벡터 =
  • 효과: 이 과정을 통해 의미적으로 유사한 단어들은 벡터 공간에서 가까운 값으로 표현된다.

 

1단계: SVD 연산 수행 (데이터 분해)

가장 먼저 할 일은 이전 예제에서 만들었던 **문서-단어 행렬 (DTM)**을 SVD를 이용해 세 개의 행렬로 분해하는 것입니다.

  • 코드 설명 (Slide 31 & 32):
    1. A는 우리의 원본 DTM입니다. (4개의 문서, 9개의 단어)
    2. np.linalg.svd(A)를 실행하면 U, s, VT가 나옵니다.
      • U: 문서와 관련된 정보를 담은 행렬 (4x4 크기)
      • s: **특잇값(Singular Value)**들의 리스트 (배열). 행렬의 대각선 값들만 뽑아놓은 것입니다. 데이터의 잠재된 주제(Topic)들의 중요도를 의미합니다.
      • VT: 단어와 관련된 정보를 담은 행렬 (9x9 크기)
    3. np.allclose(A, np.dot(np.dot(U, S), VT)) 코드는 분해된 를 다시 곱해서 원본 A와 일치하는지 확인하는 과정입니다. True가 나왔다는 것은 SVD 분해가 수학적으로 완벽하게 이루어졌음을 의미합니다.

2단계: 낮은 계수로 근사 (핵심 정보 압축) ★★★

이것이 LSA의 가장 핵심적인 부분입니다. SVD로 분해한 모든 정보를 사용하는 것이 아니라, **가장 중요한 정보만 남기고 나머지는 버려서 데이터를 압축(차원 축소)**합니다.

  • 코드 설명 (Slide 33 & 34):
    1. k = 2 라고 설정합니다. 이것은 **"가장 중요한 상위 2개의 주제만 사용하겠다"**는 의미입니다.
    2. U, s, VT 행렬에서 상위 2개 주제에 해당하는 부분만 잘라냅니다(slicing).
      • U는 4x4에서 4x2로 크기가 줄어듭니다.
      • s는 4개 값에서 2개 값만 남습니다.
      • VT는 9x9에서 2x9로 크기가 줄어듭니다.
    3. 이렇게 잘라낸 행렬들로 원본 A를 복원하면 A_prime이 됩니다.
    4. A와 A_prime을 비교해보면, 값이 똑같지는 않지만 원본의 특징을 어느 정도 유지하고 있는 것을 볼 수 있습니다. 약간의 정보를 잃는 대신, 9차원 데이터를 2차원으로 압축하는 데 성공한 것입니다. 이것이 바로 Truncated SVD (절단된 SVD) 입니다.

3단계: 문서 및 단어 임베딩 계산 (최종 결과 도출)

이제 압축된 정보(잘라낸 )를 사용해 우리가 진짜 원했던 **문서와 단어의 새로운 좌표(벡터)**를 계산합니다.

  • 코드 설명 (Slide 35 - 문서 임베딩):
    • np.dot(U, S): 잘라낸 를 곱합니다. (공식: )
    • 결과: 4개의 문서가 각각 **2개의 숫자(2차원 벡터)**로 표현됩니다. 예를 들어 첫 번째 문서는 [-0.64, 1.53] 이라는 새로운 좌표를 갖게 됩니다.
  • 코드 설명 (Slide 36 - 단어 임베딩):
    • np.dot(S, VT): 잘라낸 를 곱합니다. (공식: )
    • 결과: 9개의 단어들도 각각 2차원 벡터로 표현됩니다.

최종 결론 및 시험 포인트

  • 임베딩 벡터의 의미: 새롭게 얻은 [-0.64, 1.53] 같은 벡터의 각 차원(첫 번째 숫자, 두 번째 숫자)이 정확히 무엇을 의미하는지 우리는 알 수 없습니다.
  • 토픽 모델링: 하지만 비슷한 벡터 값을 갖는 문서나 단어들을 그룹으로 묶어보면, "아, 첫 번째 차원은 '과일'과 관련된 주제를 나타내는구나", "두 번째 차원은 '감정'과 관련된 주제를 나타내는구나" 하고 숨겨진 주제(Topic)를 추론할 수 있습니다. 이것이 토픽 모델링의 기본 원리입니다.

시험 요약: "LSA는 DTM에 SVD를 적용한 뒤, Truncated SVD를 이용해 k개의 주요 정보만 남겨 차원을 축소하고, 최종적으로 ****와 ****를 계산하여 각각 문서와 단어의 저차원 임베딩 벡터를 얻는 기술이다." 이 문장만 완벽히 이해하시면 됩니다! 🚀

 

LSA의 한계점 (Limitations)

LSA의 한계는 크게 **'재료의 한계'**와 '기술의 한계' 두 가지로 나눌 수 있습니다.


1. 재료(입력)의 한계: 카운트 기반 행렬의 문제

LSA는 시작점, 즉 재료가 되는 단어-문서 행렬(DTM)의 단점을 그대로 물려받습니다.

  • 단어 순서, 문법 무시
    • DTM은 단어가 몇 번 나왔는지만 셀 뿐, 순서는 고려하지 않습니다. (이를 'Bag of Words' 모델이라고 합니다)
    • 예시: "강아지가 사람을 물었다"와 "사람이 강아지를 물었다"는 DTM에서는 거의 동일하게 표현되어 LSA도 두 문장의 엄청난 의미 차이를 구분하지 못합니다.
  • 동음이의어(Polysemy) 구분 불가
    • LSA는 모든 단어를 단 하나의 벡터로만 표현합니다. 따라서 여러 의미를 가진 단어는 모든 의미가 뒤섞인 애매한 평균값의 벡터를 갖게 됩니다.
    • 예시: "맛있는 사과를 먹었다"의 '사과(apple)'와 "잘못을 사과했다"의 '사과(apology)'를 LSA는 같은 단어로 취급하여 동일한 벡터로 표현합니다.

2. 기술(SVD 및 모델)의 한계

LSA가 사용하는 핵심 기술인 SVD와 모델 자체의 구조적 문제입니다.

  • SVD의 높은 계산 비용
    • SVD는 행렬이 커질수록(문서나 단어가 많아질수록) 계산량이 기하급수적으로 늘어납니다.
    • 결론: 수백만 개의 문서 같은 대규모 데이터에는 적용하기 비효율적입니다. 🐢
  • 새로운 데이터 추가의 어려움
    • 새로운 문서나 단어가 추가되면, 처음부터 전체 DTM을 다시 만들어 SVD 계산을 전부 재수행해야 합니다.
    • 결론: 실시간으로 데이터가 변하는 환경에서는 사용하기 매우 어렵습니다. 업데이트가 불가능하고 항상 전체를 재학습해야 합니다.
  • 결과의 낮은 해석 가능성
    • LSA가 찾아낸 잠재 의미(Topic) 벡터는 그냥 숫자의 나열일 뿐입니다. 이 벡터의 각 차원이 "아, 이건 '스포츠'에 대한 차원이구나" 하고 사람이 직관적으로 이해하기 매우 어렵습니다.
  • 문맥에 따른 의미 변화 반영 불가 (정적 표현)
    • 이는 '동음이의어' 문제와 직결됩니다. LSA로 만들어진 단어 벡터는 어떤 문장에 쓰이든 항상 고정된 값을 가집니다 (Static Word Embedding).
    • 결론: "은행에서 돈을 찾다"와 "강둑(bank)을 걷다"에서 'bank'는 문맥에 따라 의미가 완전히 다르지만, LSA는 이를 반영하지 못하고 항상 똑같은 벡터를 사용합니다.
  • 선형 관계만 표현 가능
    • SVD는 기본적으로 데이터를 선형적으로 변환하는 기법입니다.
    • 결론: 단어와 의미 사이의 복잡하고 비선형적인 관계를 잡아내는 데 한계가 있습니다.

시험 대비 최종 요약 (★★★★★)

한계점 종류 문제점 핵심 키워드
입력 데이터 단어 순서/문법/동음이의어(다의어)를 처리하지 못함 Bag of Words, 동음이의어
계산 비용 SVD는 대규모 데이터에 너무 느리고 비효율적 SVD 계산 비용
확장성 새로운 데이터가 추가되면 처음부터 전체 재계산 필요 재계산, 업데이트 불가
결과 해석 결과로 나온 벡터(잠재 의미)를 사람이 이해하기 어려움 해석의 어려움
표현 방식 문맥에 따라 단어 의미가 변하는 것을 반영 못 함 정적(Static) 표현

LSA의 이러한 단점들 때문에 이후 Word2Vec이나 BERT와 같이 문맥을 파악하고 계산이 효율적인 새로운 단어 임베딩 기술들이 등장하게 되었습니다

반응형
반응형

🤔 1. BM25는 왜 등장했는가? (TF-IDF의 한계 복습)

BM25를 이해하려면 먼저 TF-IDF가 해결하지 못한 문제점들을 알아야 합니다.

  1. TF의 선형적 증가 문제: TF-IDF에서는 특정 단어가 문서에 10번 나오면 1번 나올 때보다 TF 점수가 10배 높습니다. 하지만 실제로는 단어의 중요도가 그렇게 무한정 비례해서 증가하지 않고 어느 정도 **포화(saturate)**됩니다.
  2. 문서 길이 문제: 다른 조건이 같다면, 내용이 긴 문서가 짧은 문서보다 더 높은 TF-IDF 점수를 가질 확률이 높습니다. 이는 불공평한 비교로 이어질 수 있습니다.

BM25는 바로 이 두 가지 핵심 문제를 정교한 방식으로 해결하기 위해 탄생한 알고리즘입니다.


📊 2. BM25의 직관적인 해석

BM25의 복잡한 공식을 이해하기 전에, 각 부분이 어떤 역할을 하는지 직관적으로 파악하는 것이 중요합니다.

이 공식은 크게 세 부분으로 나눌 수 있습니다.

  1. IDF 항 (단어의 희귀성):
    • TF-IDF와 동일한 역할을 합니다. 전체 문서에서 희귀한 단어일수록 높은 가중치를 부여합니다. "이 단어가 얼마나 중요한 정보를 담고 있는가?"를 측정합니다.
  2. TF 스케일링 항 (단어 빈도의 포화):
    • TF-IDF의 'TF 선형 증가 문제'를 해결합니다. 단어 빈도(f(q,D))가 증가하더라도, 점수가 무한정 커지지 않고 일정 수준에서 점차 포화되도록 설계되었습니다.
  3. 문서 길이 보정 항 (문서 길이의 공정성):
    • TF-IDF의 '문서 길이 문제'를 해결합니다. 문서의 길이(|D|)를 **전체 문서의 평균 길이(avgdl)**와 비교하여 점수를 보정합니다. 문서가 평균보다 길면 페널티를, 짧으면 어드밴티지를 주는 방식입니다.

🔬 3. BM25 공식 상세 해부 (★시험 핵심★)

이제 공식의 각 부분을 자세히 뜯어보겠습니다.

1. IDF (Inverse Document Frequency) 항

BM25에서 사용하는 IDF는 기존의 IDF를 살짝 변형한 공식을 사용합니다.

  • : 전체 문서의 수
  • : 단어 가 포함된 문서의 수
  • 핵심 특징: 스무딩(Smoothing)
    • 분자와 분모에 +0.5를 더해주는 것을 스무딩이라고 합니다.
    • 목적 1 (0으로 나누기 방지): 어떤 단어가 한 번도 등장하지 않았을 때 발생할 수 있는 오류를 막습니다.
    • 목적 2 (음수 값 방지): 단어가 전체 문서의 절반 이상에 등장할 경우, 기존 IDF 공식에서는 안의 값이 1보다 작아져 음수가 나올 수 있습니다. BM25의 IDF는 이를 방지하여 항상 양수 값을 갖도록 보정합니다.
    • 결과적으로 매우 드문 단어에 대해 더 민감하게 반응하고, 일반적인 단어의 IDF 값은 더 빠르게 감소시키는 효과가 있습니다.
  • IDF 음수 나오는 예시
    • 1. 문제의 IDF 공식
      • : 전체 문서의 수
      • : 해당 단어가 등장한 문서의 수
      이제 "단어가 전체 문서의 절반 이상에 등장"하는 상황을 가정해 봅시다.
      • 전체 문서(N): 100개
      • 어떤 단어가 60개의 문서에 등장했다고 해보죠. ()
      • 이 경우, (즉, ) 조건을 만족합니다.
      3. 공식에 대입해보기로그 함수()는 다음과 같은 중요한 특징을 가집니다.
      • 가 1보다 크면, 는 **양수(+)**가 됩니다. (예: )
      • 가 1이면, 0이 됩니다. (예: )
      • 가 1보다 작고 0보다 크면, 는 **음수(-)**가 됩니다. (예: )
      따라서, 위에서 계산한 $\log(0.667)$의 값은 반드시 음수가 나오게 됩니다.
  • 4. 로그 함수의 특징 (핵심!)
  • 위의 숫자를 공식에 넣어보면, 안의 값이 어떻게 변하는지 알 수 있습니다.
  • 2. '절반 이상'의 조건
  • BM25 IDF의 기반이 된 확률론적 IDF 공식은 다음과 같습니다.

2. TF 및 문서 길이 보정 항

이 부분이 바로 BM25의 독창성이 드러나는 곳입니다.

  • : 문서 D에서 단어 의 빈도 (TF)
  • : 문서 D의 길이
  • avgdl: 전체 문서의 평균 길이
  • 파라미터 k1 (TF 포화도 조절):
    • 이 값은 TF 점수가 얼마나 빨리 포화될지를 결정합니다. k1이 작을수록 TF 값은 더 빨리 최대치에 가까워집니다.
    • 일반적으로 1.2 ~ 2.0 사이의 값을 사용하며, 이 값을 통해 단어 빈도가 점수에 미치는 영향을 조절할 수 있습니다.
  • 파라미터 b (문서 길이 보정 강도 조절):
    • 이 값은 문서 길이에 대한 정규화(normalization)를 얼마나 강하게 적용할지 결정합니다.
    • b = 0 이면: 문서 길이 보정을 전혀 하지 않습니다 (TF-IDF와 유사).
    • b = 1 이면: 문서 길이에 대한 보정 효과를 최대로 적용합니다.
    • 일반적으로 0.75를 기본값으로 많이 사용하며, 문서의 길이를 얼마나 점수에 반영할지를 조절하는 중요한 역할을 합니다.

🎓 시험 대비 최종 요약

특징 TF-IDF BM25
핵심 사상 단어 빈도와 희귀성의 곱 TF-IDF를 개선한 검색 순위(Ranking) 모델
TF 스케일링 선형적 (무한정 증가 가능) 비선형적 (일정 수준에서 포화)
문서 길이 고려하지 않음 평균 문서 길이와 비교하여 정규화/보정
주요 파라미터 없음 k1 (TF 포화도 조절), b (문서 길이 보정 강도 조절)
주요 용도 범용적인 단어 가중치 계산, 키워드 추출 정보 검색, 검색 엔진의 랭킹 알고리즘
Sheets로 내보내기

결론적으로, BM25는 TF-IDF의 단점인 TF의 과대평가와 문서 길이 편향 문제를 k1과 b라는 두 개의 파라미터를 도입하여 정교하게 해결한, 현대 검색 시스템의 표준과도 같은 알고리즘이라고 할 수 있습니다.

 

TF-IDF와의 비교

슬라이드 우측의 TF-IDF 코드는 코사인 유사도를 계산하는 반면, BM25는 직접적인 **관련도 점수(relevance score)**를 계산합니다. 두 방법 모두 문서 순위를 매길 수 있지만, BM25는 TF의 포화도와 문서 길이를 정교하게 보정하기 때문에 일반적으로 검색 및 랭킹 성능이 더 우수합니다.

 

🔬 2. BM25 공식 심층 분석 (★시험 핵심★)

BM25의 성능 비결은 공식에 숨겨진 두 개의 핵심 파라미터, k1과 b에 있습니다.

상세 해석 1: TF와 k1 파라미터 (단어 빈도 포화 조절)

  • f(q, D): 문서 D에 포함된 단어 q의 빈도(raw count)입니다.
  • 파라미터 k1: 이 값은 TF 점수가 얼마나 빨리, 그리고 어느 정도까지 증가하다가 포화될지를 조절하는 '포화 컨트롤러' 입니다. (일반적으로 1.2 ~ 2.0 사용)
    • k1이 작을수록: TF 점수가 더 빨리 포화됩니다. 즉, 단어가 몇 번만 등장해도 금방 높은 점수를 받고, 그 이상 반복되어도 점수가 거의 오르지 않습니다.
    • k1이 클수록: TF 점수가 포화되는 정도가 약해져, 단어 빈도수가 점수에 미치는 영향이 더 커집니다 (선형 증가에 가까워짐).
  • 결론: k1은 "한 문서에서 단어가 반복되는 것을 얼마나 더 가치있게 쳐줄 것인가?"를 조절하는 중요한 변수입니다.

상세 해석 2: 문서 길이 보정과 b 파라미터

  • |D| / avgdl: 현재 문서의 길이(|D|)가 전체 문서의 평균 길이(avgdl)에 비해 얼마나 긴지 혹은 짧은지를 나타내는 비율입니다.
  • 파라미터 b: 이 값은 문서 길이 보정을 얼마나 강하게 적용할지를 조절하는 '정규화 강도 컨트롤러' 입니다. (0과 1 사이의 값, 일반적으로 0.75 사용)
    • b = 0 이면: 문서 길이 보정을 전혀 사용하지 않습니다. 문서 길이에 따른 유불리가 사라집니다.
    • b = 1 이면: 문서 길이에 대한 보정 효과를 최대로 적용합니다. 평균보다 긴 문서는 강한 페널티를 받게 됩니다.
  • 결론: b는 "문서의 길이가 검색 결과에 미치는 영향을 얼마나 제어할 것인가?"를 조절하는 변수입니다.

🎓 시험 대비 최종 요약

구분 역할 핵심 파라미터 파라미터의 의미
IDF 항 단어의 전역적 희귀성(정보량) 측정 (스무딩 값 +0.5) 안정적인 계산 보장
TF 항 단어의 지역적 빈도(중요도) 측정, 단 포화 k1 TF 점수의 포화도 조절
문서 길이 항 문서 길이에 따른 점수 왜곡 보정 b 문서 길이 정규화 강도 조절
Python 구현 BM25 알고리즘의 간편한 사용 rank_bm25 BM25Okapi()로 초기화, get_scores()로 랭킹
Sheets로 내보내기

BM25는 TF-IDF를 기반으로 하되, k1과 b라는 파라미터를 도입하여 단어 빈도의 과대평가와 문서 길이 편향 문제를 모두 해결한, 매우 정교하고 실용적인 검색 랭킹 알고리즘입니다. 이 점을 명확히 이해하는 것이 시험의 핵심입니다.

 

🥊 BM25 vs. TF-IDF: 무엇이, 왜 더 뛰어난가? (★시험 핵심★)

결론부터 말하면, BM25는 TF-IDF의 핵심적인 문제점 3가지를 파라미터(k1, b)와 개선된 공식을 도입하여 해결한, 훨씬 더 정교하고 현실적인 검색 순위(Ranking) 모델입니다.

슬라이드의 요약처럼, BM25의 개선점은 정확히 3가지 포인트로 나눌 수 있습니다.


1. TF 선형 증가 문제 → k1 파라미터로 해결

  • TF-IDF의 문제점: TF-IDF에서는 단어의 등장 횟수(TF)가 늘어날수록 점수가 끝없이 선형적으로 증가합니다. 하지만 현실에서는 단어의 중요도가 그렇게 무한정 커지지 않습니다. 예를 들어, 한 문서에서 '컴퓨터'라는 단어가 10번 등장했다면 이미 중요한 키워드인데, 100번 등장한다고 해서 그 중요도가 정확히 10배가 되지는 않습니다. 중요도는 어느 시점에서 **포화(saturate)**됩니다.
  • BM25의 해결책 (k1 파라미터): BM25는 **k1**이라는 파라미터를 사용해 단어 빈도(TF)의 영향력이 일정 수준에서 포화되도록 설계했습니다.
    • 그래프 해석: 위 그래프에서 빨간색 TF-IDF 선은 단어 빈도(x축)가 늘어남에 따라 점수가 계속해서 올라갑니다. 반면, 파란색과 검은색 BM25 선은 초반에는 점수가 빠르게 오르다가 점차 완만해지며 특정 값에 수렴(포화)하는 것을 볼 수 있습니다. k1은 이 곡선이 얼마나 빨리, 얼마나 높이까지 도달할지를 조절하는 역할을 합니다.

2. 문서 길이 문제 → b 파라미터로 해결

  • TF-IDF의 문제점: 표준 TF-IDF는 문서의 길이를 직접적으로 고려하지 않습니다. 하지만 상식적으로 100단어로 이루어진 짧은 문서에서의 '핵심'이라는 단어 한 번이, 10,000단어로 이루어진 긴 문서에서의 '핵심'이라는 단어 한 번보다 훨씬 더 중요합니다. TF-IDF는 이러한 문서 길이에 따른 중요도 차이를 반영하지 못합니다.
  • BM25의 해결책 (b 파라미터): BM25는 **b**라는 파라미터를 통해 문서의 길이를 점수에 반영하여 보정(정규화)합니다. 현재 문서의 길이를 전체 문서의 평균 길이와 비교하여 점수를 조정합니다.
    • 그래프 해석: 아래 그래프에서 빨간색 TF-IDF 선은 문서 길이(x축)가 변해도 점수가 일정한 것을 보여줍니다. 즉, 문서 길이에 둔감합니다. 하지만 파란색과 검은색 BM25 선은 문서의 길이가 길어질수록 점수가 점차 감소하는 것을 볼 수 있습니다. 이것이 바로 '문서 길이에 대한 페널티'이며, b는 이 페널티의 강도를 조절합니다.

3. IDF 분포 문제 → 스무딩(Smoothing) IDF 사용

  • TF-IDF의 문제점: 전통적인 IDF 공식()은 아주 드물게 특정 상황(단어가 절반 이상의 문서에 등장)에서 음수 값을 가질 수 있고, 전체 문서 집합에 없는 단어에 대한 처리가 불안정할 수 있습니다.
  • BM25의 해결책 (Smoothing IDF): BM25는 분자와 분모에 작은 값(보통 0.5)을 더해주는 스무딩(Smoothing) 기법이 적용된 IDF 공식을 사용합니다. 이를 통해 IDF 값이 항상 양수가 되도록 보장하고, 전체적으로 더 안정적인 점수 분포를 만들어냅니다.

🎓 시험 대비 최종 요약

문제점 (Problem) TF-IDF BM25의 해결책 (Solution)
TF의 선형적 증가 점수가 제한 없이 증가하여 중요도를 과대평가 k1 파라미터 도입, 점수가 일정 수준에서 **포화(Saturate)**되도록 설계
문서 길이 편향 문서 길이를 고려하지 않아 공정한 비교가 어려움 b 파라미터 도입, 평균 문서 길이와 비교하여 점수 보정/정규화
IDF 분포 특정 경우 불안정한 값을 가질 수 있음 **스무딩(Smoothing)**을 추가한 안정적인 IDF 공식 사용
결론 범용적인 키워드 추출 방법 **검색 순위(Ranking)**에 최적화된 정교한 점수 모델
Sheets로 내보내기

이 세 가지 핵심적인 개선점 덕분에, BM25는 단순 TF-IDF보다 훨씬 더 성능이 뛰어난 검색 랭킹 알고리즘으로 인정받으며 Elasticsearch와 같은 현대 검색 엔진의 표준으로 자리 잡게 되었습니다.

 

🏛️ BM25 vs TF-IDF 최종 요약: BM25를 구성하는 세 개의 기둥

BM25는 TF-IDF를 기반으로 하지만, 크게 세 가지 측면에서 정교한 개선을 이루어냈습니다. 이 세 가지가 바로 BM25의 핵심입니다.

1. 문서 길이 문제 → b 파라미터로 해결 (공정한 문서 길이 보정)

  • TF-IDF의 한계: 문서의 길이를 고려하지 않아, 내용이 긴 문서가 검색어에 더 높은 점수를 받을 수 있는 불공평함이 있었습니다.
  • BM25의 해결책: b 파라미터를 도입하여, 현재 문서의 길이를 전체 문서의 평균 길이와 비교하여 점수를 보정(정규화)합니다.
    • b의 역할: 이 보정을 얼마나 강하게 적용할지 조절하는 '스위치'입니다.
      • b=0이면 문서 길이 보정을 전혀 하지 않습니다.
      • b=1이면 문서 길이 보정 효과를 최대로 적용하여, 평균보다 긴 문서는 강한 페널티를 받습니다. (일반적으로 0.75 사용)
    • 결론: 문서 길이에 따른 유불리를 없애 공정한 비교를 가능하게 합니다.

2. TF 선형 증가 문제 → k1 파라미터로 해결 (지능적인 TF 스케일링)

  • TF-IDF의 한계: 단어가 문서에 나올수록 TF 점수가 끝없이 비례하여 증가했습니다. 이는 단어의 실제 중요도가 어느 정도 이상부터는 크게 늘지 않는 현실(수확 체감의 법칙)을 반영하지 못했습니다.
  • BM25의 해결책: **k1**이라는 파라미터를 도입하여, 단어 빈도(TF)가 점수에 미치는 영향이 일정 수준에 도달하면 **포화(saturate)**되도록 설계했습니다.
    • k1의 역할: TF 점수가 얼마나 빨리, 어느 정도까지 증가하다가 완만해질지를 조절하는 '곡선 조절기'입니다.
      • k1이 작을수록 점수가 더 빨리 포화됩니다 (단어의 반복에 둔감해짐).
      • k1이 클수록 점수가 더 늦게 포화됩니다 (단어의 반복을 더 중요하게 여김).
    • 결론: 단어 빈도가 점수에 미치는 영향을 현실적으로 모델링하여, 특정 단어가 과도하게 반복되는 것에 대한 점수 인플레이션을 막습니다.

3. IDF 분포 문제 → 스무딩(Smoothing) IDF 사용 (정교해진 IDF)

  • TF-IDF의 한계: 전통적인 IDF 공식은 매우 드물게 음수 값을 갖거나, 특정 단어 분포에서 불안정한 모습을 보일 수 있습니다.
  • BM25의 해결책: 분자와 분모에 작은 상수(0.5)를 더해주는 스무딩(Smoothing) 기법을 적용한 IDF 공식을 사용합니다.
    • 결론: 이를 통해 IDF 값이 항상 양수가 되도록 보장하고, 전체적으로 더 안정적이고 신뢰도 높은 희귀성 점수를 부여합니다.

📈 점수 계산 방식의 차이

마지막 요약 포인트는 두 모델의 근본적인 접근 방식 차이를 보여줍니다.

  • TF-IDF: 2단계 방식입니다.
    1. 모든 문서와 검색어를 각각의 TF-IDF 벡터로 변환합니다.
    2. 이 벡터들 사이의 코사인 유사도를 별도로 계산하여 최종 유사성을 구합니다.
  • BM25: 1단계 방식입니다.
    • BM25 공식 그 자체가 검색어(Query)와 문서(Document)를 입력받아 최종 **관련도 점수(Relevance Score)**를 직접 계산해내는 하나의 완성된 **랭킹 함수(Ranking Function)**입니다.
    • 벡터화와 유사도 계산이 분리된 것이 아니라, 점수 계산 과정에 유사도 개념이 통합되어 있습니다.

🎓 시험 대비 최종 암기 테이블

문제점 (Problem) TF-IDF BM25의 해결책 (Solution) BM25의 "비밀 병기"
TF의 선형적 증가 점수가 무한정 증가하여 중요도 왜곡 k1 파라미터 도입, 점수가 일정 수준에서 **포화(Saturate)**되도록 설계 k1 (TF 포화도 조절)
문서 길이 편향 문서 길이를 고려하지 않아 불공평 b 파라미터 도입, 평균 문서 길이와 비교하여 점수 보정/정규화 b (길이 보정 강도 조절)
IDF 분포 특정 경우 불안정한 값을 가질 수 있음 **스무딩(Smoothing)**을 추가한 안정적인 IDF 공식 사용 안정성 확보
결론 범용적인 키워드 추출 방법 **검색 순위(Ranking)**에 최적화된 정교한 점수 모델 랭킹에 특화된 성능
반응형

+ Recent posts