GloVe, Swivel, ELMo는 모두 자연어 처리에 사용되는 임베딩 기법이다.
GloVe (Global Vectors for Word Representation):
- 2014년에 미국 스탠포드 대학에서 개발한 워드 임베딩 기법
- 기존의 카운트 기반의 LSA와, 예측 기반의 Word2Vec의 단점을 보완하는 것이 목적
- 카운트 기반과 예측 기반을 모두 사용
이전의 방법들은 카운트 정보를 이용하여 단어 간의 유사도를 계산했거나, 문맥을 예측하여 단어 벡터를 학습했다. 그러나 GloVe는 단어의 동시 등장 통계(co-occurrence statistics)를 이용하여 동시에 카운트 기반과 예측 기반 정보를 활용한다. 이를 통해 단어의 의미적인 정보를 잘 포착할 수 있게 되었다.
LSA는 주로 선형 관계를 가정하고 차원 축소를 수행하여 단어 간의 유사도를 계산한다. Word2Vec은 예측 기반 모델로서 선형 관계를 가정하지 않고 비선형적인 의미 관계를 잘 포착할 수 있다. 그러나 Word2Vec는 완전히 예측 기반으로 학습되기 때문에 희소한 단어에 대해서는 좋은 임베딩을 얻기 어렵다. GloVe는 이러한 단점을 보완하여 선형 및 비선형 관계를 모두 잘 표현할 수 있도록 설계되었다.
GloVe는 전체 말뭉치의 통계 정보를 이용하여 임베딩을 학습한다. 따라서 단어 간의 관계를 파악할 때 전체적인 통계적 특성을 이용할 수 있다. 이는 예측 기반 방법들이 지역적인 문맥 정보만을 이용하는 것과 대비된다. 이로 인해 GloVe는 더 넓은 맥락에서 단어 간의 의미적 관계를 파악할 수 있다.
from glove import Corpus, Glove
# 텍스트 데이터로부터 Corpus 객체 생성
corpus = Corpus()
corpus.fit(text_data, window=5) # text_data는 학습할 텍스트 데이터 (리스트 형태)
# GloVe 모델 학습
glove = Glove(no_components=100, learning_rate=0.05)
glove.fit(corpus.matrix, epochs=100, no_threads=4, verbose=True)
# queen과 woman의 유사도 계산
similarity = glove.similarity('queen', 'woman')
print("Similarity between 'queen' and 'woman':", similarity)
# queen에 가장 유사한 단어 탐색
similar_words = glove.most_similar('queen', number=5)
print("Words most similar to 'queen':", similar_words)
출력 결과
>>
Similarity between 'queen' and 'woman': 0.6989564563629804
Words most similar to 'queen': [('king', 0.8183949794282449), ('princess', 0.7699343615796023), ('throne', 0.7551424634225171), ('monarch', 0.7397882930868205), ('prince', 0.7389627403967873)]
Swivel(Submatrix-Wise Vector Embedding Leamer):
- 2016년 구글에서 발표한 행렬 분해 기반 워드 임베딩 기법
- GloVe가 단어-문맥 행렬을 분해하는 반면, Swivel은 PMI 행렬을 분해하여 PMI의 단점을 커버할 수 있도록 설계되었다.
Swivel은 GloVe와 같이 대규모 텍스트 데이터를 이용하여 단어의 분산 표현을 학습하는데 사용된다. GloVe와 달리 행렬 분해(Matrix Factorization) 방식을 기반으로 하며, 특히 행렬 분해의 한 형태인 잠재의미분석(Latent Semantic Analysis, LSA)을 확장하여 개발되었다.
Swivel의 주요 특징은 다음과 같다.
1. 행렬 분해 기반: Swivel은 말뭉치의 공변량(co-occurrence) 행렬을 생성하고, 이를 저차원의 단어 벡터 행렬로 분해한다. 이를 통해 단어의 의미 정보를 포착하고, 단어 간의 유사도를 계산할 수 있습니다.
2. 확률적인 잠재의미분석: Swivel은 잠재의미분석(LSA)의 확률적인 버전으로 볼 수 있다. 잠재의미분석과 유사하게 특이값 분해(Singular Value Decomposition, SVD)를 사용하여 차원 축소를 수행하며, 이를 통해 잠재적인 의미 요소를 추출한다.
3. 동시 등장 정보 활용: Swivel은 단어 간의 동시 등장(co-occurrence) 통계 정보를 활용하여 학습한다. 말뭉치 내에서 동시에 등장하는 단어 쌍의 빈도를 계산하여 단어 간의 관계를 파악한다.
Swivel은 주로 대규모 텍스트 데이터에 적용되며, 예를 들어 웹 크롤링 데이터나 대용량 문서 코퍼스 등에 적용할 수 있다.
ELMo (Embeddings from Language Models)
- 2018년에 발표한 워드 임베딩 기법으로 큰 특징은 사전 훈련된 언어 모델을 기반으로 한다는 것이다.
- 주어진 텍스트의 자우 문맥을 사용하여 문맥을 반영한 워드 임베딩을 생성한다.
ElMo는 양방향 LSTM(Language Model)을 기반으로 하며, 입력 문장의 각 단어를 문맥 정보를 고려한 풍부한 표현으로 임베딩한다.
ElMo의 주요 특징은 다음과 같다.
1. 양방향 언어 모델: ElMo는 LSTM을 이용한 양방향 언어 모델을 사용하여 단어 임베딩을 생성한다. 이는 각 단어를 문맥 정보를 고려한 양방향으로 처리하여 좀 더 풍부한 표현을 얻을 수 있도록 한다.
2. 층별 표현: ElMo는 LSTM의 여러 층으로 구성되며, 각 층에서는 단어의 표현을 다른 방식으로 학습한다. 이를 통해 단어의 다양한 어순 및 문맥 정보를 반영한 다양한 표현을 얻을 수 있다.
3. 사전 학습된 언어 모델 활용: ElMo는 대규모 텍스트 데이터에 대해 사전 학습된 언어 모델을 사용합니다. 대표적으로 양방향 LSTM을 이용한 언어 모델인 ELMo는 대용량의 말뭉치를 이용하여 사전에 학습되며, 이를 통해 단어의 문맥적 표현을 임베딩합니다.
ElMo는 단어 임베딩을 생성하는데 있어서 단어의 문맥적 의미를 포착할 수 있어 다양한 자연어 처리 작업에 활용될 수 있습니다. 예를 들어, 문장 분류, 개체명 인식, 의미론적 유사도 측정 등의 작업에서 ElMo를 사용하여 단어의 문맥 정보를 효과적으로 활용할 수 있습니다.
다시 말해, GloVe는 빈도와 동시 발생 통계를 사용하여 단어 간 의미 관계를 파악하고, Swivel은 주변 문맥을 고려하여 관련성을 분석하며, ELMo는 사전 훈련된 언어 모델을 활용하여 문맥을 반영한 단어 임베딩을 생성한다. 각각의 모델은 자체적인 특징을 고려하여 자연어 처리 작업에 유용하게 활용된다.
'자연어 처리(NLP) 공부' 카테고리의 다른 글
| NLP, NLU, NLG (0) | 2023.05.26 |
|---|---|
| [NLP 스터디] Scaled Dot-Product Attention (0) | 2023.05.22 |
| [NLP 스터디] Topic Modeling (1) | 2023.05.10 |
| [NLP 스터디] FastText, *서브워드 (0) | 2023.05.10 |
| 희소 표현 VS. 밀집 표현 (0) | 2023.05.08 |