신경망에서의 벡터화: 초보자를 위한 가이드
Source: Dev.to
번역을 진행하려면 번역하고자 하는 본문 텍스트를 제공해 주세요. 현재는 링크만 포함되어 있어 번역할 내용이 없습니다. 텍스트를 알려주시면 바로 한국어로 번역해 드리겠습니다.
벡터화란 무엇인가?
- Vector: 데이터를 순서가 있는 숫자 목록으로 표현한 수학적 표현.
- Vectorization: 원시 데이터(단어, 픽셀, 소리 등)를 벡터로 변환하여 신경망이 빠른 연산을 수행하고 패턴을 학습할 수 있게 함.
데이터를 벡터로 표현함으로써 컴퓨터는 느린 루프를 효율적인 배열 연산으로 대체할 수 있어 학습 및 추론 속도가 빨라집니다.
실제 활용 사례
- 검색 엔진 – 쿼리와 문서를 벡터화하여 관련성을 비교합니다.
- 스마트폰 어시스턴트 – 음성을 벡터화하여 Siri/Google Assistant가 명령을 이해할 수 있게 합니다.
- 언어 번역 – 단어를 의미를 포착하는 벡터에 매핑합니다.
- 교통 경로 탐색 – 지도 데이터를 벡터화하여 최적 경로를 계산합니다.
- 전자 상거래 – 제품 및 사용자 행동을 벡터화하여 추천 시스템에 활용합니다.
- 헬스케어 – 의료 스캔을 벡터화하여 이상 탐지를 수행합니다.
- 금융 – 거래를 벡터화하여 사기를 감지합니다.
- 스팸 필터 – 이메일을 벡터화하여 스팸과 정상 메일을 구분합니다.
- 자율 주행 – 센서 데이터를 벡터화하여 차선 유지 및 충돌 경고를 제공합니다.
작동 원리
텍스트 데이터
각 단어는 벡터에 매핑됩니다(예: “king” → [0.25, 0.89, 0.12,…]). 일반적인 기법으로는 Bag‑of‑Words, TF‑IDF, 그리고 밀집 임베딩이 있습니다.
이미지 데이터
픽셀(RGB 값)은 벡터의 숫자가 됩니다. 64×64 크기에 색상 채널이 3개인 이미지는 길이 12 288인 벡터입니다.
연산
개별 요소를 반복하는 대신, 수학 연산을 전체 벡터에 한 번에 적용합니다:
[1, 2, 3] + [4, 5, 6] = [5, 7, 9]
장점
- 속도 – 더 빠른 학습 및 추론.
- 단순성 – 명시적 루프 없이 깔끔한 코드.
- 확장성 – 대규모 데이터셋을 효율적으로 처리.
- 정확도 – 텍스트의 의미와 이미지의 시각적 패턴을 포착.
파이썬 예제
import numpy as np
# 두 개의 간단한 벡터
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
# 벡터화된 덧셈
c = a + b
print(c) # [5 7 9]
from sklearn.feature_extraction.text import CountVectorizer
texts = [
"AI is amazing",
"Vectorization makes AI fast",
"AI AI is powerful"
]
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(texts)
print(vectorizer.get_feature_names_out())
# ['ai' 'amazing' 'fast' 'is' 'makes' 'powerful' 'vectorization']
print(X.toarray())
# [[1 1 0 1 0 0 0]
# [1 0 1 0 1 0 1]
# [2 0 0 1 0 1 0]]
설명
- 어휘는 모든 문장에 등장하는 고유 단어들로 구성됩니다.
- 각 열은 단어에 해당하고, 각 행은 문장에 해당합니다.
- 값은 단어 빈도수이며(예:
2는 해당 단어가 두 번 등장함을 의미합니다).
벡터화 유형
수치 벡터화
원시 숫자를 직접 사용 (예: 픽셀 강도, 센서 판독값).
범주형 벡터화
범주형 값을 숫자 형태로 변환.
원‑핫 인코딩
활성화된 범주를 나타내는 1 하나가 있는 이진 벡터를 생성합니다.
import pandas as pd
animals = pd.DataFrame({'pet': ['cat', 'dog', 'fish', 'cat']})
encoded = pd.get_dummies(animals, columns=['pet'])
print(encoded)
# pet_cat pet_dog pet_fish
# 0 1 0 0
# 1 0 1 0
# 2 0 0 1
# 3 1 0 0
레이블 인코딩
각 범주에 고유한 정수를 할당합니다 (예: cat → 0, dog → 1, fish → 2). 간단하지만 우연히 순서 관계를 암시할 수 있습니다.
바이너리 인코딩
범주를 이진수로 표현하여 원‑핫에 비해 차원을 감소시킵니다.
빈도 인코딩
각 범주의 발생 횟수를 숫자값으로 사용합니다 (예: cat → 10, dog → 5, fish → 2).
텍스트 벡터화
단어나 문장을 벡터로 변환합니다.
- Bag‑of‑Words / TF‑IDF – 단어 빈도 또는 가중 빈도에 기반한 희소 벡터.
- 임베딩 – 대규모 코퍼스에서 학습된 조밀하고 저차원 벡터 (예: Word2Vec, GloVe, BERT).
예시:king - man + woman ≈ queen.
연산 벡터화
전체 배열에 한 번에 수학 연산을 적용합니다 (예: NumPy, TensorFlow, PyTorch). 이는 효율적인 신경망 계산의 핵심입니다.
인코딩 방법—원‑핫, 레이블, 바이너리, 빈도, 그리고 임베딩—각각 장점과 트레이드오프가 있습니다. 적절한 접근 방식을 선택하려면 데이터셋 크기, 모델 아키텍처, 그리고 해결하려는 구체적인 문제에 따라 달라집니다.