쑤쑤_CS 기록장

ch 15, 16, 워드 임베딩 본문

IT 지식 기록/ML for iOS | 인공지능

ch 15, 16, 워드 임베딩

(╹◡╹)_ 2020. 9. 1. 13:51
728x90

Chapter 15: Natural Language Transformation, Part 1

Getting started

The sequence-to-sequence model

Prepare your dataset

Build your model

Train your model

Inference with sequence-to-sequence models

Converting your model to Core ML

Using your model in iOS

Let's talk translation quality

Key points 

Where to go from here?

 

Chapter 16: Natural Language Transformation, Part 2

Bidirectional RNNs 

Beam search

Attention

Why use characters at all?

Words as tokens and word embedding

Key points

Where to go from here?

 

* 특징 추출 Feature extraction 

: 데이터를 특징(feature)로 사용해서 n차원 좌표평면에 위치시킴. 데이터들이 n차원 벡터로 이루어진 벡터 데이터로 변환된 것

데이터를 좌표평면 위에 위치시키게 되면, 특징에 맞춰 군집(clustering)을 형성하게 되고, 새로운 데이터가 입력으로 들어갈 때 어떤 군집과 더 유사한지 그 유사점을 찾을 수 있게 됨

 

but 자연어 분야에서는 특징 추출 과정이 어려워짐 -> 모든 자연어 문자들을 독립적인 숫자로 치환

 

문장을 띄어쓰기를 기준으로 하면 어절로 분리할 수 있음. 이렇게 분리된 단어들을 '사전(Vocab)에 속해 있다'고 한다.

분리된 어절은 배열 데이터로 변환하되, 하나의 값만 1로 나머지는 0으로 표현함 : '원 핫 인코딩'

데이터 라고 표기되어있는 배열을 n차원 벡터로 이루어진 '원 핫 벡터'라고 함

 

* 워드 임베딩  

: 단어를 벡터로 표현하는 방법. 단어를 밀집 표현으로 변환함

 

- Sparse Representation 희소 표현

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

 

- Dense Representation 밀집 표현

: 희소 표현과 반대되는 표현. 벡터의 차원을 단어 집합의 크기로 정하지 않음. 사용자가 설정한 값으로 모든 단어의 벡터 표현의 차원을 맞춤. 0과 1만 가진 값이 아니라 실수값을 가지게 됨

 

- Word Embeding 워드 임베딩

: 단어를 밀집 벡터의 형태로 표현하는 방법. 이 밀집 벡터를 워드 임베딩 과정을 통해 나온 결과라고 하여 임베딩 벡터(embedding vector)라고 함

 

단어를 랜덤한 값을 가지는 밀집 벡터로 변환한 뒤에 인공 신경망의 가중치를 학습하는 것과 같은 방식으로 단어 벡터를 학습하는 방법을 사용합니다.

* word2vec 

텍스트 기반의 모델 만들기 : 텍스트를 숫자로 바꾸려는 노력의 연속. 텍스트를 숫자로 바꾸어야만 알고리즘에 넣고 계산을 한 후 결과값을 낼 수 있기 때문이다.

 

텍스트를 숫자로 바꾸는 일 중의 하나로 단어를 벡터로 바꾸는 일을 생각할 수 있다. one-hot-encoding은 N개의 단어가 있다면 각 단어는 한개의 요소만 1인 N차원의 벡터로 표현된다. 이 방법의 단점은 벡터 표현에 단어와 단어 간의 관계가 전혀 드러나지 않는다는 점이다.

 

단어를 벡터로 바꿀 때, 조금 더 똑똑하게 바꿔서 벡터에 단어의 의미를 담을 수 있는 방법에 대해 알아보자.

이렇게 단어를 벡터로 바꾸는 모델을 단어 임베딩 모델(word embedding model)이라고 부른다. word2vec는 단어 임베딩 모델 중 대표적인 모델이다. 단어의 의미를 최대한 담는 벡터를 만들려는 알고리즘이 단어 임베딩 모델이다. 어떻게 벡터에 단어의 의미를 담을 수 있을까?

 

데이터 : 대상의 속성을 표현해놓은 자료

대상의 속성을 표현하는 방식 : feature representation

자연어 처리의 경우 대상은 텍스트이고, 이 텍스트의 속성을 표현해놓은 것이 데이터가 된다. 대상을 단어로 좁혀보면, 단어에는 그 자체와 품사, 앞 단어가 무엇인지, 문장에서 몇번째 단어인지 등의 속성이 된다. 이런 언어적 정보(linguistic information)을 추출해서 표현하는 것이 언어의 feature representation이다.

 

언어의 속성을 표현한는 방법으로 크게 sparse representation과 dense representation이라는 두가지 방식이 있다.

- sparse representation : 위에서 언급했던 one-hot encoding을 뜻하고

- dense representation : word2vec의 방법을 뜻한다.

 

* Sparse representation

: 해당 속성이 가질 수 있는 모든 경우의 수를 각각의 독립적인 차원으로 표현한다. 가진 단어가 총 N개라면 이 속성이 가질 수 있는 경우의 수는 총 N개이다. One-hot encoding에서는 이 속성을 표현하기 위해 N차원의 벡터를 만든다. 그리고 해당하는 요소만 1이고 나머지는 모두 0으로 둔다. 이런 식으로 단어가 가질 수 있는 N개의 모든 경우의 수를 표현할 수 있다.

이렇게 one-hot encoding으로 만들어진 표현을 sparse representation이라고 부른다. 벡터나 행렬이 sparse하다는 것은 벡터나 행렬의 값 중 대부분이 0이고 몇몇 개만 값을 갖고 있다는 것을 뜻한다. one-hot encoding으로 만들어진 벡터는 0이 대부분이기 때문에, sparse한 벡터가 되는 것이다.

 

 

* Dense representation

: 각각의 속성을 독립적인 차원으로 나타내지 않는다. 대신, 우리가 정한 개수의 차원으로 대상을 대응시켜서 표현한다. 

해당 속성을 3차원으로 표현할 것이라고 정하면 그 속성을 3차원 벡터에 대응시키는 것이다. 이 대응을 임베딩(embedding)이라고 하며, 임베딩 하는 방식은 머신 러닝을 통해 학습하게 된다.

임베딩된 벡터는 더이상 sparse 하지 않다. one-hot encoding처럼 대부분이 0인 벡터가 아니라, 모든 차원이 값을 갖고 있는 벡터로 표현이 된다. 그래서 sparse의 반대말인 dense를 써서 dense representation 표현이라고 부른다.

 

또 다른 말로 distributed representation이라고도 불린다. 'Distributed'라는 말이 붙는 이유는 하나의 정보가 여러 차원에 분산되어 표현되기 때문이다. Sparse representation에서는 각각의 차원이 각각의 독립적인 정보를 갖고 있지만, Dense representation에서는 하나의 차원이 여러 속성들이 버무려진 정보를 들고 있다. 즉, 하나의 차원이 하나의 속성을 명시적으로 표현하는 것이 아니라 여러 차원들이 조합되어 나타나고자 하는 속성들을 표현하는 것이다.

 

위 그림에서 ‘강아지’란 단어는 [0.16, -0.50, 0.20. -0.11, 0.15]라는 5차원 벡터로 표현된다. 이 때 각각의 차원이 어떤 의미를 갖는지는 알 수 없다. 여러 속성이 버무러져서 표현되었기 때문이다. 다만 ‘강아지’를 표현하는 벡터가 ‘멍멍이’를 표현하는 벡터와 얼마나 비슷한지, 또는 ‘의자’를 표현하는 벡터와는 얼마나 다른지는 벡터 간의 거리를 통해 알 수 있다. 이러한 관계에서 단어 벡터의 의미가 드러난다.

단어 벡터의 값들은 머신 러닝을 통해 학습된다. 뒤에 나올 word2vec은 이 값들을 학습하는 방법론 중의 하나이다.

 

* word2vec

물론 지금까지 언급한 dense representation의 장점들은 모두 단어 임베딩(word embedding)이 잘 학습되었다는 전제 하에서 성립한다. 그렇다면 단어 임베딩을 어떻게 학습할 수 있을까?

단어 임베딩을 학습하는 알고리즘에는 여러가지가 있다. 그 중 가장 자주 쓰이고 가장 유명한 방식은 word2vec이다. 또다른 방식으로는 GloVe, FastText 등이 있다. 여기서는 word2vec이라는 모델에 대해서만 알아본다.

 

'친구를 보면 그 사람을 안다'의 아이디어이다. 

단어의 주위만 보았는데도 어떤 단어가 적합하고 어떤 단어가 부적합한지가 어느정도 드러난다. 이 빈칸에 들어갈 수 있는 단어들은 서로 비슷한 맥락을 갖는 단어들, 즉 서로 비슷한 단어들이다. 단어의 주변을 보면 그 단어를 알 수 있기 때문에, 단어의 주변이 비슷하면 비슷한 단어라는 말이 된다.

비슷한 맥락을 갖는 단어에 비슷한 벡터를 주고 싶다면 어떻게 할 수 있을까? 여러 방법이 있지만 그중에 word2vec은 predictive method라는 방식에 속한다. predictive method란 맥락으로 단어를 예측하거나 단어로 맥락을 예측하는 문제를 마치 지도 학습(supervised learning)처럼 푸는 것이다. 이 예측 모델을 학습하면서 단어를 어떻게 표현해야 할지를 배우게 되고, 이 과정에서 비슷한 단어가 비슷한 벡터로 표현된다.

word2vec의 알고리즘은 지도 학습을 닮았지만 사실은 비지도 학습(unsupervised learning) 알고리즘이다. 어떤 단어와 어떤 단어가 비슷한지 사람이 알려주지 않아도 word2vec은 비슷한 단어들을 찾아낼 수 있다. 비지도 학습의 장점은 정답지가 필요 없다는 것이다. 세상에 텍스트는 널려 있다. word2vec은 그 텍스트를 모두 학습 데이터로 쓸 수 있다.ㅍ

 

* 참고 링크

https://wikidocs.net/33520

https://dreamgonfly.github.io/blog/word2vec-explained/

728x90

'IT 지식 기록 > ML for iOS | 인공지능' 카테고리의 다른 글

ML 프로젝트  (0) 2020.09.10
되돌아보는 챕터 14  (0) 2020.08.25
되돌아보는 챕터 8,9  (0) 2020.08.20
Chapter 8: Advanced Convolutional Neural Networks  (0) 2020.08.13
되돌아보는 챕터 7  (0) 2020.08.11
Comments