본문 바로가기

IT/AI

[NLP] Word Embedding 기법 [기초]

728x90

Word Embedding 기법 소개
자연어 처리$($Natural Language Processing, NLP$)$ 분야에서 텍스트 데이터를 다루는 데 있어서 핵심적인 개념 중 하나가 Word Embedding입니다. Word Embedding은 단어를 벡터로 표현하는 기법으로, 컴퓨터가 텍스트 데이터를 더 효과적으로 이해하고 처리할 수 있게 해주는 중요한 도구입니다.

Word Embedding이란?
Word Embedding은 단어를 고차원의 실수 벡터로 매핑하는 것을 의미합니다. 이를 통해 단어 간의 의미적 유사성을 벡터 공간에서 측정할 수 있습니다. 예를 들어, "king"과 "queen"이라는 두 단어가 비슷한 벡터 공간 상에 가깝게 위치한다면, 이들은 의미적으로 유사한 관계를 갖고 있다고 볼 수 있습니다.

Word Embedding의 중요성
기존의 텍스트 처리 방식은 각 단어를 고유한 ID나 원핫 인코딩과 같은 형태로 처리합니다. 그러나 이러한 방식은 단어 간의 의미적 유사성을 반영하지 못하며, 차원의 저주$($curse of dimensionality$)$와 OOV $($Out of Vocabulary$)$ 문제에도 취약합니다. Word Embedding은 이러한 문제들을 극복하기 위해 등장한 개념입니다.

Word Embedding의 활용 분야
- 단어 유사성 계산: 벡터 공간에서 유클리드 거리나 코사인 유사도를 계산하여 단어 간의 의미적 유사성을 평가할 수 있습니다.
- 문서 분류와 감정 분석: 단어의 의미적 특성을 이용하여 문서를 벡터로 변환한 후, 분류나 감정 분석 등에 활용할 수 있습니다.
- 기계 번역: 다국어 간의 단어의 의미 차이를 벡터 공간에서 표현하여 기계 번역 성능을 향상시킬 수 있습니다.
- 정보 검색: 검색 엔진에서 사용자가 입력한 검색어와 문서들의 단어 간 유사성을 측정하여 검색 결과의 정확도를 높일 수 있습니다.


Word2Vec: 단어 임베딩 모델
Word2Vec은 단어를 고차원 벡터로 표현하는 자연어 처리 기법 중 하나입니다. 이를 통해 단어의 의미와 문맥적 유사성을 수치적으로 표현할 수 있으며, 다양한 자연어 처리 작업에서 활용됩니다.

모델 구조
Word2Vec은 크게 두 가지 모델 아키텍처인 CBOW $($Continuous Bag of Words$)$와 Skip-gram으로 나뉩니다.

CBOW and Skip-gram models architecture


1. CBOW: 주변 단어들을 가지고 중심 단어를 예측하는 모델입니다. 문맥을 활용해 중심 단어를 예측하므로 빠른 학습 속도를 가지며, 희소성을 줄이는 효과가 있습니다.

2. Skip-gram: 중심 단어를 가지고 주변 단어들을 예측하는 모델입니다. 문맥의 다양한 변화를 반영할 수 있어 더 정확한 단어 임베딩을 얻을 수 있습니다.

 

CBOW vs SkipGram



학습 방법
Word2Vec은 주로 Negative Sampling, Hierarchical Softmax 등을 사용하여 단어 임베딩을 학습합니다. 이러한 학습 방법은 중심 단어와 주변 단어 간의 관계를 학습하면서 단어의 의미와 유사성을 반영합니다.

활용 분야
Word2Vec은 다양한 자연어 처리 작업에서 활용됩니다. 단어 간 유사도 계산, 문서 분류, 문서 클러스터링, 기계 번역, 감정 분석 등에서 단어 임베딩을 활용하여 성능을 향상시키는 데 활용됩니다.

장점과 한계
Word2Vec의 가장 큰 장점은 단어의 의미와 문맥적 유사성을 수치적으로 표현할 수 있다는 점입니다. 이를 통해 단어 간 유사도를 계산하고 다양한 자연어 처리 작업에 활용할 수 있습니다. 하지만 작은 데이터셋에서는 성능이 제한될 수 있으며, 적절한 하이퍼파라미터 설정이 필요합니다.

요약
Word2Vec은 단어를 벡터로 표현하는 자연어 처리 기법으로, CBOW와 Skip-gram 두 가지 모델 아키텍처로 구성됩니다. 주변 단어나 중심 단어를 예측하며 단어 간 유사도를 표현하여 다양한 자연어 처리 작업에 활용됩니다.



FastText: Subword 임베딩 모델
FastText는 단어를 하위 단어$($subword$)$의 조합으로 표현하여 효과적인 단어 임베딩을 구현하는 기법입니다. 이로써 기존의 Word2Vec과 비교해 OOV $($Out of Vocabulary$)$ 문제를 해결하고, 희소한 단어에 대한 의미 표현을 개선합니다.

Subword 임베딩
FastText의 핵심 아이디어는 단어를 문자$($character$)$ 단위로 분해하여 그 하위 단어$($subword$)$들의 조합으로 표현하는 것입니다. 이를 통해 훈련 데이터에 등장하지 않은 단어라도 그 구성하는 하위 단어들로부터 의미를 유추할 수 있습니다. 예를 들어, "apple"이라는 단어는 "app", "ppl", "ple"$($3-gram$)$과 같은 하위 단어들로 표현될 수 있습니다.

 

Skip-Gram with character n-gram information (character n-gram size=2).

n-gram

더보기

n-gram은 자연어 처리에서 텍스트를 일정한 단위로 나누는 방법 중 하나로, 연속된 n개의 연속된 단어나 문자를 추출하는 방법을 말합니다. 이러한 n-gram은 텍스트에서 패턴을 파악하고 문맥을 이해하는 데 사용됩니다.

예를 들어, "Hello, how are you today?"라는 문장을 2-gram으로 나누면 다음과 같은 조합이 생성됩니다:
- "Hello, how"
- "how are"
- "are you"
- "you today?"

n-gram은 텍스트에서의 단어나 문자의 순서에 기반하여 문맥을 파악하고 언어적인 특징을 분석하는 데 사용됩니다. 이를 활용하면 언어 모델링, 문장 생성, 문서 분류, 정보 검색, 기계 번역 등 다양한 자연어 처리 작업에 활용할 수 있습니다. 주로 사용되는 n-gram은 보통 unigram, bigram, trigram입니다.

1. Unigram $($1-gram$)$: 단어나 문자를 하나씩 추출하는 것을 의미합니다. "Hello, how are you today?"에서 unigram은 각각의 단어를 추출하는 것입니다.

2. Bigram $($2-gram$)$: 연속된 두 개의 단어나 문자를 추출하는 것을 의미합니다. "Hello, how are you today?"에서 bigram은 $($"Hello,", "how"$)$, $($"how", "are"$)$, $($"are", "you"$)$, $($"you", "today?"$)$와 같이 두 단어씩 추출하는 것입니다.

3. Trigram $($3-gram$)$: 연속된 세 개의 단어나 문자를 추출하는 것을 의미합니다. "Hello, how are you today?"에서 trigram은 $($"Hello,", "how", "are"$)$, $($"how", "are", "you"$)$, $($"are", "you", "today?"$)$와 같이 세 단어씩 추출하는 것입니다.


모델 구조
FastText는 Skip-gram 모델의 변형으로, 주변 단어를 예측하는 동시에 하위 단어$($subword$)$의 조합을 예측합니다. 이를 통해 모든 하위 단어$($subword$)$에 대한 임베딩을 얻을 수 있습니다. 또한, 모든 하위 단어$($subword$)$의 임베딩을 평균하여 전체 단어의 임베딩을 생성합니다.

장점과 활용 분야
FastText의 가장 큰 장점은 OOV 문제의 해결과 희소한 단어 처리에 있습니다. 따라서 다국어 처리나 특수 도메인 데이터에서 성능을 향상시키는 데 도움을 줍니다. 또한, 작은 데이터셋에서도 효과적으로 단어 임베딩을 학습할 수 있어 활용 범위가 넓습니다.

요약
FastText는 하위 단어$($subword$)$의 조합으로 단어를 표현하여 OOV 문제와 희소한 단어 문제를 해결하는 단어 임베딩 기법입니다. Subword 임베딩의 특성으로 다양한 자연어 처리 작업에서 성능 향상을 이끌어내며, 다양한 언어와 도메인에서 활용됩니다.

 

OOV

더보기
OOV$($Out-Of-Vocabulary$)$ 문제란 자연어 처리에서 자주 등장하지 않는 단어나 용어가 모델에 포함되지 않거나 훈련 데이터에서 충분한 빈도로 등장하지 않아 모델이 그 단어를 이해하지 못하는 문제를 말합니다. 이는 모델이 새로운 문장이나 문서에 등장하는 단어를 올바르게 처리하지 못하고 예측할 수 없는 결과를 도출할 수 있는 원인이 됩니다.

OOV 문제가 발생 이유:

1. 희귀 단어 및 용어: 모델이 훈련 데이터에서 충분한 빈도로 등장하지 않는 단어나 용어는 OOV 문제를 일으킬 수 있습니다. 예를 들어, 특정 도메인에서 사용되는 전문 용어나 신조어가 훈련 데이터에 부족하게 등장한다면 모델이 이해하지 못할 수 있습니다.

2. 새로운 문맥: 모델이 훈련되었을 때와 다른 문맥에서 사용되는 단어나 구절은 모델이 이해하지 못할 수 있습니다. 예를 들어, 새로운 분야에서 모델이 이전에 본 적이 없는 단어가 등장한다면 OOV 문제가 발생할 수 있습니다.

3. 데이터 부족: 모델이 충분한 양의 다양한 데이터로 훈련되지 않으면 OOV 문제가 더욱 심각해질 수 있습니다. 모델이 다양한 문맥에서 다양한 단어를 학습하지 못하면 새로운 단어에 대한 이해도 낮아집니다.

OOV 문제를 해결하기 위한 방법들은 다음과 같습니다:

- 단어 임베딩 활용: 단어 임베딩 기법을 사용하면 OOV 단어에 대해서도 비슷한 의미를 가진 단어 벡터로 대체하여 처리할 수 있습니다. 미리 훈련된 임베딩 모델을 사용하거나, 모델 훈련 중에 OOV 단어의 벡터를 학습시킬 수도 있습니다.

- 동음이의어 고려: 동음이의어가 존재하는 경우, 해당 단어의 문맥에 따라서 다르게 해석될 수 있습니다. 이런 경우에는 주변 문맥을 고려하여 OOV 단어를 최대한 유추하려는 시도가 필요합니다.

- 도메인 특화 데이터 수집: 특정 도메인이나 분야에서 사용되는 용어나 단어를 충분히 수집하여 훈련 데이터에 추가하면 OOV 문제를 완화할 수 있습니다.

- 데이터 확장: 데이터 증강 기법을 활용하여 새로운 문장이나 문서에서 사용되는 단어의 다양성을 높일 수 있습니다.

OOV 문제는 자연어 처리 모델의 성능을 저하시키는 중요한 요인 중 하나이며, 효과적인 대처 방법을 선택하여 모델의 성능을 향상시키는 데 도움이 됩니다.

 

 



Doc2Vec: 문서 임베딩 모델
Doc2Vec은 Word2Vec의 확장으로, 단어 뿐만 아니라 전체 문서에 대한 임베딩을 생성하는 기법입니다. 이를 통해 문서 간의 유사도를 계산하거나 문서의 의미를 벡터로 표현할 수 있습니다. Doc2Vec은 "Paragraph Vector"라고도 불리며, 여러 변형이 존재합니다.

모델 구조
Doc2Vec은 주로 Distributed Memory Model of Paragraph Vectors $($DM$)$과 Distributed Bag of Words $($DBOW$)$ 두 가지 구조로 사용됩니다. DM은 문맥 정보와 문서 벡터를 동시에 학습하여 문맥과 문서의 관계를 파악합니다. DBOW는 문맥 정보 없이 문서 벡터만을 예측하며, 빠른 학습 속도와 성능 향상을 가져올 수 있습니다.

학습 방법
Doc2Vec은 Word2Vec과 유사하게 Negative Sampling, Hierarchical Softmax 등을 사용하여 문서 임베딩을 학습합니다. 각 문서에 고유한 태그$($tag$)$를 부여하고, 해당 태그를 문서 벡터와 함께 학습합니다. 이를 통해 각 문서의 의미를 효과적으로 임베딩합니다.

활용 분야
Doc2Vec은 다양한 자연어 처리 작업에서 활용됩니다. 문서 간 유사도 계산, 텍스트 분류, 추천 시스템, 문서 요약 등의 작업에서 문서 임베딩을 활용하여 성능을 향상시킬 수 있습니다.

장점과 한계
Doc2Vec의 가장 큰 장점은 문서의 의미를 임베딩하여 벡터로 표현할 수 있다는 점입니다. 이로써 문서 간의 유사도를 계산하거나 다양한 자연어 처리 작업에서 성능을 향상시킬 수 있습니다. 하지만 작은 데이터셋에서는 성능이 제한될 수 있으며, 적절한 하이퍼파라미터 설정이 필요합니다.

요약
Doc2Vec은 Word2Vec의 확장으로 문서 임베딩을 생성하는 기법입니다. 문서 간의 의미 유사도를 계산하거나 다양한 자연어 처리 작업에서 활용될 수 있으며, 여러 변형이 존재합니다. 적절한 학습 방법과 하이퍼파라미터 설정으로 문서의 의미를 효과적으로 임베딩할 수 있습니다.