
컴퓨터 또는 기계는 문자를 직접 이해하지 못하고 숫자로 변환해야 한다(예: 0101101). 따라서 자연어 처리(NLP)에서는 문자를 숫자로 변환하는 방법이 필요하다. 그중 가장 기본적인 방법이 원-핫 인코딩(One-Hot Encoding)이다.
원-핫 인코딩을 하기 전에 단어 집합을 정의해야 한다.
예시:
book → 150번dog → 171번love → 192번books → 212번원-핫 인코딩은 특정 단어의 인덱스 위치에만 1을 부여하고 나머지 위치는 0으로 채우는 방식이다. 이렇게 변환된 벡터를 원-핫 벡터(One-Hot vector)라고 한다.
CruzLink is a financial solution.문장을 단어 단위로 나누고(토큰화) 원-핫 인코딩을 수행한다.
# vocabulary 만들기
all_words_lst = sentences_5.split(" ")
vocab = all_words_lst
print(vocab)
출력:
['CruzLink', 'is', 'a', 'financial', 'solution.']
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로 표시되는 벡터 형태가 원-핫 벡터이다.