공부내용 참고사이트 : 위키독스 딥러닝을 이용한 자연어 처리 입문
https://wikidocs.net/21698
컴퓨터는 텍스트보다 숫자를 더 잘 처리한다.
그렇기 때문에 텍스트 전처리와 토큰화를 진행했다면 이를 인덱스로 맵핑(mapping)시키는 작업이 필요하다.
가장 기본적인 인코딩 방법으로는 단어마다 고유의 정수를 매핑하는 정수 인코딩이 있다.
정수인코딩을 완료하면, 각 정수를 고유한 벡터로 바꾸는 작업이 필요한데 이 작업을 임베딩(Embedding)이라고 한다. 단어 벡터를 얻는 방법은 크게 원-핫 인코딩과 워드 임베딩이 있는데, 주로 워드 임베딩이 사용된다.
*원본 문장 -> 전처리, 토큰화 -> 단어집합 만들기 -> 정수 인코딩(숫자) -> 원 핫 인코딩(벡터)
단어 벡터화 방법 중 하나인 원-핫 인코딩에 대해서 알아보자.
*원 핫 인코딩 : 단어 집합의 크기를 벡터의 차원으로 하고, 표현하고 싶은 단어의 인덱스에 1, 나머지 인덱스에는 0을 부여하는 단어의 벡터 표현 방식
1. 케라스(Keras)를 이용한 원-핫 인코딩(One-Hot Encoding)
케라스는 정수 인코딩 된 결과로부터 원-핫 인코딩을 수행하는 to_categoricat()을 지원한다.
인코딩을 하기 위해서는 먼저 단어집합(vocabulary)을 만들어야 한다.
*단어 집합 : 텍스트의 모든 단어를 중복 없이 모아 놓은 집합
# 빈도 순 단어집합 만들기
text_for_vocab = "아 진짜 졸려. 커피 두 잔 마셨는데도 졸려 그럼 어떻게 해야해 살려줘"
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.utils import to_categorical
tokenizer = Tokenizer()
tokenizer.fit_on_texts([text])
word_to_index = tokenizer.word_index
print("단어집합 :", word_to_index)
> 단어집합 : {'졸려': 1, '아': 2, '진짜': 3, '커피': 4, '두': 5, '잔': 6, '마셨는데도': 7, '그럼': 8, '어떻게': 9, '해야해': 10, '살려줘': 11}
# 정수 인코딩
sub_text = "졸려도 커피 마시면서 일했어. 살려줘 한 잔으로는 성에 안차서 두 잔 마셨어."
encoded = tokenizer.texts_to_sequences([sub_text])[0]
print(encoded)
> [4, 11, 5, 6]
# 원핫인코딩
one_hot = to_categorical(encoded)
print(one_hot)
> [[0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1.]
[0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0.]]
2. 원-핫 인코딩의 한계
1) 원 핫 벡터는 단어 집합의 크기가 곧 벡터의 차원 수가 된다. 그렇기 때문에 단어 집합(개수)가 늘어날 수록, 벡터를 저장하기 위해 필요한 공간(벡터의 차원)이 계속 늘어나는 단점이 있다.
ex)1000개 단어 = 단어 1개당 1000개의 차원을 가진 벡터 (하나의 값만 1이고, 999개는 0의 값을 가진 벡터)
2) 단어의 유사도를 표현하지 못한다. 단어의 유사성을 알지 못하는 단점은 검색 시스템 등에서는 문제가 된다.
*단어간 유사성을 알기 위해서는 단어의 잠재 의미를 반영해 다차원 공간에 벡터화 하는 기법을 사용하면 된다.
1) 카운트 기반 벡터화 방법 - LSA(잠재 의미 분석), HAL 등
2) 예측 기반 벡터화 방법 - NNLM, RNNLM, Word2Vec, FastText 등
3) 둘 다 사용 - GloVe
'데이터마이닝 > 텍스트마이닝' 카테고리의 다른 글
[형태소분석기]윈도우에서 khaiii(카카오분석기) 실행하기 (0) | 2022.05.13 |
---|---|
[텍스트 전처리] 정수 인코딩(Encoding) (0) | 2021.12.20 |
[텍스트 전처리] 정제, 정규화 (0) | 2021.12.15 |
자연어 처리 관련 라이브러리 및 패키지 (0) | 2021.12.15 |
텍스트 마이닝 분석 절차 (0) | 2021.12.08 |