본문 바로가기

MAD Learning/NLP

Encoding VS Embedding

개념을 보고 직접 사용해 보고를 반복을 하다 보면, 처음에는 아무생각이 없다가 점점 모호해지는 개념들이 몇몇 있다. 나에게는 encoding과 embedding이 그러한 단어 중 하나다. 각각의 단어는 '컴퓨터가 이해할 수 있는 단어로 변환'을 위해 사용이 되는데, 그럼 차이점은 뭘까?

그 정답은 '사용의 목적''사용할 대상'에 있었다.


 Encoding 

Encoding은 주어진 정보를 특정한 형식으로 변환하는 과정이다. 이때 특정한 형식은 컴퓨터가 이해할 수 있는 형식(0과 1)을 의미한다. 또한 이때 사용할 수 있는 데이터들은 여러 정형 데이터 등을 의미하는데, 그 종류는 UTF-8, ASCII, CP949 등이 있다. 


 Embedding 

자연어 처리에서 하는 인코딩을 통칭한다면 할 수 있으므로, 자연어를 컴퓨터가 이해할 수 있도록하는 방식이다. 텍스트를 vectorizing할 시에 차원이 기하급수적으로 많아지기에, 이때 많아진 차원을 축소 시키는 것에 초점을 두고 있다. 하지만 무지성 차원 축소가 아닌 해당 데이터의 특징의 손실을 최소화하는 방면으로 학습을 한다. 이러한 특징 때문에 유사한 문장 혹은 단어는 비슷한 벡터로 표현이 된다. 이를 표현한 딥러닝 기술로는 Word2Vec, GloVe, FastText 등이 있다. 


내가 헷갈렸던 부분은 One-hot Encoding (Word) Embedding? 이다. 아래는 확연한 차이를 알 수 있는 예시를 가지고 왔다.

출처 : .tensorflow.org

왼쪽의 데이터들은 각각의 단어를 One-Hot Encoding 방법으로 구현한 것이다. 그저 각 단어를 0과 1로 구분을 하는 encoding 방식이다. 따라서 컴퓨터는 이를 이해할 수 있게 되지만 이러한 단어가 100개, 1000개 혹은 그 이상이 된다고 하면 피처의 수는 그와 동일하게 기하학적으로 커져간다. 이는 차원의 증감을 전혀 고려하지 않은 방식이다. 

 

 

 

그러면 Embedding 방식을 확인해 보자. 

출처 : .tensorflow.org

One-hot encoding과 비교를 해보면 확연한 차이를 느낄 수 있다. 개념 정리에서도 말했다싶이 'Word Embedding'의 초점은 차원 축소(dimensionality reduction)에 있다. 이때 차원의 크기는 우리가 정할 수 있는데, 그렇기에 One-hot Encoding을 사용하였던 데이터를 Embedding 시킬 경우 피쳐는 효과적으로 축소시켜 기계의 효율적인 학습이 가능하다.