728x90
임베딩(Embedding)은 사람이 사용하는 자연어를 기계가 이해할 수 있는 벡터(숫자의 나열)로 바꾸는 것을 말한다.

 

 

임베딩은 자연어 처리에서 단어나 문장으로 이루어진 텍스트 데이터를 수치화하는 방법이다. 텍스트 데이터는 컴퓨터가 직접 이해하기 어렵기 때문에 이를 수치 데이터로 변환해야 다양한 기계 학습 모델에서 활용할 수 있다.

 

각 단어나 문장을 고정된 크기의 벡터로 나타낸다. 유사한 의미를 가진 단어들은 비슷한 벡터 공간상에서 근접하게 된다.

일반적으로 임베딩은 사전 훈련된 워드 임베딩 모델을 사용하거나 모델 훈련 과정에서 학습된 임베딩을 사용한다.

 

대표적인 임베딩 모델로는 Word2Vec, GloVe, FastText가 있다. 이러한 임베딩 모델들은 대규모의 텍스트 데이터에서 단어들의 관계를 학습하고, 각 단어를 고정된 크기의 벡터로 변환한다.

 

from gensim.models import Word2Vec

sentences = [["apple", "banana"], ["orange", "grape"]]
model = Word2Vec(sentences, min_count=1)

# min_count: 매개변수는 단어가 최소한 몇 번 이상 나와야 학습에 포함되는지를 설정

print(model.wv["apple"])   # 임베딩된 벡터 출력
print(model.wv.most_similar("apple"))   # 가장 유사한 단어 출력
단어 1dim 2dim 3dim 4dim
apple 0.236 0.027 -0.007 -0.150
banana 0.107 -0.265 -0.172 0.132
orange -0.101 0.029 0.046 -0.182
grape -0.111 0.208 0.298 -0.089

 

단어 벡터들 사이의 유사도 계산하기

 

단어 벡터 사이의 유사도를 계산할 때는 벡터 간의 코사인 유사도(cosine similarity)를 주로 사용한다.

코사인 유사도는 두 벡터 간의 각도가 얼마나 작은지를 나타내는 지표로

벡터가 서로 가리키는 방향이 유사할수록 값이 1에 가까워지고, 반대 방향일수록 값이 -1에 가까워진다.

"apple"과 "banana"의 유사도는 다음과 같이 계산할 수 있다.

 

similarity(apple, banana) = cosine_similarity([2.5, 1.2, -0.5, 0.1], [1.7, 3.0, -0.8, -0.2])

계산하면 0.8014가 나오는데, 1에 가까우므로 "apple"과 "banana"이 매우 유사하다는 것을 의미한다.

  apple banana orange grape
apple 1,0000 0.8014 0.4472 0.2811
banana 0.8014 1.0000 0.3612 0.1028
orange 0.4472 0.3612 1.0000 0.4756
grape 0.2811 0.1028 0.4756 1.0000

 

Word2Vec?

 

Word2Vec은 2013년에 구글에서 발표한 자연어 처리 기술로, 신경망 모델을 사용하여 방대한 텍스트 코퍼스에서 단어 연관을 학습하는 알고리즘이다.

 

Word2Vec이 특히 주목 받게 된 이유는 효율성 부분때문인데, 간단한 인공신경망 모형을 기반으로 학습 데이터의 규모가 10억 단어 이상으로 커져도 낮은 계산량을 유지할 수 있다.

 

Word2Vec에는 CBoWSkip-Gram이라는 두 가지 학습 방법이 있다.

 

1. CBoW(Continuous Bag of Words):

변에 있는 단어들로 중간에 있는 단어들을 예측하는 방법.

 

예측해야 하는 단어를 중심 단어(center word)라 하고, 예측에 사용되는 단어들을 주변 단어(context word)라고 한다.

중심 단어를 예측하기 위해서는 앞뒤로 몇 개의 단어를 볼지 결정하게 되는데, 그 크기를 윈도우(window)라고 하며, 학습을 위한 데이터 셋을 만들기 위해 슬라이딩 윈도우(sliding window) 사용한다.

 

Word2Vec의 학습은 주변 단어 크기에 따라 말뭉치(corpus)를 슬라이딩하면서 중심 단어의 주변 단어들을 보고 각 단어의 벡터 값을 업데이트 해나가는 방식이다. 이 때, 윈도우 내에 등장하지 않는 단어에 해당하는 벡터는 중심 단어 벡터와 멀어지게끔, 등장하는 주변 단어 벡터는 중심 단어 벡터와 가까워지도록 값을 변경해 나간다.

 

CBoW의 인공신경망 구조

 

2. Skip-Gram:

Skip-Gram의 원리는 중심 단어를 보고 주변 단어가 무엇인지 예측하는 것이다.

Skip-Gram과 CBoW의 유사한 두 방식을 두고 여러 논문에서 성능 비교를 진행하였고, 그 결과 전반적으로 Skip-Gram이 CBoW보다 좋은 성능을 보인다고 알려져 있다.

 

Skip-Gram의 인공신경망 구조

Word2Vec의 한계점

 

1) 단어의 형태학적 특성을 반영하지 못한다.

- ‘teach’, ‘teacher’, ‘teachers’와 같이 세 단어는 의미적으로 유사한 단어이지만, 각 단어를 개별 단어(unique word)로 처리하여 세 단어 모두 벡터 값이 다르게 구성된다.

 

2) 분포 가설을 기반으로 학습하는 만큼 단어 빈도 수의 영향을 많이 받아 희소한 단어(rare word)를 임베딩하기 어렵다.

 

3) OOV(Out of Vocabulary)의 처리가 어렵다.

- OOV는 말 그대로 사전에 없는 단어이며, 단어 단위로 사전을 구성하여 학습하는 Word2Vec의 특성 상 새로운 단어가 등장하면 데이터 전체를 다시 학습시켜야 한다는 문제가 있다.

 

(참고: https://www.goldenplanet.co.kr/our_contents/blog?number=859&pn=1) 

 

728x90

+ Recent posts