[Data Analysis] 워드 임베딩 (Word Embedding) 정리

2025. 5. 1. 18:41·Data Analysis/Basic

1. 전통적인 텍스트 표현 방법

원-핫 인코딩 (One-Hot Encoding)

  • 단어마다 고유 번호를 붙이고, 그 번호 위치만 1이고 나머지는 전부 0인 벡터를 만든다.
  • 장점: 단순하고 이해하기 쉬움.
  • 단점: 벡터가 너무 커지고 대부분 0이라 비효율적이고, 단어 의미도 반영 못 함.

https://wikidocs.net/22647

 

02-08 원-핫 인코딩(One-Hot Encoding)

컴퓨터 또는 기계는 문자보다는 숫자를 더 잘 처리 할 수 있습니다. 이를 위해 자연어 처리에서는 문자를 숫자로 바꾸는 여러가지 기법들이 있습니다. 원-핫 인코딩(One-Hot E…

wikidocs.net

 

# 예제 텍스트
texts = ["I love natural language processing", "Language models are interesting"]

# 토크나이저 적용
tokenizer = Tokenizer()
tokenizer.fit_on_texts(texts)

# 원-핫 인코딩
one_hot_results = tokenizer.texts_to_matrix(texts, mode='binary')

# 결과 출력
print("Word Index:", tokenizer.word_index)
print("One-Hot Encoded Vector:\n", one_hot_results)
  • Tokenizer를 사용해 단어마다 고유 번호를 붙인다.
  • 자주 나오는 단어에 더 작은 번호가 부여된다.

 

TF-IDF

  • 단어가 문서에서 자주 등장하면 중요하게 보고, 모든 문서에 흔하게 등장하면 덜 중요하게 본다.
  • 장점: 빈도만 보는 것보단 훨씬 정교하게 단어 중요도를 파악.
  • 단점: 여전히 단어 의미나 문맥은 반영 못 함.
TF (Term Frequency)
  * 특정 단어가 문서 내에서 얼마나 자주 등장하는지를 측정
 
IDF (Inverse Document Frequency)
  * 단어가 전체 문서에서 얼마나 드문지를 측정
 
from sklearn.feature_extraction.text import TfidfVectorizer

# 문서
documents = [
    "I love machine learning",
    "Machine learning is fun",
    "Deep learning and machine learning"
]

# TF-IDF 벡터화
vectorizer = TfidfVectorizer()
tfidf_matrix = vectorizer.fit_transform(documents)

# 단어 목록 및 결과 출력
feature_names = vectorizer.get_feature_names_out()
print("Feature Names:", feature_names)
print("TF-IDF Matrix:\n", tfidf_matrix.toarray())

 

2. 워드 임베딩이 필요한 이유

  • 기계는 단어를 숫자로 이해해야 하니까, 단어를 벡터로 바꾸는 게 필수.
  • 좋은 임베딩은:
    • 단어 간 의미적 유사성을 반영하고,
    • 계산 효율도 높이며,
    • 모델 성능도 좋아지게 해준다.

3. 대표적인 워드 임베딩 기법

Word2Vec

  • 주변 단어 정보를 보고 단어 의미를 학습하는 방식.
  • CBOW: 주변 단어들로 중심 단어 예측 (빠름, 자주 쓰이는 단어 잘 처리)
  • Skip-Gram: 중심 단어로 주변 단어 예측 (느리지만 희귀 단어 잘 처리)
  • 장점: 단어 의미 파악 가능, 유사 단어끼리 가까이 있음.
  • 단점: 문맥은 반영 못 하고, 다의어도 구분 못 함.

https://wikidocs.net/22660

 

09-02 워드투벡터(Word2Vec)

앞서 원-핫 벡터는 단어 벡터 간 유의미한 유사도를 계산할 수 없다는 단점이 있음을 언급한 적이 있습니다. 그래서 단어 벡터 간 유의미한 유사도를 반영할 수 있도록 단어의 의미를…

wikidocs.net

 

 

https://velog.io/@aqaqsubin/Word2Vec-Word-to-Vector

 

Word2Vec, Word to Vector

원 핫 인코딩을 사용하면서도 단어 간 유사도를 반영할 수 있도록 단어의 의미를 벡터화하는 방법이다.

velog.io

 

CBOW(Continous Bag of Words)

주변에 있는 단어들을 통해 중간에 있는 단어를 예측하는 방법

 

Skip-Gram

중심 단어를 통해 주변에 있는 단어들을 예측하는 방법

from gensim.models import Word2Vec
from nltk.tokenize import word_tokenize
import nltk

# 예제 문서
documents = [
    'I love reading books.',
    'I love writing about books.',
    'Books are great!'
]

# 소문자 변환 및 토큰화
sentences = [word_tokenize(doc.lower()) for doc in documents]

# Word2Vec 모델 학습 (Skip-Gram 방식)
model = Word2Vec(sentences, vector_size=300, window=5, min_count=1, workers=4, sg=1)

# 'books' 단어의 벡터 출력
vector = model.wv['books']
print("Vector for 'books':", vector)

 

GloVe

  • 문서 전체에서 단어들이 얼마나 함께 나오는지를 기반으로 벡터를 만든다.
  • 장점: 전역 정보 반영 → 의미 유사도 잘 잡아냄.
  • 단점: 메모리 많이 먹고, 다의어 구분도 어려움.

BERT

 

Google에서 제안한 사전 훈련 기반의 양방향 언어 모델로, Transformer의 인코더 구조를 기반으로 문맥 정보를 풍부하게 반영하는 동적(Dynamic) 임베딩을 생성함

  • 문장 양쪽(앞, 뒤) 문맥을 모두 보면서 단어의 의미를 동적으로 정한다.
  • 예: “bank”가 ‘은행’인지 ‘강둑’인지를 상황 보고 구분함.
  • 장점: 문맥 반영 잘 되고, 다양한 NLP 작업에 활용 가능.
  • 단점: 느리고 무겁다. 실시간엔 부담될 수 있음.

1. Bert의 기존 임베딩 방식과 차이

 

2. BERT는 입력 토큰에 대해 다음 세 가지 임베딩을 합산하여 입력 표현을 구성함함

3. [CLS], [SEP] 토큰

 

BERT의 학습 원리

BERT는 2단계로 학습을 진행한다.

 

1단계: 사전 훈련 (Pre-training)을 진행한다

먼저 BERT는 아주 많은 문장을 읽고 "기본적인 언어 감각"을 익힌다. 이 과정은 두 가지 방식으로 이루어진다

 

(1) Masked Language Modeling (MLM)을 수행한다

  • 문장에서 몇몇 단어를 [MASK]로 가리고,
  • 주변 단어들을 보고 가려진 단어를 맞춘다.

예시:

"I enjoy [MASK] learning." → BERT가 'deep'이라고 맞춘다

이렇게 하면 문장 전체를 이해하려고 학습하게 된다.

(2) Next Sentence Prediction (NSP)를 수행한다

  • 두 문장을 주고, 두 번째 문장이 첫 번째 뒤에 진짜 이어지는 문장인지 판단하게 한다.

예시:

문장 A: "He went to the store."
문장 B: "He bought some milk." → YES (Next)
문장 B: "The sun is hot." → NO (Not Next)

다음을 통해 문장 간 관계를 이해하는 능력을 키운다.

 

2단계: 파인튜닝 (Fine-tuning)을 진행한다

실제 작업에 맞게 살짝 조정

예를 들어:

  • 감정 분석을 하고 싶으면 → "긍정/부정" 분류기를 추가하고 조금 더 학습한다.
  • 질문에 답을 하게 하고 싶으면 → "답 위치 찾기" 모듈을 붙이고 학습한다.

BERT 본체는 그대로 두고, 위에 얹는 출력층만 조정해서 새로운 작업에 활용한다.


사전 훈련 MLM, NSP를 통해 언어 감각 익힌다 전반적인 언어 이해 능력 학습
파인튜닝 작업에 맞게 조금 더 학습한다 감정 분석, 질문 응답 등 실제 사용에 맞춘다

 

4. 전통적인 임베딩 vs 사전 학습 임베딩

 

https://huidea.tistory.com/168

 

[NLP] 자연어처리 임베딩 모델 총정리 (word2vec부터 BERT까지)

자연어처리 임베딩 모델들의 전체 컨셉 개념을 복습해보겠다. 이전 모델에 비해서 뭐가 다른지 간단하게만 정리해 둔거니 보다 자세한 자료는 참고링크에서 공부하시길 [ 임베딩 ] 인코딩은 어

huidea.tistory.com

'Data Analysis > Basic' 카테고리의 다른 글

[Deep learning] 데이터 분석과 1D CNN  (0) 2025.05.02
[Data Analysis] 데이터 전처리 해보기  (0) 2025.03.29
[Data Analysis] 데이터 시각화 해보기  (0) 2025.03.23
[Data Analysis] 데이터 정제 및 분석 해보기  (0) 2025.03.23
[Data Analysis] Pandas 라이브러리 연습 2  (0) 2025.03.20
'Data Analysis/Basic' 카테고리의 다른 글
  • [Deep learning] 데이터 분석과 1D CNN
  • [Data Analysis] 데이터 전처리 해보기
  • [Data Analysis] 데이터 시각화 해보기
  • [Data Analysis] 데이터 정제 및 분석 해보기
임승택
임승택
"Hello, I am Im Seungtaek, a computer engineering student. Nice to meet you!"
  • Lim's Technology
    임승택
    임승택
    "Welcome to Lim's Technology!"
  • 누적 조회수
    총 회
    구독하기
    • 분류 전체보기 (77)
      • Blog (6)
      • Computer Vision (31)
        • Computer Vision (2)
        • Paper reviews (16)
        • Project (6)
        • Basic (7)
      • LLM (8)
        • Paper reviews (3)
        • Project (3)
        • Basic (2)
      • Data Analysis (11)
        • Basic (8)
        • Project (3)
      • Computer Graphics (0)
        • Basic (0)
      • Robotics (5)
        • Paper reviews (3)
        • Basic (2)
      • Technology Notes (12)
      • Memo (4)
  • 인기 글

  • 최근 댓글

  • 최근 글

임승택
[Data Analysis] 워드 임베딩 (Word Embedding) 정리
상단으로

티스토리툴바