Word2Vec - 워드투벡터
Last updated
Last updated
워드투벡터는 워드 임베딩에 기반하여 각 단어 간의 유사도를 벡터화하여 해당 단어의 의미를 수치화할 수 있는 알고리즘이다. SOOJLE은 해당 모듈을 검색 기능에 응용한다. 검색어의 의미를 분석하여 완전히 다른 단어일지라도, 유사한 의미의 단어로 병행 검색을 수행하여, 사용자가 원하는 정보를 더 쉽게 접근할 수 있도록 돕는다.
워드 임베딩(Word Embedding)은 단어를 벡터로 표현하는 대표적인 방법으로 주로 희소 표현에서 밀집 표현으로 변환하는 것을 의미한다.
희소 표현이란, 벡터 및 행렬의 값을 0 혹은 1로 표현하는 원-핫 인코딩의 기법이 대표적인 예로 손꼽힌다. NLP에서 이러한 희소 표현의 문제점은 단어의 개수에 비례하여 벡터의 차원이 계속해서 커져 공간적 낭비를 일으킨다는 점이다.
밀집 표현은 위와 같은 희소 표현은 밀집된 적은 차원의 벡터에서 표현하는 방법이다. 단어를 밀집 벡터(dense vector)의 형태로 표현하는 방법을 워드 임베딩(word embedding)이라고 지칭한다.
원-핫 인코딩을 비롯한 희소 표현은 공간적 낭비 외에도 각 단어 간의 유사성을 표현할 수 없다는 문제점이 있고, 이를 대안으로 "단어의 의미"를 N차원 공간에서 벡터화시키는 방법이 바로 Word2Vec이다.
워드투벡터는 '비슷한 위치에서 등장하는 단어들은 비슷한 의미를 가진다" 는 가정 하에 수행된다. 표현된 벡터들은 원-핫 벡터처럼 벡터의 차원이 단어 갯수일 필요가 없으므로, 벡터의 차원이 상대적으로 저차원으로 줄어들게 된다. 또한 이러한 분산 표현 방법을 통해 각 단어간의 유사도 측정이 가능해진다.
워드투벡터는 기본적으로 RNN 기반이며, 아래와 같이 문자열의 DTM 데이터로 학습을 수행한다.
DTM을 통해 아래처럼 각 중심단어의 주변 단어를 모델이 학습하게 되고 그것을 통해 특정 단어가 등장했을 때 주변 단어를 유추할 수 있게 한다.
스킵 그램은 중심 단어를 주변 단어를 분석하는 기법이다. 워드투벡터에는 보편적으로 CBOW와 Skip-gram 2가지 방법이 사용되며 여러 논문에서 성능 비교를 진행했을 때, 전반적으로 Skip-gram의 성능이 더 높다고 평가된다.
워드투벡터를 통하여 각 단어를 벡터화하여 단어간의 의미 유사도를 산출할 수 있으나, 기본적인 워드투벡터는 OOV(Out of Vocabulary) 문제를 가지게 된다.
OOV란, 단어셋에 존재하지 않는 단어를 만났을 때 아무런 작업도 수행할 수 없는 경우를 말한다. 본 프로젝트는 가능한 한 많은 양의 데이터를 확보할 계획이지만, 전반적으로 이러한 문제에 직면했을 때 근본적인 해결책이 필요하다.