지니 코딩일기

[딥러닝/머신러닝] RNN 학습에 필요한 개념 정리 본문

Computer Science/딥러닝

[딥러닝/머신러닝] RNN 학습에 필요한 개념 정리

zzzl 2023. 6. 10. 10:02

딥러닝 강의를 들으며 언급되지만, 설명이 없었던 내용을 정리해보려 한다.

그 중에서도 이번에는 RNN 학습에 필요한 내용을 알아보자.

 

 

목차

 


 

 

원-핫 인코딩(One-Hot Encoding)

➡️ 표현하고 싶은 단어의 인덱스에 1의 값을 부여하고, 다른 인덱스에는 0을 부여하는 단어의 벡터 표현 방식입니다. 이렇게 표현된 벡터를 원-핫 벡터(One-Hot vector)라고 한다.

 

 

컴퓨터 또는 기계는 문자보다는 숫자를 더 잘 처리 할 수 있습니다. 이를 위해 자연어 처리에서는 문자를 숫자로 바꾸는 여러가지 기법들이 있습니다. 원-핫 인코딩(One-Hot Encoding)은 그 많은 기법 중에서 단어를 표현하는 가장 기본적인 표현 방법이며, 머신 러닝, 딥 러닝을 하기 위해서는 반드시 배워야 하는 표현 방법입니다.

원-핫 인코딩에 대해서 배우기에 앞서 단어 집합(vocabulary) 에 대해서 정의해보겠습니다. 단어 집합은 앞으로 자연어 처리에서 계속 나오는 개념이기 때문에 여기서 이해하고 가야합니다. 단어 집합은 서로 다른 단어들의 집합입니다. 여기서 혼동이 없도록 서로 다른 단어라는 정의에 대해서 좀 더 주목할 필요가 있습니다. 단어 집합(vocabulary)에서는 기본적으로 book과 books와 같이 단어의 변형 형태도 다른 단어로 간주합니다. 

 

 

토큰화

원-핫 인코딩을 위해서 먼저 해야할 일은 단어 집합을 만드는 일입니다. 텍스트의 모든 단어를 중복을 허용하지 않고 모아놓으면 이를 단어 집합이라고 합니다.

 

정수 인코딩

그리고 이 단어 집합에 고유한 정수를 부여하는 정수 인코딩을 진행합니다. 텍스트에 단어가 총 5,000개가 존재한다면, 단어 집합의 크기는 5,000입니다. 5,000개의 단어가 있는 이 단어 집합의 단어들마다 1번부터 5,000번까지 인덱스를 부여한다고 해보겠습니다. 가령, book은 150번, dog는 171번, love는 192번, books는 212번과 같이 부여할 수 있습니다.

 

원-핫 인코딩(One-Hot Encoding)이란?

원-핫 인코딩은 단어 집합의 크기를 벡터의 차원으로 하고, 표현하고 싶은 단어의 인덱스에 1의 값을 부여하고, 다른 인덱스에는 0을 부여하는 단어의 벡터 표현 방식입니다. 이렇게 표현된 벡터를 원-핫 벡터(One-Hot vector)라고 합니다.

원-핫 인코딩을 두 가지 과정으로 정리해보겠습니다. 첫째, 정수 인코딩을 수행합니다. 다시 말해 각 단어에 고유한 정수를 부여합니다. 둘째, 표현하고 싶은 단어의 고유한 정수를 인덱스로 간주하고 해당 위치에 1을 부여하고, 다른 단어의 인덱스의 위치에는 0을 부여합니다. 한국어 문장을 예제로 원-핫 벡터를 만들어보겠습니다.

 

문장 : 나는 자연어 처리를 배운다

 

1. 문장에 대해서 토큰화를 수행합니다.

['나', '는', '자연어', '처리', '를', '배운다']

2. 각 토큰에 대해서 고유한 정수를 부여합니다. 지금은 문장이 짧기 때문에 각 단어의 빈도수를 고려하지 않지만, 빈도수 순으로 단어를 정렬하여 정수를 부여하는 경우가 많습니다.

단어 집합 : {'나': 0, '는': 1, '자연어': 2, '처리': 3, '를': 4, '배운다': 5}

3. 토큰을 입력하면 해당 토큰에 대한 원-핫 벡터를 만들어내는 함수를 만들었습니다.

4. '자연어'라는 단어의 원-핫 벡터를 얻어봅시다.

[0, 0, 1, 0, 0, 0]  

'자연어'는 정수 2이므로 원-핫 벡터는 인덱스 2의 값이 1이며, 나머지 값은 0인 벡터가 나옵니다.

 

 


 

워드 임베딩 (Word Embedding)

워드 임베딩(Word Embedding)은 단어를 벡터로 표현하는 방법으로, 단어를 밀집 표현으로 변환합니다. 희소 표현, 밀집 표현, 그리고 워드 임베딩에 대한 개념을 학습합니다.

 

1. 희소 표현 (Sparse Representation)

- 벡터 또는 행렬(matrix)의 값 대부분이 0으로 표현되는 방법

- ex) 원-핫 벡터, DTM

 

문제점

- 단어의 개수가 늘어나면 벡터의 차원이 한없이 커져 공간적 낭비 발생

원-핫 벡터로 표현할 때는 갖고 있는 코퍼스에 단어가 10,000개였다면 벡터의 차원은 10,000이어야만 했습니다. 심지어 그 중에서 단어의 인덱스에 해당되는 부분만 1이고 나머지는 0의 값을 가져야만 했습니다. 단어 집합이 클수록 고차원의 벡터가 됩니다. 예를 들어 단어가 10,000개 있고 인덱스가 0부터 시작하면서 강아지란 단어의 인덱스는 4였다면 원 핫 벡터는 이렇게 표현되어야 했습니다.

Ex) 강아지 = [ 0 0 0 0 1 0 0 0 0 0 0 0 ... 중략 ... 0] # 이때 1 뒤의 0의 수는 9995개.

 

 

2. 밀집 표현 (Dense Representation)

- 밀집 표현은 벡터의 차원을 단어 집합의 크기로 정하지 않고, 사용자가 설정한 값으로 모든 단어의 벡터 차원을 맞춤

- 희소 표현과 비교

Ex) 강아지 = [ 0 0 0 0 1 0 0 0 0 0 0 0 ... 중략 ... 0] # 이때 1 뒤의 0의 수는 9995개. 차원은 10,000

 

예를 들어 10,000개의 단어가 있을 때 강아지란 단어를 표현하기 위해서 희소 표현에서는 위와 같은 표현을 사용했습니다. 하지만 밀집 표현을 사용하고, 사용자가 밀집 표현의 차원을 128로 설정한다면, 모든 단어의 벡터 표현의 차원은 128로 바뀌면서 모든 값이 실수가 됩니다.

 

Ex) 강아지 = [0.2 1.8 1.1 -2.1 1.1 2.8 ... 중략 ...] # 이 벡터의 차원은 128

 

 

3. 워드 임베딩 (Word Embedding)

- 단어를 밀집 벡터(dense vector)의 형태로 표현하는 방법

- 워드 임베딩 과정을 통해 나온 결과인 밀집 벡터를 == 임베딩 벡터(embedding vector)라고도 함

 

워드 임베딩 방법론으로는 LSA, Word2Vec, FastText, Glove 등이 있습니다. 케라스에서 제공하는 도구인 Embedding()는 앞서 언급한 방법들을 사용하지는 않지만,

  1. 단어를 랜덤한 값을 가지는 밀집 벡터로 변환한 뒤에,
  2. 인공 신경망의 가중치를 학습하는 것과 같은 방식으로 단어 벡터를 학습하는 방법을 사용합니다. 
  원-핫 벡터 임베딩 벡터
차원 고차원 (단어의 크기) 저차원
다른 표현 희소 벡터 밀집 벡터
표현 방법 수동 훈련 데이터로부터 학습함
값의 타입 1과 0 실수

 

 

 

 

 

<딥 러닝을 이용한 자연어 처리 입문> E-book을 보고 공부한 내용 + 인터넷 자료 + 학부에서 배운 강의 내용을 정리한 자료입니다.

https://wikidocs.net/21679

 

06-01 머신 러닝이란(What is Machine Learning?)

딥 러닝을 포함하고 있는 개념인 머신 러닝(Machine Learning)의 개념에 대해서 학습합니다. ## 1. 머신 러닝(Machine Learning)이 아닌 접근 방…

wikidocs.net