오늘은 워드 임베딩(Word Embedding)에 대해 공부하려고 합니다.
자연어를 컴퓨터가 이해하고, 효율적으로 처리하기 위해서는 컴퓨터가 이해할 수 있도록 자연어를 적절히 변환할 필요가 있습니다.
단어를 표현하는 방법에 따라서 자연어 처리의 성능이 크게 달라지기 때문에 이에 대한 많은 연구가 있었고, 여러 가지 방법들이 알려져 있습니다.
최근에는 단어의 의미를 벡터화 시킬 수 있는 Word2Vec, Glove 등이 많이 사용되고 있습니다.
이번 챕터에서는 자연어 처리에 전통적 방법의 한계를 개선시킨 워드 임베딩(Word Embedding)에 대해 배우겠습니다.
워드 임베딩(Word Embedding)은 단어를 벡터로 표현하는 방법입니다.
단어를 밀집 표현으로 변환하는 것입니다. 이번 챕터에서는 희소 표현, 밀집 표현, 그리고 워드 임베딩에 대한 개념을 이해합니다.
원-핫 인코딩 방법은 단어 인덱스만 1이고 나머지 인덱스에는 전부 0으로 표현되는 벡터 표현 방법이 있습니다.
이렇게 벡터 또는 행렬(matrix)의 값이 대부분이 0으로 표현되는 방법을 Sparse representation(희소 표현)이라고 합니다. 그래서 원-핫 벡터도 sparse vector입니다.
sparse vector의 문제점이 있습니다. 단어의 개수가 늘어나면 벡터의 차원이 한없이 커집니다. 원-핫 벡터로 표현할 때는 갖고 있는 corpus에 단어가 10,000개였다면 벡터의 차원은 10,000이 됩니다.
단어 집합이 클수록 고차원 벡터가 돼서 공간적 낭비를 불러일으킵니다.
Dense Representation은 벡터의 차원을 단어 집합의 크기로 정해지지 않습니다. 사용자가 설정한 값으로 모든 단어의 벡터 차원을 맞춥니다.
또한, 0과 1의 값이 아닌 실수값을 가집니다.
Ex) 강아지 = [ 0 0 0 0 1 0 0 0 0 0 0 0 ... 중략 ... 0] # 이 때 1 뒤의 0의 수는 9995개. 차원은 10,000
위는 sparse vector의 예입니다.
이를 Dense presentation을 사용하고, 차원을 128로 설정한다면 모든 단어의 벡터 차원이 128이 됩니다.
Ex) 강아지 = [0.2 1.8 1.1 -2.1 1.1 2.8 ... 중략 ...] # 이 벡터의 차원은 128
이 경우에 벡터의 차원이 조밀해졌다고 dense vector이라 합니다.
단어를 dense vector의 형태로 표현하는 방법을 워드 임베딩이라 합니다. dense vector를 워드 임베딩 과정을 통해 나온 결과라고 하며 임베딩 벡터(embedding vector)라고도 합니다.
워드 임베딩 방법으로는 LSA, Word2Vec, FastText, Glove 등이 있습니다.
케라스에서 제공하는 Embedding()은 위의 방법을 제공하진 않지만, 단어를 랜덤한 값을 가지는 dense vector로 변환한 뒤, 인공 신경망의 가중치를 학습하는 방식으로 단어 벡터를 학습합니다.