728x90
1.원핫 인코딩
범주형 데이터를 수치형 데이터로 변환하는 기법
각 토큰들을 수치형 데이터로 변환하여 벡터로 변환하여 모델이 이해할 수 있게 만든다.
keras의 Tokenizer로 토큰화하고 texts_to_sequences로 텍스트 데이터를 숫자 시퀀스로 변환한다음
to_categorical로 원핫인코딩을 수행한다.
from keras.preprocessing.text import Tokenizer
from keras.utils import to_categorical
text = "한겨울 밤의 하늘은 차갑고 맑았다. 별빛은 검은 캔버스 위에 수를 놓듯 흩어져 있었고, 달은 마치 은빛으로 도금된 보석처럼 찬란하게 빛났다. 바람은 나뭇가지 사이를 스치며 낮게 울렸고, 얼음처럼 차가운 공기는 숨을 쉴 때마다 뺨을 얼렸다. 하지만 이 고요한 순간 속에는 뭔가 설명할 수 없는 따스함이 있었다. 어쩌면 그것은 혼자가 아니라는 깨달음에서 오는 안도감이었을까?"
#정수인코딩
tokenizer = Tokenizer()
tokenizer.fit_on_texts([text])
print('단어 집합 :',tokenizer.word_index)
text2 = "별빛은 검은 캔버스 차갑고 맑았다"
encoded = tokenizer.texts_to_sequences([text2])[0]
print(encoded)
#원핫 인코딩
one_hot = to_categorical(encoded)
print(one_hot)
#결과
단어 집합 : {'한겨울': 1, '밤의': 2, '하늘은': 3, '차갑고': 4, '맑았다': 5, '별빛은': 6, '검은': 7, '캔버스': 8, '위에': 9, '수를': 10, '놓듯': 11, '흩어져': 12, '있었고': 13, '달은': 14, '마치': 15, '은빛으로': 16, '도금된': 17, '보석처럼': 18, '찬란하게': 19, '빛났다': 20, '바람은': 21, '나뭇가지': 22, '사이를': 23, '스치며': 24, '낮게': 25, '울렸고': 26, '얼음처럼': 27, '차가운': 28, '공기는': 29, '숨을': 30, '쉴': 31, '때 마다': 32, '뺨을': 33, '얼렸다': 34, '하지만': 35, '이': 36, '고요한': 37, '순간': 38, '속에는': 39, '뭔가': 40, '설명할': 41, '수': 42, '없는': 43, '따스함이': 44, '있었다': 45, '어쩌면': 46, '그것은': 47, '혼자가': 48, '아니라는': 49, '깨달음에서': 50, '오는': 51, '안도감이었을까': 52}
[6, 7, 8, 4, 5]
[[0. 0. 0. 0. 0. 0. 1. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 1. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 1.]
[0. 0. 0. 0. 1. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 1. 0. 0. 0.]]
2.원핫 인코딩 장단점
단순하고 직관적이지만, 범주가 많을 경우 고차원 문제를 발생시켜 메모리 소모가 커지고 계산 효율이 떨어진다.
또한, 범주 간의 내재된 관계나 유사성을 표현하지 못하는 단점이 있다.
반면, 원핫 인코딩은 비선형 모델에서 잘 작동하며, 데이터 간의 순서나 차이를 고려하지 않기 때문에 범주 간 관계를 암묵적으로 부여하지 않는다.이러한 문제를 해결하기 위해 임베딩 기법을 사용할 수 있으며, 이는 범주 간의 유사성을 벡터 공간에서 표현하여 고차원 문제를 줄이고 모델 성능을 개선할 수 있다.
728x90
'AI' 카테고리의 다른 글
[AI] 할루시네이션(Hallucination) (0) | 2024.12.26 |
---|---|
[AI] 정제(Cleaning), 어간 추출(Stemming), 불용어(StopWord) (2) | 2024.12.26 |
[AI] 정수 인코딩 (0) | 2024.12.25 |