본문 바로가기

딥러닝/[딥 러닝을 이용한 자연어 처리 입문]딥러닝

원-핫 인코딩(One-Hot Encoding)

원-핫 인코딩을 위해서 단어 집합을 만들고 고유한 정수를 부여하는 정수 인코딩을 진행합니다

단어 집합 : 서로 다른 단어들의 집합으로 단어의 변형 형태도 다른 단어로 간주된다. 

 

1. 원-핫 인코딩(One-Hot Encoding)이란?

원-핫 인코딩은 단어 집합의 크기를 벡터의 차원으로 하고, 표현하고 싶은 단어의 인덱스에 1의 값을 부여하고, 다른 인덱스에는 0을 부여하는 단어의 벡터 표현 방식입니다.

 

첫째, 정수 인코딩을 통해 각 단어에 고유한 정수를 부여합니다.

둘째, 표현하고 싶은 단어의 고유한 정수를 인덱스로 간주하고 해당 위치에 1을 부여하고, 다른 단어의 인덱스의 위치에는 0을 부여합니다.

 

각 토큰에 대해서 고유한 정수를 부여합니다.

빈도수 순으로 단어를 정렬하여 정수를 부여하는 경우가 많습니다.

 

2. 케라스(Keras)를 이용한 원-핫 인코딩(One-Hot Encoding)

위와 같이 생성된 단어 집합(vocabulary)에 있는 단어들로만 구성된 텍스트가 있다면, texts_to_sequences()를 통해서 이를 정수 시퀀스로 변환가능합니다. 

케라스는 정수 인코딩 된 결과로부터 원-핫 인코딩을 수행하는 to_categorical()를 지원합니다.

 

 

3. 원-핫 인코딩(One-Hot Encoding)의 한계

이러한 표현 방식은 단어의 개수가 늘어날 수록, 벡터를 저장하기 위해 필요한 벡터의 차원이 늘어난다

또한 원-핫 벡터는 단어의 유사도를 표현하지 못한다.

 

이러한 단점을 해결하기 위해 단어의 잠재 의미를 반영하여 다차원 공간에 벡터화 하는 기법으로 크게 두 가지가 있습니다.

첫째는 카운트 기반의 벡터화 방법인 LSA(잠재 의미 분석), HAL 등이 있으며,

둘째는 예측 기반으로 벡터화하는 NNLM, RNNLM, Word2Vec, FastText 등이 있습니다.

그리고 카운트 기반과 예측 기반 두 가지 방법을 모두 사용하는 방법으로 GloVe라는 방법이 존재합니다.