원-핫 인코딩(One-Hot Encoding)이란 자연어 처리에서 문자를 숫자로 바꾸는 기법들 중 하나이다
text = "안녕 클레오파트라 세상에서 제일 가는 포테이토칩 안녕 안녕 클레오파트라 세상에서 제일 가는"
위와 같은 문자열을 인코딩을 하려면
token = Tokenizer()
token.fit_on_texts([text])
print(f"{token.word_index}\n")#토큰화된 단어와 해당하는 인덱스
=> {'안녕': 1, '클레오파트라': 2, '세상에서': 3, '제일': 4, '가는': 5, '포테이토칩': 6}
위와 같이 토큰화를 선행한다
x = token.texts_to_sequences([text])#토큰의 인덱스로만 이루어진 리스트
print(text)#원본 텍스트 출력
print(f"{x}\n")#토큰의 인덱스로만 이루어진 리스트 출력
=> 안녕 클레오파트라 세상에서 제일 가는 포테이토칩 안녕 안녕 클레오파트라 세상에서 제일 가는
=> [[1, 2, 3, 4, 5, 6, 1, 1, 2, 3, 4, 5]]
이 토큰들의 인덱스 만을 출력하면 위와 같은 결과가 나온다
word_size = len(token.word_index)+1#토큰화된 단어의 개수는 6개 이지만 len을 사용하면 5가 나오므로 +1을 해준다
x = to_categorical(x, num_classes=word_size)#원핫인코딩
print(f"{x}\n")#원핫인코딩된 리스트 출력
=>[[[0. 1. 0. 0. 0. 0. 0.] #1번 단어
[0. 0. 1. 0. 0. 0. 0.] #2번단어
[0. 0. 0. 1. 0. 0. 0.] #3번단어
[0. 0. 0. 0. 1. 0. 0.] #4번단어
[0. 0. 0. 0. 0. 1. 0.] #5번단어
[0. 0. 0. 0. 0. 0. 1.] #6번단어
[0. 1. 0. 0. 0. 0. 0.]
[0. 1. 0. 0. 0. 0. 0.]
[0. 0. 1. 0. 0. 0. 0.]
[0. 0. 0. 1. 0. 0. 0.]
[0. 0. 0. 0. 1. 0. 0.]
[0. 0. 0. 0. 0. 1. 0.]]]
이후 원-핫 인코딩을 적용시키면 위와 같이 변형된다
원-핫 인코딩의 구조는
인코딩된 단어의 수 +1 길이의 리스트에
해당하는 단어를 제외한 요소에 0 해당하는 단어의 위치에 1을 기입한다
첫자리는 0을 기입한다 결과에는 영향을 미치진 않는다
'AI > 딥러닝' 카테고리의 다른 글
MSE와 MAE (0) | 2024.12.23 |
---|---|
MLOps (0) | 2024.12.15 |
배치 사이즈(Batch Size)와 에폭(Epoch) (0) | 2024.11.27 |