-
[3월 1주차-3/7(3)]텍스트 전처리4- 원-핫 인코딩, 데이터의 분리Why Not SW CAMP 5기/수업 기록 2025. 3. 7. 14:58
✅텍스트 전처리
- 토큰화(tokenization)
- 정제(cleaning) and 정규화(normalization)
- 어간 추출 and 표제어 추출
- 불용어(stopword) 제거
- 정규 표현식(regular expression)
- 정수 인코딩(integer encoding)
- 패딩(padding)
- 원-핫 인코딩(one-hot encoding)
- 데이터의 분리(splitting data)
원 핫 인코딩(One-Hot Encoding) 및 데이터 분리(Splitting Data)
자연어 처리를 수행할 때, 텍스트 데이터를 수치화하는 여러 방법 중 하나가 원 핫 인코딩(One-Hot Encoding)입니다. 또한 지도 학습에서는 데이터를 훈련 데이터와 테스트 데이터로 분리하는 과정이 필요합니다. 이 글에서는 원 핫 인코딩과 데이터 분리 방법을 설명합니다.
1. 원 핫 인코딩(One-Hot Encoding)
(1) 원 핫 인코딩이란?
원 핫 인코딩은 표현하고 싶은 단어의 인덱스 위치에 1을 부여하고, 다른 인덱스에는 0을 부여하는 방식입니다.
(2) 원 핫 인코딩의 한계
- 차원의 증가: 단어 개수가 많아질수록 벡터의 차원이 커지며, 많은 메모리 공간이 필요합니다.
- 유사도 표현 불가능: 단어 간의 의미적 관계를 반영할 수 없습니다. 예를 들어, '강아지'와 '고양이'는 의미적으로 가깝지만 원 핫 인코딩에서는 전혀 다른 벡터로 표현됩니다.
2. 원 핫 인코딩 구현하기
(1) Keras를 활용한 원 핫 인코딩
Keras의 Tokenizer를 사용하면 손쉽게 원 핫 인코딩을 수행할 수 있습니다.
from tensorflow.keras.preprocessing.text import Tokenizer from tensorflow.keras.utils import to_categorical text = '나랑 점심 먹으러 갈래 점심 메뉴는 햄버거 갈래 갈래 햄버거 최고야' tokenizer = Tokenizer() tokenizer.fit_on_texts([text]) print(tokenizer.word_index) # {'갈래': 1, '점심': 2, '햄버거': 3, '나랑': 4, '먹으러': 5, '메뉴는': 6, '최고야': 7} sub_text = "점심 먹으러 갈래 메뉴는 햄버거 최고야" encoded = tokenizer.texts_to_sequences([sub_text])[0] print(encoded) # [2, 5, 1, 6, 3, 7] one_hot = to_categorical(encoded) print(one_hot)출력 결과:
array([[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. 데이터 분리 (Splitting Data)
지도 학습(Supervised Learning)에서는 데이터를 훈련 데이터(training set)와 테스트 데이터(test set)로 나누어 모델의 학습 및 평가를 수행합니다.
(1) X와 y 분리하기
zip() 함수 사용
X, y = zip(['a', 1], ['b', 2], ['c', 3]) print(X) # ('a', 'b', 'c') print(y) # (1, 2, 3)pandas를 이용한 분리
import pandas as pd values = [['dfdfdff', 1], ['qwqwqwqwq', 0], ['rtrttrtr', 0], ['hjhjhjhj', 1]] columns = ['qqq', 'ddd'] df = pd.DataFrame(values, columns=columns) X = df['qqq'] y = df['ddd']numpy를 이용한 분리
import numpy as np np_array = np.arange(0, 16).reshape((4, 4)) X = np_array[:, :-1] # 마지막 열 제외 y = np_array[:, -1] # 마지막 열(2) 훈련 데이터와 테스트 데이터 분리
train_test_split() 사용
from sklearn.model_selection import train_test_split X, y = np.arange(10).reshape((5, 2)), range(5) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1234)출력 예시:
X_train: array([[2, 3], [4, 5], [6, 7]]) X_test: array([[8, 9], [0, 1]]) y_train: [1, 2, 3] y_test: [4, 0]📌 random_state 값을 변경하면 데이터 분할 결과가 달라집니다.
4. 마무리
원 핫 인코딩은 단어를 수치화하는 대표적인 방법이며, 머신러닝 모델 학습을 위해서는 데이터를 적절히 분리하는 과정이 필요합니다. 데이터의 특성을 고려하여 적절한 인코딩 및 데이터 분리 방법을 선택해야 합니다.
'Why Not SW CAMP 5기 > 수업 기록' 카테고리의 다른 글
[3월 2주차-3/11(2)]🧠 언어 모델 (Language Model) (0) 2025.03.11 [3월 2주차-3/11(1)]🛠 한국어 전처리 패키지 (5) 2025.03.11 [3월 1주차-3/7(2)]텍스트 전처리3-정수 인코딩, 패딩 (0) 2025.03.07 [3월 1주차-3/7(1)]텍스트 전처리2-정규 표현식 (0) 2025.03.07 [3월 1주차-3/6(2)]텍스트 전처리1-토큰화, 정제 및 정규화, 표제어 및 어간 추출, 불용어 제거 (6) 2025.03.06