원-핫 인코딩
여러 개의 전구 중 내가 고른 항목의 전구 딱 하나만 켜서 컴퓨터에게 단어를 알려주는 신호등이에요.
정의 원-핫 인코딩(One-Hot Encoding)은 글자나 단어 같은 항목을 컴퓨터가 계산할 수 있도록 0과 1로 이루어진 숫자로 바꾸는 방법이에요. 전체 항목 개수만큼 자리를 마련한 뒤, 해당하는 단 하나의 자리에만 1을 넣고 나머지는 모두 0으로 채워 표현해요.
왜 컴퓨터에게 0과 1의 자리가 필요할까요?
컴퓨터는 '사과', '바나나', '포도' 같은 사람의 말을 직접 이해하지 못해요. 오직 0과 1 같은 숫자로 된 데이터만 계산할 수 있죠. 그래서 글자로 된 정보를 인공지능이나 프로그램에 넣으려면 반드시 숫자로 바꿔주는 작업이 필요해요.
이때 가장 단순하게 사과를 1, 바나나를 2, 포도를 3이라고 번호를 매기면 뜻밖의 문제가 생겨요. 컴퓨터는 숫자의 크기와 순서를 그대로 받아들이기 때문에, '바나나(2)가 사과(1)보다 2배 더 크다'거나 '사과(1)와 포도(3)를 더하면 바나나(2)의 2배가 된다'처럼 엉뚱한 수학적 관계를 제멋대로 만들어 계산해 버려요.
이런 오류를 막으려고 만든 방법이 원-핫 인코딩이에요. 단어마다 자기만의 전용 자리를 하나씩 나눠주고, 해당하는 자리의 불만 켜는(1) 방식이에요. 이렇게 하면 사과는 [1, 0, 0], 바나나는 [0, 1, 0], 포도는 [0, 0, 1]이 되어 모든 단어가 동등한 거리를 가지게 돼요.
조금 더 정확히 말하면: 순서가 없는 범주형 데이터
조금 더 정확히 말하면, 원-핫 인코딩은 순서나 크기 비교가 필요 없는 '범주형 데이터'를 다룰 때 써요. 데이터 과학에서는 혈액형(A, B, O, AB)이나 거주 지역(서울, 부산, 대구)처럼 항목 간에 우열이 없는 정보를 다룰 일이 정말 많거든요.
만약 옷 사이즈처럼 '소(1), 중(2), 대(3)' 같은 순서와 크기가 실제로 의미 있는 데이터라면 숫자를 차례대로 붙여도 괜찮아요. 하지만 혈액형이나 단어는 크기나 순서가 없기 때문에 각 항목을 독립적인 차원의 좌표로 분리해 주어야 해요.
원-핫 인코딩을 적용하면 모든 데이터 벡터(숫자 묶음)끼리의 각도가 직각(90도)을 이루게 돼요. 수학적으로 두 항목 사이의 내적이 0이 되면서, 컴퓨터가 두 단어 사이에 어떤 사전 편향도 갖지 않게 만들어 주는 원리예요.
치명적인 약점과 임베딩의 등장
원-핫 인코딩은 직관적이지만 다루는 단어가 많아지면 치명적인 한계에 부딪혀요. 만약 한국어 사전의 10만 개 단어를 원-핫 인코딩으로 바꾼다면, 단어 하나를 표현하기 위해 10만 칸짜리 숫자 줄이 필요해요. 그중 99,999칸은 쓸모없는 0으로 가득 차서 메모리와 계산 자원을 낭비하게 되죠.
더 큰 문제는 단어 사이의 의미 관계를 전혀 담지 못한다는 점이에요. '왕'과 '여왕', '강아지'와 '개'는 사람이 보기에 아주 비슷한 뜻이지만, 원-핫 인코딩 세상에서는 '왕'과 '냉장고' 사이의 거리만큼이나 똑같이 멀고 독립적인 관계일 뿐이에요.
이러한 희소성(0이 너무 많은 문제)과 의미 단절을 극복하기 위해 현대 인공지능은 단어 임베딩(Embedding) 기술을 주로 사용해요. 0과 1로만 채우는 대신, 단어의 의미를 수십~수백 개의 연속된 소수점 숫자로 압축해 공간에 배치하는 방식이에요.
🤔 흔한 오해
인공지능 모델은 모든 글자 데이터를 항상 원-핫 인코딩으로만 처리한다.
원-핫 인코딩은 가장 기초적인 변환법일 뿐이에요. 현대 거대 언어 모델(LLM)이나 자연어 처리 인공지능은 단어 사이의 의미와 유사도를 숫자로 담아내는 '임베딩' 기술을 핵심으로 사용해요.
🧺 일상에서 만나요
원-핫 인코딩은 컴퓨터가 단어 사이의 엉뚱한 크기 비교를 하지 않도록, 오직 하나의 자리에만 1을 켜서 항목을 표현하는 방법이에요.