> For the complete documentation index, see [llms.txt](https://soojle.gitbook.io/project/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://soojle.gitbook.io/project/requirements/undefined-1/undefined-3/word2vec.md).

# Word2Vec - 워드투벡터

## 개요

![](https://728901758-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-L_Wo7SRUvbKJuPojzzZ%2F-LnYVj2yl1cZ1iAb2cgT%2F-LnYWHACqs9fGAuTDcZn%2Fimage.png?alt=media\&token=7a4c54b1-f459-4de4-be24-d491117cab6a)

워드투벡터는 워드 임베딩에 기반하여 각 단어 간의 유사도를 벡터화하여 해당 단어의 의미를 수치화할 수 있는 알고리즘이다. SOOJLE은 해당 모듈을 검색 기능에 응용한다. \
검색어의 의미를 분석하여 완전히 다른 단어일지라도, 유사한 의미의 단어로 병행 검색을 수행하여, 사용자가 원하는 정보를 더 쉽게 접근할 수 있도록 돕는다.&#x20;

## 워드 임베딩(Word Embedding)

워드 임베딩(Word Embedding)은 단어를 벡터로 표현하는 대표적인 방법으로 주로 희소 표현에서 밀집 표현으로 변환하는 것을 의미한다.

### **희소 표현(Sparse Representation)** <a href="#id-1-sparse-representation" id="id-1-sparse-representation"></a>

희소 표현이란, 벡터 및 행렬의 값을 0 혹은 1로 표현하는 **원-핫 인코딩**의 기법이 대표적인 예로 손꼽힌다. NLP에서 이러한 희소 표현의 문제점은 단어의 개수에 비례하여 벡터의 차원이 계속해서 커져 공간적 낭비를 일으킨다는 점이다.

### **밀집 표현(Dense Representation)** <a href="#id-2-dense-representation" id="id-2-dense-representation"></a>

밀집 표현은 위와 같은 희소 표현은 밀집된 적은 차원의 벡터에서 표현하는 방법이다.  단어를 밀집 벡터(dense vector)의 형태로 표현하는 방법을 **워드 임베딩(word embedding)**&#xC774;라고 지칭한다.&#x20;

## 워드투벡터(Word2Vec)

원-핫 인코딩을 비롯한 희소 표현은 공간적 낭비 외에도 각 단어 간의 유사성을 표현할 수 없다는 문제점이 있고, 이를 대안으로 "**단어의 의미**"를 N차원 공간에서 벡터화시키는 방법이 바로 **Word2Vec**이다. &#x20;

워드투벡터는  **'비슷한 위치에서 등장하는 단어들은 비슷한 의미를 가진다" 는** 가정 하에 수행된다. 표현된 벡터들은 원-핫 벡터처럼 벡터의 차원이 단어 갯수일 필요가 없으므로, 벡터의 차원이 상대적으로 저차원으로 줄어들게 된다. 또한 이러한 분산 표현 방법을 통해 **각 단어간의 유사도 측정**이 가능해진다.

워드투벡터는 기본적으로 RNN 기반이며, 아래와 같이 문자열의 DTM 데이터로 학습을 수행한다.

![](https://728901758-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-L_Wo7SRUvbKJuPojzzZ%2F-LnanspIXrJH3slZXA2g%2F-Lnap5cy1EnTiByWekPd%2Fimage.png?alt=media\&token=671cc828-f974-4e37-b37f-a89e3b6cfbec)

DTM을 통해 아래처럼 각 중심단어의 주변 단어를 모델이 학습하게 되고 그것을 통해 특정 단어가 등장했을 때 주변 단어를 유추할 수 있게 한다.

![](https://728901758-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-L_Wo7SRUvbKJuPojzzZ%2F-LnanspIXrJH3slZXA2g%2F-LnapM6J-YEuSk6_8UVJ%2Fimage.png?alt=media\&token=28c4a2d9-f3e7-4c41-804e-d92213348465)

### **Skip-gram**

![](https://728901758-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-L_Wo7SRUvbKJuPojzzZ%2F-LnanspIXrJH3slZXA2g%2F-LnaoZDwyw0L6GvCn95J%2Fimage.png?alt=media\&token=c9702278-46c4-4d3f-8ef6-7506496d88b8)

스킵 그램은 중심 단어를 주변 단어를 분석하는 기법이다. 워드투벡터에는 보편적으로 CBOW와 Skip-gram 2가지 방법이 사용되며 여러 논문에서 성능 비교를 진행했을 때,  전반적으로 Skip-gram의 성능이 더 높다고 평가된다.

## Word2Vec 모델 분석

워드투벡터를 통하여 각 단어를 벡터화하여 단어간의 의미 유사도를  산출할 수 있으나, 기본적인 워드투벡터는 **OOV(Out of Vocabulary)** 문제를 가지게 된다.

**OOV**란, 단어셋에 존재하지 않는 단어를 만났을 때 아무런 작업도 수행할 수 없는 경우를 말한다. 본 프로젝트는 가능한 한 많은 양의 데이터를 확보할 계획이지만, 전반적으로 이러한 문제에 직면했을 때 근본적인 해결책이 필요하다.&#x20;
