1. 전통적인 텍스트 표현 방법
원-핫 인코딩 (One-Hot Encoding)
- 단어마다 고유 번호를 붙이고, 그 번호 위치만 1이고 나머지는 전부 0인 벡터를 만든다.
- 장점: 단순하고 이해하기 쉬움.
- 단점: 벡터가 너무 커지고 대부분 0이라 비효율적이고, 단어 의미도 반영 못 함.
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
- 단어가 문서에서 자주 등장하면 중요하게 보고, 모든 문서에 흔하게 등장하면 덜 중요하게 본다.
- 장점: 빈도만 보는 것보단 훨씬 정교하게 단어 중요도를 파악.
- 단점: 여전히 단어 의미나 문맥은 반영 못 함.
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: 중심 단어로 주변 단어 예측 (느리지만 희귀 단어 잘 처리)
- 장점: 단어 의미 파악 가능, 유사 단어끼리 가까이 있음.
- 단점: 문맥은 반영 못 하고, 다의어도 구분 못 함.
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 |