logo

머신러닝에서 임베딩 📂머신러닝

머신러닝에서 임베딩

정의

머신러닝에서 임베딩embedding이란 데이터 집합 $X$에서 벡터공간 $\mathbb{R}^{n}$으로의 매핑 혹은 이 매핑을 실시하는 행위 그 자체를 의미한다.

$$ \operatorname{Embedding}: X \to \mathbb{R}^{n} $$

설명

임베딩은 원래 수학 용어로, 분야마다 정의는 조금씩 다르지만 공통적으로 '한 대상을 다른 대상 안에 구조를 보존하며 집어넣는 단사 사상'을 가리킨다.

머신러닝의 임베딩은 이 관념을 물려받았지만 훨씬 느슨하다. 데이터를 숫자로 이루어진 벡터로 매핑하고 나면 그것이 원래 어떤 데이터였든지 간에 계산을 할 수 있는 대상이 된다. 그 벡터의 크기를 재거나, 두 벡터 사이의 거리를 재거나 할 수 있다는 뜻이다. 이를 위해서는 임베딩함수가 데이터를 잘 임베딩해야하는데, 딥러닝에서는 임베딩함수도 학습할 대상이 된다. 예컨대 '비슷한 데이터는 가까운 벡터로, 다른 데이터는 먼 벡터로 보내라'는 요구를 손실함수에 담아 학습시킬 수 있다.

어떤 임베딩을 사용하느냐는 중요한 문제인데, 이는 자연어 처리에서 원-핫 인코딩의 한계에서 잘 드러난다. 범주형 데이터를 벡터로 바꾸는 가장 단순한 방법은 각 항목에 표준기저 벡터 $\mathbf{e}_{i}$를 하나씩 배정하는 원-핫 인코딩이다. 그런데 어휘 집합 $V$의 크기가 수만에서 수십만에 달하는 자연어 처리에서 이는 곧 성분 하나만 $1$이고 나머지는 전부 $0$인 $\left| V \right|$차원 희소벡터를 뜻한다. 더 심각한 문제는 서로 다른 원-핫 벡터가 언제나 직교한다는 것, 즉 $i \ne j$이면 $\mathbf{e}_{i} \cdot \mathbf{e}_{j} = 0$이라는 것이다. '강아지'와 '개'가 '강아지'와 '행렬식'만큼이나 서로 무관해서, 표현 자체에 유사도 정보가 전혀 없다. 그래서 이를 훨씬 낮은 차원 $n \ll \left| V \right|$의 밀집벡터dense vector로 바꾸는 임베딩을 사용하여 벡터 사이의 거리와 방향에 의미를 주는 방법이 주로 사용된다.

자연어 처리

🔒(26/07/30)자연어 처리에서 임베딩은 텍스트 벡터화text vectorization라고도 부르며 다양한 방법이 있다. 아래에서는 어휘 사전 $V = \{$ 강아지, 개, 고양이 $\}$ (크기 $3$, 성분 순서도 이 순서)를 공통 예시로 삼는다.

  • 원-핫 인코딩: 미리 만들어둔 어휘 사전에서 각 단어에 색인을 매겨 표준기저 벡터에 대응시키는 가장 기본적인 방법이다. 정수형으로 색인을 부여하는 것과 본질적으로 같으며, 사용할 어휘가 많다면 앞서 본 희소성/직교성 문제 때문에 사실상 쓰기 어렵다.

    단어원-핫 벡터정수형
    강아지$(1, 0, 0)$$1$
    $(0, 1, 0)$$2$
    고양이$(0, 0, 1)$$3$
  • 빈도 벡터화count vectorization: 한 문서를 어휘별 등장 횟수로 표현하는 방법이며, 대표적인 방식이 백오브워즈bag-of-words다. 예를 들어 "개 고양이 개"라는 문장은 성분을 순서대로 강아지, 개, 고양이의 빈도로 세어 $(0, 2, 1)$로 임베딩 된다.

  • 워드 임베딩word embedding: 단어를 저차원 밀집벡터로 표현하는 것을 말하며, Word2Vec, fastText, GloVe 등의 방법이 있다. 아래 값은 설명을 위한 임의의 예시일 뿐 실제 학습값이 아니다.

    단어임베딩(예시)
    강아지$(0.8, 0.1)$
    $(0.7, 0.2)$
    고양이$(-0.6, 0.5)$

    이렇게 하면 뜻이 비슷한 '강아지'와 '개'는 벡터가 서로 가깝고 '고양이'와는 멀어, 원-핫 인코딩과 달리 벡터 사이의 거리에 단어의 의미가 담기게 된다.