워드 임베딩
단어를 고정된 크기의 실수 벡터로 변환하는 방법으로, 단어 간의 의미적 유사도를 벡터의 거리로 표현해. 예를 들어, "고양이"와 "강아지"는 비슷한 벡터 값을 가지며, 벡터 공간에서 가까운 위치에 배치돼.
- Word2Vec: 단어를 벡터 공간에 매핑하여 의미가 비슷한 단어들이 가까운 위치에 배치되도록 학습
- GloVe: 전체 코퍼스에서 단어 간의 통계적 관계를 이용해 벡터화
- FastText: 단어를 서브단어로 나누어 처리하여 희귀 단어에 강한 성능 발휘
워드 임베딩 예시로 Word2Vec 모델을 생각해보자. Word2Vec은 단어를 고차원 벡터로 변환하여 의미가 비슷한 단어들이 벡터 공간에서 가깝게 위치하도록 학습하는 기법이야.
예를 들어, "고양이"와 "강아지"라는 단어는 벡터 공간에서 비슷한 벡터 값을 가지게 되고, "고양이"와 "자동차"는 더 멀리 위치하게 돼.
예시 :
- 고양이 → [0.1, 0.3, -0.2, 0.4, ...]
- 강아지 → [0.1, 0.31, -0.21, 0.39, ...] (고양이와 비슷한 벡터)
- 자동차 → [0.5, -0.2, 0.3, -0.1, ...] (고양이와는 다소 다른 벡터)
이렇게 단어들을 벡터로 변환하면, 수학적 연산을 통해 단어 간의 유사성을 측정하거나, 단어 간의 관계를 쉽게 파악할 수 있어. 예를 들어, "왕" - "남자" + "여자" = "여왕"처럼 계산할 수도 있어!
희소 표현(Sparse Representation)
은 대부분의 값이 0인 벡터나 행렬을 사용하는 방식으로, 주로 많은 요소 중에서 중요한 요소만을 표현하는 방법이에요. 데이터의 대부분이 0으로 채워져 있어서 메모리 효율성과 계산 속도 향상에 유리하죠.
예를 들어, 텍스트 분석에서 Bag of Words 모델을 사용할 때 각 단어를 벡터로 표현하고, 해당 단어가 문서에 나타나지 않으면 0으로 표시해요. 이렇게 하면 희소한 벡터를 사용하게 되어, 많은 메모리와 계산을 절약할 수 있어요.
예시 :
단어 집합 ["사과", "바나나", "고양이", "강아지"]에 대해, 문장 "고양이가 바나나를 먹었다"의 희소 표현은:
- 사과 → 0
- 바나나 → 1
- 고양이 → 1
- 강아지 → 0
따라서 벡터는 [0, 1, 1, 0]이 되며, 0이 대부분을 차지하는 희소 벡터가 생성됩니다.
밀집 표현(Dense Representation)
대부분의 값이 0이 아닌 벡터나 행렬을 사용하는 방식으로, 데이터의 특성을 보다 정밀하게 표현할 수 있어요.
이는 단어 간의 의미적 관계를 반영
예를 들어, Word2Vec이나 GloVe와 같은 임베딩 기법을 사용하면, 각 단어가 고정된 크기의 벡터로 변환되며, 이 벡터는 대부분의 값이 0이 아니고 단어 간의 유사성이나 문맥적 의미를 반영해요.
예시 :
단어 "사과", "바나나", "고양이", "강아지"의 밀집 표현은 다음과 같을 수 있어요:
- 사과 → [0.1, 0.2, 0.4, 0.3]
- 바나나 → [0.2, 0.1, 0.3, 0.4]
- 고양이 → [0.3, 0.5, 0.1, 0.2]
- 강아지 → [0.4, 0.2, 0.3, 0.1]
각 단어는 실수 값이 포함된 벡터로, 단어 간의 관계(예: "사과"와 "바나나"는 유사)를 반영하며, 이 벡터를 밀집 표현이라고 해요.
분산 표현(Distributed Representation)
단어를 고차원 벡터로 표현하는 방법으로, 각 단어를 다수의 실수 값으로 이루어진 벡터로 변환하여, 단어 간의 의미적 관계를 반영하는 방식이에요. 이 방식은 단어가 고유의 의미를 가지는 것이 아니라, 다른 단어들과의 관계에서 의미를 찾는 특징이 있어요.
특징 :
- 밀집 벡터(Dense Vector)를 사용하여 단어를 표현
- 단어 간 의미적 유사성을 벡터의 거리로 측정 가능
- 자연어 처리에서 주로 사용되며, 워드 임베딩 기법(예: Word2Vec, GloVe, FastText)으로 생성됨
예시 :
단어 "왕", "여자", "남자"를 분산 표현으로 벡터화하면, 단어 간의 의미적 관계를 수치적으로 반영할 수 있어요. 예를 들어:
- 왕 → [0.5, -0.3, 0.1, ...]
- 여자 → [0.4, -0.2, 0.05, ...]
- 남자 → [0.4, -0.1, 0.1, ...]
수학적 계산을 통해 "왕" - "남자" + "여자" = "여왕"처럼 의미를 연산할 수 있어요.
이렇게 분산 표현은 단어 간의 관계를 잘 반영하고, 모델이 언어의 맥락을 더 잘 이해하도록 도와줍니다.
CBOW(Continuous Bag of Words)
Word2Vec 모델의 한 방식으로, 주어진 컨텍스트(주변 단어들)를 바탕으로 중심 단어(타겟 단어)를 예측하는 모델이에요.
작동 방식 :
- 입력: 중심 단어 주변의 단어들(컨텍스트)
- 목표: 주어진 컨텍스트로부터 중심 단어를 예측
예시 :
문장 "고양이가 공원에서 놀고 있다"에서, "공원"을 중심 단어로, "고양이", "가", "에서", "놀고", "있다"는 컨텍스트 단어로 사용돼. CBOW는 "고양이", "가", "에서", "놀고", "있다"를 기반으로 "공원"을 예측하려고 해.
특징 :
- 컨텍스트를 사용하여 중심 단어를 예측하는 방식
- 단어의 의미를 학습할 때, 주변 단어들의 정보를 활용
- 속도가 빠르고 계산 효율적인 방식
이와 반대로, Skip-gram 모델은 중심 단어를 바탕으로 주변 단어들을 예측하는 방식이에요.
네거티브 샘플링(Negative Sampling)
Word2Vec 모델에서 학습 속도를 높이고, 계산 비용을 줄이기 위해 사용되는 기법이에요. 이 방법은 주어진 단어의 정확한 컨텍스트(양성 샘플)만 사용하고, 무작위로 선택된 단어(음성 샘플)들을 함께 학습시켜, 모델이 유용한 특징을 빠르게 학습하도록 돕습니다.
작동 방식 :
- 양성 샘플: 실제 중심 단어와 그 주변 단어(정확한 문맥).
- 음성 샘플: 랜덤하게 선택된 단어들(정답이 아닌 단어들).
예시 :
"나는 공원에서 산책을 한다"라는 문장에서 "산책"을 중심 단어로 할 때:
- 양성 샘플: "공원", "에서", "한다" (실제 문맥)
- 음성 샘플: 무작위로 선택된 단어들 예: "책", "자동차", "음악" 등
이러한 음성 샘플을 통해 모델은 중심 단어와 무관한 단어들의 관계를 학습하고, 빠르고 효율적으로 단어 간 의미적 관계를 파악하게 됩니다.
네거티브 샘플링 Skip-Gram(Skip-Gram with Negative Sampling, SGNS)은 Word2Vec 모델의 한 방식으로, Skip-Gram 모델에 네거티브 샘플링 기법을 결합한 모델이에요. 이 방식은 주어진 중심 단어로부터 주변 단어들을 예측하는 Skip-Gram 모델의 효율성을 네거티브 샘플링을 사용해 개선한 방법이에요.
작동 방식 :
중심 단어를 주어진 후, 그 주변 단어들(정답)을 예측하는 방식.
- 네거티브 샘플링을 통해, 양성 샘플(실제 주변 단어들)뿐만 아니라 음성 샘플(무작위로 선택된 단어들)도 함께 학습시켜, 모델이 더 효율적으로 학습하도록 함.
작동 과정 :
- 양성 샘플: 중심 단어와 실제 문맥 단어들
- 음성 샘플: 랜덤하게 선택된 단어들 (중심 단어와 상관없는 단어들)
- 모델은 중심 단어와 주변 단어의 관계뿐만 아니라, 중심 단어와 무작위 단어 간의 관계도 학습하여, 단어 간의 의미적 관계를 빠르게 파악하도록 학습됨
예시 :
"나는 공원에서 산책을 한다"라는 문장에서 "산책"이 중심 단어라면:
- 양성 샘플: "공원", "에서", "한다"
- 음성 샘플: "책", "자동차", "음악" 등 (랜덤으로 선택)
SGNS는 네거티브 샘플링을 통해 계산량을 줄이고 학습 속도를 빠르게 하며, 효율적으로 단어의 의미를 파악할 수 있게 도와줍니다.
네거티브 샘플링 Skip-Gram(Skip-Gram with Negative Sampling, SGNS)은 Word2Vec 모델의 한 방식으로, Skip-Gram 모델에 네거티브 샘플링 기법을 결합한 모델이에요. 이 방식은 주어진 중심 단어로부터 주변 단어들을 예측하는 Skip-Gram 모델의 효율성을 네거티브 샘플링을 사용해 개선한 방법이에요.
작동 과정
- 중심 단어를 주어진 후, 그 주변 단어들(정답)을 예측하는 방식.
- 네거티브 샘플링을 통해, 양성 샘플(실제 주변 단어들)뿐만 아니라 음성 샘플(무작위로 선택된 단어들)도 함께 학습시켜, 모델이 더 효율적으로 학습하도록 함.
과정 :
- 양성 샘플: 중심 단어와 실제 문맥 단어들
- 음성 샘플: 랜덤하게 선택된 단어들 (중심 단어와 상관없는 단어들)
- 모델은 중심 단어와 주변 단어의 관계뿐만 아니라, 중심 단어와 무작위 단어 간의 관계도 학습하여, 단어 간의 의미적 관계를 빠르게 파악하도록 학습됨
예시 :
"나는 공원에서 산책을 한다"라는 문장에서 "산책"이 중심 단어라면:
- 양성 샘플: "공원", "에서", "한다"
- 음성 샘플: "책", "자동차", "음악" 등 (랜덤으로 선택)
SGNS는 네거티브 샘플링을 통해 계산량을 줄이고 학습 속도를 빠르게 하며, 효율적으로 단어의 의미를 파악할 수 있게 도와줍니다.
작동 과정 :
- 중심 단어를 주어진 후, 그 주변 단어들(정답)을 예측하는 방식.
- 네거티브 샘플링을 통해, 양성 샘플(실제 주변 단어들)뿐만 아니라 음성 샘플(무작위로 선택된 단어들)도 함께 학습시켜, 모델이 더 효율적으로 학습하도록 함.
- 양성 샘플: 중심 단어와 실제 문맥 단어들
- 음성 샘플: 랜덤하게 선택된 단어들 (중심 단어와 상관없는 단어들)
- 모델은 중심 단어와 주변 단어의 관계뿐만 아니라, 중심 단어와 무작위 단어 간의 관계도 학습하여, 단어 간의 의미적 관계를 빠르게 파악하도록 학습됨.
예시 :
"나는 공원에서 산책을 한다"라는 문장에서 "산책"이 중심 단어라면:
- 양성 샘플: "공원", "에서", "한다"
- 음성 샘플: "책", "자동차", "음악" 등 (랜덤으로 선택)
SGNS는 네거티브 샘플링을 통해 계산량을 줄이고 학습 속도를 빠르게 하며, 효율적으로 단어의 의미를 파악할 수 있게 도와줍니다.
GloVe(글로브, Global Vectors for Word Representation)
단어 간의 관계를 효율적으로 캡처하기 위한 단어 임베딩 기법이에요. GloVe는 전체 코퍼스의 통계적 정보를 이용해 단어를 고차원 벡터로 변환하며, 단어 간의 관계를 벡터 간의 수학적 연산으로 반영해요.
작동 방식:
- 전체 코퍼스에서 단어의 공기 확률(co-occurrence probability)을 기반으로 단어 벡터를 학습해요.
- 행렬 분해 방식을 사용하여 각 단어를 벡터로 표현하고, 단어들 간의 상관관계를 포착해요.
주요 특징
- 전역적인 통계를 사용하여 단어 간의 관계를 반영함.
- 단어 벡터 간의 산술 연산을 통해 의미적인 관계를 추론할 수 있음. 예를 들어, **"king" - "man" + "woman" = "queen"**처럼 계산할 수 있어요.
- Word2Vec과 비교할 때, GloVe는 전역적인 정보를, Word2Vec은 지역적인 정보에 중점을 두어요.
예시 :
단어 "king"과 "man", "woman", "queen"을 GloVe 벡터로 변환한 후, 다음과 같은 관계를 추론할 수 있어요:
- "king" - "man" + "woman" ≈ "queen"
GloVe는 대규모 코퍼스에서 의미적 관계를 반영한 단어 임베딩을 제공하며, 자연어 처리에서 널리 사용됩니다.
FastText
Facebook AI Research에서 개발한 단어 임베딩 기법으로, 단어를 서브단어(subword)로 분해하여 임베딩하는 방식이에요. 이를 통해 희귀 단어나 OOV(Out-of-Vocabulary) 단어의 벡터 표현을 효율적으로 학습할 수 있어요.
주요특징 :
- 서브단어 기반 학습: FastText는 단어를 서브단어(예: 접두사, 접미사)로 분할하여 각각의 서브단어 벡터를 학습합니다. 이로 인해 단어 내부의 의미를 더 잘 반영할 수 있어요.
- OOV 단어 처리: 학습 데이터에 없던 단어라도, 그 단어를 서브단어 단위로 분해하여 임베딩할 수 있기 때문에 새로운 단어에 대해서도 유용한 벡터를 생성할 수 있어요.
- 속도와 효율성: FastText는 Word2Vec보다 빠르고 메모리 효율적으로 대규모 데이터셋에서 학습할 수 있어요.
예시 :
단어 "running"을 FastText로 임베딩할 때, "run", "ning" 등의 서브단어를 고려하여 각각의 서브단어에 대한 벡터를 학습하고, 이를 조합하여 최종 벡터를 생성합니다.
장점 :
- 희귀 단어나 새로운 단어에 대해 강한 성능을 발휘
- 서브단어 단위로 처리하기 때문에 단어의 미묘한 의미 차이를 잘 포착할 수 있어요.
FastText는 단어 수준뿐만 아니라, 서브단어의 의미까지 고려할 수 있어, 자연어 처리에서 더 나은 성능을 보여줍니다!
RNN을 이용한 텍스트 분류(Text Classification)
순차적인 데이터를 처리하는 RNN의 특성을 활용하여, 텍스트 데이터를 분류하는 작업입니다. 주로 감성 분석(Sentiment Analysis), 스팸 이메일 분류, 주제 분류 등의 자연어 처리(NLP) 문제에서 사용됩니다.
작동 방식
- 입력 데이터: 텍스트를 단어 또는 문자 단위로 나눈 후, 각각을 벡터로 변환 (예: Word2Vec, GloVe, FastText).
- RNN 처리: RNN은 단어 순서대로 데이터를 처리하며, 이전 단어들에 대한 기억을 통해 문맥을 파악합니다.
- 출력: RNN의 마지막 출력값을 사용하여 문서 전체의 의미를 반영한 후, 이를 분류합니다.
- 손실 함수: 예측된 분류 결과와 실제 레이블을 비교하여 손실을 계산하고, 역전파로 가중치를 조정합니다.
특징 :
- 순차적 처리: RNN은 텍스트의 순서를 고려하므로, 문맥이나 순서가 중요한 텍스트 분류에서 뛰어난 성능을 보입니다.
- 문맥 이해: 긴 텍스트에서 문맥을 잘 파악하여 정확한 분류가 가능합니다.
예시 :
- 입력: "이 영화 정말 재미있다"
- 출력: 긍정적인 감성 (1)
- 입력: "이 영화 너무 지루했다"
- 출력: 부정적인 감성 (0)
RNN을 이용한 텍스트 분류는 문맥을 반영하며 동적인 텍스트의 특성을 잘 처리할 수 있어, 다양한 자연어 처리 문제에서 널리 사용됩니다.
'개발 공부' 카테고리의 다른 글
| 동기적(synchronous) vs 비동기적(asynchronous) (0) | 2025.03.21 |
|---|---|
| pip란? (Python Package Installer) (0) | 2025.03.19 |
| CNN for LNP (0) | 2025.03.14 |
| 자연어 처리 용어 정리 1 (1) | 2025.03.14 |
| CNN (0) | 2025.03.11 |