티스토리 뷰

원-핫 인코딩이란?

단어 집합의 크기를 벡터의 차원으로 하고, 표현하고 싶은 단어의 인덱스에 1의 값을 부여하고, 다른 인덱스에는 0을 부여하는 단어의 벡터 표현 방식이다.

 

인간은 어떤 물체를 보더라도 숫자로 인식하지 않지만 컴퓨터는 모든 것을 숫자로 형태로 인식하게 된다. 그래서 이를 위해 자연어 처리에서는 문자를 숫자로 바꾸는 여러 가지 기법이 있는 데 그중 가장 기본적인 방법이 원-핫 인코딩(One-hot encoding)이다. 머신 러닝, 딥 러닝을 하기 위해서 반드시 알아야 하는 표현 방법이다.

 

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

(1) 각 단어에 고유한 인덱스를 부여한다.(정수 인코딩)
(2) 표현하고 싶은 단어의 인덱스의 위치에 1을 부여하고, 다른 단어의 인덱스의 위치에 0을 부여한다.

 

밑에 실습은 keras, tensorflow를 활용했다.

#  1 .str 변수에 변형하고 싶은 문장을 담는다.
str = "안녕하세요 저는 AI를 처음 학습하는 학생입니다. AI를 잘 배우고 싶습니다"
 
 #  2. 공백 기준으로 tokenizinng 작업을 수행한다.
 tokenizer = tokenizer()
 tokenizer.fit_on_text([str])
 print(tokenizer.word_index)
 
 
 #  3. 인덱스 결과를 기준으로 다시 문장의 값을 인코딩 하자.
 encode = tokenizer.texts_to_sequences([str])[0]
 
 
 # tokenizer에는 단어별 인덱스 값이 저장된 상태고, texts_to_sequences에 문장을 넣으면 문장의 내용을 인덱스 배열로 리턴하게 된다.
 
 # 위 데이터를 one-hot encoding 하면된다.
 # keras에서 제공하는 메소드가 있어 이것을 사용하면 된다.
 
 onehot = tf.keras.utils.to_categorical(encoded)
 print(onehot) # 2차원 백터 값으로 리턴하게 된다.

https://needjarvis.tistory.com/565 님꺼 참고
(아직 실습해보지 못해서 과정의 흐름이 궁금하여 이해를 위해 적어보았다. 직접 실습하면 실습한 내용으로 변경할 예정이다.)

 

 

 

 

원-핫 인코딩을 사용하는 이유?

복잡하고 긴 이름이나 내용을 특정 규칙에 따라 변형 또는 매핑하여 축소할 때 인코딩을 사용하면 효과적이다.
예를 들어  메일이나 메신저를 이용해 큰 파일이나 동영상을 전송할 때, 그냥 전송하는 것보다 압축한 파일을 전송하는 것이 빠르고 안정적이다.

그래서 이처럼, 원-핫 인코딩 활용해 복잡한 데이터를 그대로 사용하지 않고 컴퓨터가 처리하기 쉽게 숫자로 변형해 준다. 그러면 데이터 처리에 필요한 메모리 양을 줄일 수 있고 처리도 빠르게 할 수 있다.
또한, 대부분의 통계나 머신러닝 모델들은 입력 데이터로 숫자값을 기본으로 하여 특히, 범주형 데이터를 원-핫 인코딩해서 사용하는 경우가 많이 있다.

예시로  "안녕하세요 저는 AI를 처음 학습하는 학생입니다. AI를 잘 배우고 싶습니다" (범주형 데이터)를 원-핫 인코딩으로 변경할 경우,  
안녕하세요 =  [1,0,0,0,0,0] / 저는 = [0,1,0,0,0,0] / ... 등 이렇게 변환되어 사용될 수 있다.

이렇게 원-핫 인코딩 된 값들은 분석 모델의 인풋 데이터로 사용할 수 있다.

'ICT-AI-WEB 교육' 카테고리의 다른 글

Keras  (0) 2023.09.01
Python 기본 문법  (0) 2023.08.30
인공지능 딥러닝 알고리즘  (0) 2023.08.29
생성형(Generative) AI란?  (0) 2023.08.24
댓글