자연어 처리(NLP)에서 텍스트 데이터를 컴퓨터가 이해하도록 처리하려면, 언어를 숫자로 변환해야 합니다. 컴퓨터는 숫자와 수학적 계산을 처리하는 데 뛰어난 능력을 가지고 있지만, 사람이 사용하는 언어인 문자나 단어는 바로 이해하지 못합니다. 그래서 텍스트 데이터를 **벡터(vector)**라는 숫자 배열로 변환하는 과정이 필요합니다. 이 장에서는 텍스트를 숫자로 변환하는 방법, 특히 워드 임베딩(Word Embedding)과 텍스트 벡터화(Text Vectorization)에 대해 배워보겠습니다.

5.1. 워드 벡터

컴퓨터는 글자를 이해하지 못하기 때문에, 우리가 사용하는 단어나 문장을 숫자로 바꿔야 합니다. 이를 벡터화(vectorization)라고 하는데, 쉽게 말해서 단어를 숫자로 변환하는 과정을 일컫습니다. 하지만 단순히 단어를 숫자로 바꾸는 기존 방법은 몇 가지 문제가 있습니다.

5.1.1. 단어 벡터 표현: (1) 희소 표현(Sparse Representation)

기존에는 단어를 숫자로 표현하는 방법으로 원-핫 인코딩(one-hot encoding) 같은 방법이 있었습니다. 이 방식은 단어가 들어 있는 위치만 1로 표시하고, 나머지는 모두 0으로 채우는 방법입니다.

만약 "고양이", "강아지", "자동차" 세 단어가 있다면, 원-핫 인코딩은 이렇게 변환됩니다.

이 방식은 단순하지만, 문제가 있습니다.

  1. 단어의 의미를 반영하지 못합니다.
  2. 벡터 크기가 커집니다.

이러한 희소 벡터의 문제는 문서-단어 행렬(Document-Term Matrix, DTM)에서도 발생합니다. 특정 문서에서 자주 등장하는 단어가 다른 문서에서는 전혀 등장하지 않는 경우, 행렬의 대부분이 0으로 채워져 희소 행렬(sparse matrix)이 됩니다.

따라서 이를 해결하기 위해 보다 효율적인 벡터 표현 방식이 필요했습니다.

5.1.2. 단어 벡터 표현: (2) 밀집 표현(Dense Representation)

밀집 표현은 희소 표현과 달리, 단어 벡터의 차원을 단어 집합의 크기에 의존하지 않고, 사용자가 설정한 고정된 차원으로 변환합니다. 또한 벡터의 각 요소는 0과 1뿐만 아니라 실수(real number) 값을 가질 수 있어, 단어 간 의미적인 유사성을 반영할 수 있습니다.

예를 들어, 원-핫 인코딩에서는 단어 집합이 10,000개일 경우 "강아지"라는 단어를 표현하기 위해 10,000차원의 벡터를 사용해야 하지만, 밀집 표현을 사용하면 128차원, 300차원 등과 같이 훨씬 낮은 차원이면서, 미리 정해둔 크기의 벡터로 변환할 수 있습니다.