원-핫 인코딩(One-Hot Encoding)

문정현·2025년 2월 21일
post-thumbnail

왜 원-핫 인코딩이 필요한가?

컴퓨터 또는 기계는 문자를 직접 이해하지 못하고 숫자로 변환해야 한다(예: 0101101). 따라서 자연어 처리(NLP)에서는 문자를 숫자로 변환하는 방법이 필요하다. 그중 가장 기본적인 방법이 원-핫 인코딩(One-Hot Encoding)이다.

단어 집합(Vocabulary)이란?

원-핫 인코딩을 하기 전에 단어 집합을 정의해야 한다.

  • 단어 집합: 중복을 허용하지 않고 텍스트에 등장하는 단어를 모은 집합
  • 예를 들어, 텍스트에 단어가 총 5,000개 존재하면, 단어 집합의 크기는 5,000이 된다.
  • 단어 집합의 각 단어에 고유한 인덱스를 부여한다.

예시:

  • book → 150번
  • dog → 171번
  • love → 192번
  • books → 212번

원-핫 인코딩(One-Hot Encoding)이란?

원-핫 인코딩은 특정 단어의 인덱스 위치에만 1을 부여하고 나머지 위치는 0으로 채우는 방식이다. 이렇게 변환된 벡터를 원-핫 벡터(One-Hot vector)라고 한다.

문장을 단어 단위로 나누고(토큰화) 원-핫 인코딩을 수행한다.

단어 집합 생성

# vocabulary 만들기
all_words_lst = sentences_5.split(" ")

vocab = all_words_lst
print(vocab)

출력:

['CruzLink', 'is', 'a', 'financial', 'solution.']

단어 → 정수 매핑 (Integer Encoding)

word_int_dict = {w: i for i, w in enumerate(vocab)}
print(word_int_dict)
int_word_dict = {i: w for i, w in enumerate(vocab)}
print(int_word_dict)

출력:

{'CruzLink': 0, 'is': 1, 'a': 2, 'financial': 3, 'solution.': 4}
{0: 'CruzLink', 1: 'is', 2: 'a', 3: 'financial', 4: 'solution.'}

원-핫 인코딩 적용

link_idx = word_int_dict['CruzLink']
link_vector_embedded = id_mat[link_idx]
print(link_vector_embedded)

fin_idx = word_int_dict['financial']
fin_vector_embedded = id_mat[fin_idx]
print(fin_vector_embedded)

출력:

[1. 0. 0. 0. 0.]
[0. 0. 0. 1. 0.]

결과 해석

  • CruzLink 단어의 인덱스는 0[1. 0. 0. 0. 0.]
  • financial 단어의 인덱스는 3[0. 0. 0. 1. 0.]

이처럼, 특정 단어가 단어 집합 내에서 차지하는 위치만 1로 표시되는 벡터 형태가 원-핫 벡터이다.

profile
기록 == 성장

0개의 댓글