2019.06.16
출처 : https://wikidocs.net/book/2155
핵심키워드
- 워드 임베딩(Word Embedding)
- 희소 벡터(Sparse Vector)
- 밀집 벡터(Dense Vector)
워드 임베딩(Word Embedding)
자연어를 컴퓨터가 이해하고, 효율적으로 처리하게 하기 위해서는 컴퓨터가 이해할 수 있도록 자연어를 적절히 변환할 필요가 있다. 단어를 표현하는 방법에 따라서 자연어 처리의 성능이 크게 달라지기 때문에 이에 대한 많은 연구가 있었고, 여러가지 방법들이 알려져있다.
최근에는 단어의 의미를 벡터화시킬 수 있는 이번 챕터에서 배우게 될 워드투벡터(Word2Vec)와 글로브(Glove)가 많이 사용되고 있다. 이번 챕터에서는 전통적 방법의 한계를 개선시킨 워드 임베딩(Word Embedding) 방법론에 대해서 배워보도록 하자.
워드 임베딩(Word Embedding)은 단어를 벡터로 표현하는 대표적인 방법으로 주로 희소 표현에서 밀집 표현으로 변환하는 것을 의미한다. 이번 챕터에서는 희소 표현, 밀집 표현, 그리고 워드 임베딩에 대한 개념을 이해한다.
1. 희소 표현(Sparse Representation)
앞서 원-핫 인코딩을 통해서 나온 원-핫 벡터들은 표현하고자 하는 단어의 인덱스의 값만 1이고, 나머지 인덱스에는 전부 0으로 표현되는 벡터 표현 방법이었다. 이렇게 벡터 또는 행렬(Matrix)의 값이 대부분이 0으로 표현되는 방법을 희소 표현(Sparse Representation)이라고 한다. 그러니까 원-핫 벡터는 희소 벡터(Sparse Vector)이다.
이러한 희소 벡터의 문제점은 단어의 개수가 늘어나면 벡터의 차원이 한없이 커진다는 점이다. 원-핫 벡터로 표현할 때는 갖고 있는 코퍼스에 단어가 10,000개였다면 벡터의 차원은 10,000이어야만 했다. 심지어 그 중에서 단어의 인덱스에 해당되는 부분만 1이고 나머지는 0의 값을 가져야만 했다. 단어 집합이 클수록 고차원의 벡터가 된다. 예를 들어 단어가 10,000개 있고 강아지란 단어의 인덱스는 5였다면 원-핫 벡터는 이렇게 표현되어야 한다.
ex) 강아지 = [ 0 0 0 0 1 0 0 0 0 0 0 … 중략 … 0 0] # 이 때 1뒤의 0이 9995개
이러하 벡터 표현은 공간적 낭비를 불러일으킨다. 잘 생각해보면, 공간적 낭비를 일으키는 것은 원-핫 벡터뿐만은 아니다. TDM과 같은 경우에도 특정 문서에서 여러 단어가 다수 등장하였으나, 다른 많은 문서에서는 해당 특정 문서에서 등장했던 단어들이 전부 등장하지 않는다면 역시나 행렬의 많은 값이 0이 되면서 공간적 낭비를 일으킨다. 뿐만 아니라, 원-핫 벡터는 단어의 의미를 담지 못한다는 단점을 갖고 있다.
2. 밀집 표현(Dense Presentation)
이러한 희소 표현과 반대되는 표현이 있으니, 이를 밀집 표현(Dense Representation)이라고 한다. 밀집 표현은 벡터의 차원을 단어 집합의 크기로 상정하지 않는다. 사용자가 설정한 값으로 모든 단어의 벡터 표현의 차원을 맞춰준다. 또한, 이 과정에서 더 이상 0과 1만 가진 값이 아니라 실수값을 가지게 된다. 다시 희소 표현의 예를 가져와보자.
ex) 강아지 = [ 0 0 0 0 1 0 0 0 0 0 0 … 중략 … 0 0] # 이 때 1뒤의 0이 9995개
예를 들어 10,000개의 단어가 있을 때 강아지란 단어를 표현하기 위해서는 위와 같은 표현을 사용했다. 하지만 밀집 표현을 사용하고, 사용자가 밀집 표현의 차원을 128로 설정한다면, 모든 단어의 벡터 표현의 차원은 128로 바뀌면서 모든 값이 실수가 된다.
ex) 강아지 = [0.2 1.8 1.1 -2.1 1.1 2.8 … 중략…] # 이 벡터의 차원은 128
이 때 이 벡터의 차원이 조밀해졌다고 하여 밀집 벡터(Dense Vector)라고 한다.
3. 워드 임베딩(Word Embedding)
단어를 밀집 벡터(Dense Vector)의 형태로 표현하는 방법을 워드 임베딩(Word Embedding)이라고 한다. 그리고 이 밀집 벡터를 워드 임베딩 과정을 통해 나온 결과라고 하여 임베딩 벡터(Embedding Vector)라고도 한다.
워드 임베딩 방법론으로는 TDM에서 적용했던 6챕터에서 배웠던 LSA, 그 외 유명한 방법론들로 이번 챕터에서 배우게 될 Word2Vec, FastText, Glove 등이 있다. 또한 케라스에서 제공하는 도구인 Embedding()은 앞서 언급한 방법들을 사용하지는 않지만, 단어를 랜덤한 값을 가지는 밀집 벡터로 변환한 뒤에, 인공 신경망의 가중치를 학습하는 것과 같은 방식으로 단어 벡터를 학습하는 방법을 사용한다. 아래의 표는 앞서 배운 원-핫 벡터와 지금 배우고 있는 임베딩 벡터의 차이를 보여준다.
케라스의 Embedding()을 사용하는 것과 Word2Vec, Glove 등의 방법을 사용하는 것에 대한 비교는 이 챕터의 사전 훈련된 임베딩 챕터에서 다룬다.