알고리즘

임베딩 & Char-RNN

WDmil 2024. 6. 18. 23:25
728x90

임베딩 (Embedding)


개념

 

임베딩은 머신러닝, 특히 자연어 처리 문제에서 데이터를 효율적으로 표현하기 위해 사용되는 기법이다.

이는 고차원의 희소 벡터를 저차원의 밀집 벡터로 변환하여 단어 간의 유사성을 반영할 수 있도록한다.

 

임베딩은 One-Hot Encoding 을 보완하기 위해 생성된 것 이기 때문에,

임베딩에 대해 알려면 One-Hot Encoding의 문제점 에 대해 알아야 한다.


One-Hot Encoding 의 문제점

 

머신러닝에서 데이터를 표현하는 일반적인 방법 중 하나는 One-Hot Encoding이다. 그러나, 이 방법에는 몇 가지 문제가 있다.

 

  • 데이터 표현형태가 Sparse하다.

    데이터 표현 형태가 희박(Sparse)하다는 문제점인데
    예를들어 10,000개의 단어사전에 있는 단어들 중 단어 한개를 One-Hot Encoding으로 표현한다고 가정해보자,

    One-Hot Encoding으로 첫 번째 단어를 설정하면, 9999개의 숫자는 0으로 표현되고 1개의 숫자만 1로 표현될 것이다.
    9999개의 비트가 표시를 위해 낭비된다는 의미이다. 메모리 낭비가 심하다고 볼 수 있다.
  • 유사성 표현이 불가능하다.

    One-Hot Encoding자체의 방식때문에, 단어간의 유사성을 알아볼 수 없다.
    예를들어 우리는 하늘과 구름을 생각하면 두 단어간의 유사성을 생각할 수 있다. 하늘에 구름이 떠있기 때문,

    그러나, 인코딩 방식에 따르면 구름과 하늘은 전혀 다른 단어이고, 유사성을 발견할 수 없다. 좌표가 다르기 때문

위의 문제점을 해결하기 위해 임베딩이 고안되었다.


임베딩의 역할과 수식

 

임베딩은 이러한 문제점을 해결하기 위해 고안된 기법이다.
Sparse한 One-Hot Encoding벡터를 Dense한 벡터로 변환하여 효율적이고 의미있는 데이터 표현을 가능하게 한다.

 

임베딩은 원본 데이터에 임베딩 행렬(Embedding Matrix)을 곱하여 변환을 수행한다.

$ X_{embedding} = W_{embedding}X_{one-hot} $


예시

위에서 들었던 예시로 설명해보자.

 

10,000개의 단어 사전을 One-Hot Encoding으로 표현한 데이터에 10,000 x 250크기의 임베딩 행렬을 곱하여 임베딩을 수행한다고 해보자.

 

그렇다면, 다음과 같이 이야기할 수 있다.

  • One-Hot Encoding 벡터: 10,000 x 1크기
  • 임베딩 행렬 $ W_{embedding} $ : 10,000 x 250크기
  • 임베딩 벡터 $ X_{embedding} $ : 250 x1 크기

 

임베딩을 통해 10,000개의 비트를 사용하여 의미 정보를 담은 250개의 특징값 벡터로 변환한다. 이로써 유사한 단어끼리 묶을 수 있다.

임의의 벡터키값과 유사한 단어를 고를 수 있기 때문이다.

 

임베딩은 단어간 의미적 유사성을 반영하여 자연어 처리 모델에 어떠한 단어가 유사하고, 어떻게 배치해야하는지를 설명해줄 수 있게 해주기 때문에, 자연어 처리 모델의 성능을 향상시킨다.


Char-RNN


개념

Char-RNN은 RNN(Recurrent Neural Network)의 한 종류로, 입력값으로 하나의 글자(Character)을 받아 다음 글자를 예측하는 문제를 다룬다. 이 모델은 글자 단위로 학습하여 텍스트 생성과 같은 작업에 활용된다.


학습 데이터 구성 방법

Char-RNN을 학습시키기 위해, 입력 문장에서 한 글자씩 뒤로 민 형태의 데이터를 구성한다.

예를 들어 "HELLO" 라는 문장을 학습시키고 싶다면, RNN의 입력과 타겟 쌍을 다음과 같이 만든다.

  • 입력(H) -> 타겟(E)
  • 입력(E) -> 타겟(L)
  • 입력(L) -> 타겟(L)
  • 입력(L) -> 타겟(O)

이미지로 표현한 HELLO 생성과정


예측 과정

Char-RNN의 출력값은 학습에 사용하는 전체 문자 집합에 대한 소프트맥스 출력값이 된다.

 

예를 들어, 알파벳(26)개로 구성된 데이터셋 일 경우, 출력값은 26개의 알파벳 문자에 대한 확률 분포를 나타낸다.

가장 높은 확률을 가진 글자를 다음 글자로 예측하게 된다.

 

그리고, 정해진 문장을 달성할 때 까지 이를 반복한다.


Char-RNN의 출력값

Char-RNN의 출력값은 26 x 1크기의 벡터로, 각 요소는 해당 알파벳 문자가 다음에 나올 확률을 나타낸다.

 

이중 가장 확률이 높은 글자를 argmax함수로 선택하여 다음 글자로 확정한다.

 

Cahr-RNN은 텍스트 생성, 언어 모델링, 철자 교정 등 다양한 자연어 처리 작업에 활용된다.

글자 단위의 예측을 통해 유연하고 다양한 텍스트 생성이 가능하다.

728x90