rainbow/자연어처리

[자연어처리] 워드 임베딩

윌_ 2022. 7. 26. 22:10

워드임베딩이란?

사람의 언어를 벡터로 표현하는 방법으로 단어를 희소 벡터가 아닌, 밀집벡터의 형태로 표현하는 것

의미적으로 유사한 단어들끼리 서로 가까이 위치하도록 단어들을 벡터 공간으로 매핑


워드임베딩이 왜 필요한가?

 사람의 언어는 불연속적인 형태의 단어로 이루어진다. 각 단어가 갖는 의미가 서로 연관성이 있는 경우도 있지만, 형태가 다른 경우에는 서로 얼마나 연관성이 있는지 컴퓨터는 이해하고 파악하기 어렵다. 그렇기에 단어를 숫자로 표현하는 방식에 따라 자연어 처리의 성능이 크게 달라지기 때문에 단어를 숫자로 바꾸는 과정이 중요하다.


희소 표현 vs 밀집 표현

희소표현(sparse representation):

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

 

예로 원-핫 벡터를 생각하면 된다. 원-핫 인코딩을 통해 나온 원-핫 벡터들은 표현하고자 하는 단어의 인덱스의 값만 1이고 나머지 인텍스에는 전부 1로 표현되는 벡터 표현 방법.

 

단점: 단어의 개수가 많아질 수록 벡터의 차원이 계속 늘어남

ex. 단어 1000개가 있고, 그 중 '나무'라는 단어의 인덱스가 3라면

나무=[ 0 0 1 0 0.......0] 으로 표현이 됨.

 

따라서 공간적 낭비가 발생하게 된다. 

 

밀집표현(dense representiation): 

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

 

이 과정에서 앞서 예시로 들었던 '나무'라는 단어의 벡터 형태는 0, 1만 가진 값이 아닌, 실수값을 가지게 된다.

 

ex. 단어 1000개가 있고, 그 중 '나무'라는 단어의 인덱스가 3이고, 사용자가 지정한 차원 120이라면

나무= [ 0.2     -0.7     2.1     0.8     ...... -0.3 ]  // 차원은 120

으로 표현된다. 차원이 120으로 바뀌면서 모든 값이 실수값이 됨.

 

출처: wikidocs.net/33520

 

 


워드 임베딩 방법론

방법론에는 LSA, Word2Vec, Glove, FastText 등이 있으며, 다음 포스팅에서 하나씩 정리하도록 하겠습니다 :)