본문 바로가기

[NLP]

[NLP] 원-핫 인코딩

컴퓨터 또는 기계는 문자보다 숫자를 더 잘 처리할 수 있기 때문에

문자를 숫자로 바꾸는 여러가지 기법에 대해 알아보겠습니다.

 

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

단어를 표현하는 가장 기본적인 표현 방법입니다.

단어 집합의 크기를 벡터의 차원으로 하고, 
표현하고 싶은 단어의 인덱스에 1의 값을 부여하고, 
다른 인덱스에는 0을 부여하는 단어의 벡터 표현 방식입니다. 
이렇게 표현된 벡터를 원-핫 벡터(One-Hot vector)라고 합니다.

 

단어 집합은 서로 다른 단어들의 집합입니다. - 중복 x

원-핫 인코딩을 하기 위해 단어집합을 만드는 일이 우선인데 

이 단어 집합에 고유한 정수르르 부여하는 정수 인코딩이 있습니다.

 

원-핫 인코딩을 두 가지 과정으로 정리

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

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

다른단어의 인덱스 위치에는 0을 부여합니다.

1. 케라스를 이용한 원-핫 인코딩

from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.utils import to_categorical

 

tokenizer = Tokenizer()
tokenizer.fit_on_texts([text])

 

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

to_categorical()

[[0. 0. 1. 0. 0. 0. 0. 0.] # 인덱스 2의 원-핫 벡터
 [0. 0. 0. 0. 0. 1. 0. 0.] # 인덱스 5의 원-핫 벡터
 [0. 1. 0. 0. 0. 0. 0. 0.] # 인덱스 1의 원-핫 벡터
 [0. 0. 0. 0. 0. 0. 1. 0.] # 인덱스 6의 원-핫 벡터
 [0. 0. 0. 1. 0. 0. 0. 0.] # 인덱스 3의 원-핫 벡터
 [0. 0. 0. 0. 0. 0. 0. 1.]] # 인덱스 7의 원-핫 벡터

 

2. 원-핫 인코딩의 한계

 

이러한 표현 방식은 단어의 개수가 늘어날 수록,

벡터를 저장하기 위해 필요한 공간이 계속 늘어난다는 단점이 있으며

이러한 표현을 벡터의 차원이 늘어난다고 표현합니다.

 

단어가 1000개인 코퍼스를 가지고 원핫 벡터를 만들면

모든 단어 각각은 모두 1000개의 차원을 가진 벡터가 된다는 것인데

이는 저장공간측면에서 매우 비효율적이며, 단어의 유사도를 전혀 표현하지 못합니다.

 

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

첫째는 카운트 기반의 벡터화 방법인 LSA(잠재 의미 분석), HAL 등이 있으며, 
둘째는 예측 기반으로 벡터화하는 NNLM, RNNLM, Word2Vec, FastText 등이 있습니다. 

 

 

 

'[NLP]' 카테고리의 다른 글

[NLP] 한국어 전처리 패키지  (0) 2023.03.27
[NLP] 패딩(padding)  (0) 2023.03.27
[NLP] 정수 인코딩  (0) 2023.03.27
[NLP] 정규 표현식(Regular Expression)  (0) 2023.03.27
[NLP] 표제어 추출 and 어간 추출  (0) 2023.03.27