-
원-핫 인코딩 (One-hot Encoding)Natural Language Processing/딥 러닝을 이용한 자연어 처리 입문 2021. 5. 18. 14:18반응형
https://wikidocs.net/22647 참고하여 공부한 내용 정리
08) 원-핫 인코딩 (One-hot Encoding)
- 단어 집합(vocabulary): 서로 다른 단어들의 집합, 여기에서 book과 books를 다른 단어로 간주함
원-핫 인코딩을 위해 먼저 해야하는 일은 단어 집합을 만드는 일. 그리고 단어 집합에 고유한 숫자를 부여하는 정수 인코딩을 진행함
1. 원-핫 인코딩(One-hot Encoding) 이란?
원-핫 인코딩은 단어 집합의 크기를 벡터의 차원으로 하고 표현하고 싶은 단어의 인덱스에 1 값을 부여하고 나머지 인덱스에 0을 부여하는 단어의 벡터 표현 방식임
원-핫 인코딩 과정
(1) 각 단어에 고유한 인덱스 부여(정수 인코딩)
(2) 표현하고 싶은 단어의 인덱스 위치에 1 부여하고 나머지 인덱스에 0 부여
from konlpy.tag import Okt okt=Okt() token=okt.morphs('나는 자연어 처리를 배운다') print(token)
['나', '는', '자연어', '처리', '를', '배운다']
Okt 형태소 분석기를 이용해 문장에 대해 토큰화 수행
word2index={} for voca in token: if voca not in word2index.keys(): word2index[voca]=len(word2index) print(word2index)
{'나': 0, '는': 1, '자연어': 2, '처리': 3, '를': 4, '배운다': 5}
각 토큰에 대해 고유한 index 부여. 지금은 문장이 짧아 단어의 빈도수 고려를 안 하지만 빈도수 순서로 단어를 정렬하여 고유한 인덱스를 부여하기도 함(정수 인코딩 챕터)
def one_hot_encoding(word, word2index): one_hot_vector=[0]*(len(word2index)) index=word2index[word] one_hot_vector[index]=1 return one_hot_vector
토큰을 입력하면 해당 토큰에 대한 원-핫 벡터를 만들어 냄
one_hot_encoding('자연어', word2index)
[0, 0, 1, 0, 0, 0]
2. 케라스 이용한 원-핫 인코딩
케라스에서는 원-핫 인코딩을 수행하는
to_categorical()
을 지원함from tensorflow.keras.preprocessing.text import Tokenizer from tensorflow.keras.utils import to_categorical text="나랑 점심 먹으러 갈래 점심 메뉴는 햄버거 갈래 갈래 햄버거 최고야" t=Tokenizer() t.fit_on_texts([text]) print(t.word_index) # 각 단어에 대한 인코딩 결과 출력
{'갈래': 1, '점심': 2, '햄버거': 3, '나랑': 4, '먹으러': 5, '메뉴는': 6, '최고야': 7}
단어 집합 출력
sub_text="점심 먹으러 갈래 메뉴는 햄버거 최고야" encoded=t.texts_to_sequences([sub_text])[0] print(encoded)
[2, 5, 1, 6, 3, 7]
texts_to_sequences()
를 통해 단어 텍스트를 정수 시퀀스로 변환. 정수 인코딩 결과임. 이 결과를 이용해 원-핫 인코딩 진행. 케라스는 정수 인코딩 결과로부터 원-핫 인코딩을 수행하는to_categorical()
을 지원함one_hot=to_categorical(encoded) print(one_hot)
[[0. 0. 1. 0. 0. 0. 0. 0.] [0. 0. 0. 0. 0. 1. 0. 0.] [0. 1. 0. 0. 0. 0. 0. 0.] [0. 0. 0. 0. 0. 0. 1. 0.] [0. 0. 0. 1. 0. 0. 0. 0.] [0. 0. 0. 0. 0. 0. 0. 1.]]
3. 원-핫 인코딩 한계
- 원-핫 인코딩의 표현 방식은 단어의 개수가 늘어날 수록 벡터의 차원이 커지는 단점이 있음
- 원-핫 벡터는 단어의 유사도를 표현하지 못하는 단점이 있음
=> 이러한 단점을 해결하기 위해 단어의 잠재 의미를 반영하여 다차원 공간에 벡화하는 기법으로 크게 두 가지가 있음. 1) 카운트 기반의 벡터화 방법인 LSA, HAL 등이 있음 2) 예측 기반의 벡터화 방법인 NNLM, RNNLM, Word2Vec, FastText 등이 있음. 카운트 기반과 예측 기반 두 가지 방법을 모두 사용하는 방법으로 GloVe가 있음
반응형'Natural Language Processing > 딥 러닝을 이용한 자연어 처리 입문' 카테고리의 다른 글
한국어 전처리 패키지 (0) 2021.05.18 패딩(Padding) (0) 2021.05.18 정수 인코딩(Integer Encoding) (0) 2021.05.18 정규 표현식(Regular Expression) (0) 2021.05.17 불용어(Stopwords) (0) 2021.05.17