# 002 optimizations

#### 6.1 문제 정의 및 목표 설정

문제 해결을 위해 Word2Vec을 활용할 때, 명확한 문제 정의와 목표 설정이 중요하다. 이 장에서는 Word2Vec을 사용하여 문제를 해결하는 전략과 구체적인 접근 방법에 대해 설명한다.

**6.1.1 문제 정의**

문제 정의는 해결하고자 하는 문제를 명확히 규명하는 과정이다. 예를 들어, "문서 유사성 분석"이라는 문제를 해결하고자 할 때, 다음과 같은 질문을 스스로에게 던질 수 있다:

* **문서 유사성 분석의 목적은 무엇인가?** 예를 들어, 유사한 문서를 자동으로 그룹화하거나 추천 시스템을 구축하는 것이 목적일 수 있다.
* **문서 유사성 분석에서 어떤 기준으로 유사성을 측정할 것인가?** 벡터 공간에서의 거리나 유사도 측정 방법을 정의한다.

**6.1.2 목표 설정**

문제 해결을 위한 목표는 구체적이고 측정 가능한 형태로 설정해야 한다. 예를 들어:

* **정확도 목표**: 문서 유사성 분석의 경우, 예측 정확도를 90% 이상으로 설정할 수 있다.
* **시간 목표**: 모델 학습 및 예측 속도를 기준으로 목표를 설정한다. 예를 들어, 문서 1000개의 유사성을 10분 내에 분석하는 것.

#### 6.2 데이터 수집 및 전처리

Word2Vec 모델을 활용하기 위해서는 적절한 데이터 수집과 전처리가 필요하다.

**6.2.1 데이터 수집**

데이터 수집은 문제 해결을 위한 첫 단계이다. 데이터는 주제와 관련된 다양한 출처에서 수집할 수 있다:

* **웹 스크래핑**: 웹사이트에서 데이터를 자동으로 수집한다.
* **공식 데이터셋**: 공개적으로 제공되는 데이터셋을 활용한다 (예: 영화 리뷰, 뉴스 기사 등).

**6.2.2 데이터 전처리**

전처리는 모델 학습을 위한 데이터를 준비하는 과정이다. 전처리 단계는 다음과 같다:

* **토큰화 (Tokenization)**: 문장을 단어 단위로 분리한다. 예를 들어, "오늘 날씨가 좋다"를 \["오늘", "날씨", "가", "좋다"]로 나눈다.
* **정제 (Cleaning)**: 불필요한 기호나 특수 문자를 제거한다. 예를 들어, HTML 태그를 삭제한다.
* **소문자 변환 (Lowercasing)**: 모든 단어를 소문자로 변환하여 일관성을 유지한다.
* **불용어 제거 (Stopwords Removal)**: 자주 사용되지만 의미가 적은 단어를 제거한다. 예를 들어, "은", "와" 등을 제거한다.

#### 6.3 Word2Vec 모델 학습

모델 학습 단계에서는 Word2Vec 알고리즘을 적용하여 단어 벡터를 생성한다.

**6.3.1 CBOW와 Skip-gram 선택**

Word2Vec 모델 학습 시, 두 가지 알고리즘 중 하나를 선택한다:

* **CBOW (Continuous Bag of Words)**: 문맥 단어를 사용하여 중심 단어를 예측한다.
* **Skip-gram**: 중심 단어를 사용하여 주변 단어를 예측한다.

**CBOW의 학습 목표**는 주어진 문맥에서 중심 단어를 예측하는 것이며, 손실 함수는 다음과 같다:

$$
L = - \sum\_{i=1}^{N} \log P(w\_i \mid \mathbf{c}\_i)
$$

여기서 $ P(w\_i \mid \mathbf{c}\_i) $는 문맥 $ \mathbf{c}\_i $ 주어진 조건에서 중심 단어 $ w\_i $의 확률이다.

**Skip-gram의 학습 목표**는 주어진 중심 단어에서 주변 단어를 예측하는 것이며, 손실 함수는 다음과 같다:

$$
L = - \sum\_{i=1}^{N} \sum\_{j=1}^{m} \log P(c\_{i,j} \mid w\_i)
$$

여기서 $ P(c\_{i,j} \mid w\_i) $는 중심 단어 $ w\_i $ 주어진 조건에서 주변 단어 $ c\_{i,j} $의 확률이다.

**6.3.2 하이퍼파라미터 조정**

모델 성능을 최적화하기 위해 하이퍼파라미터를 조정한다:

* **벡터 차원 (Vector Dimension)**: 단어 벡터의 차원 수를 설정한다. 일반적으로 100\~300차원이 사용된다.
* **윈도우 크기 (Window Size)**: 문맥 단어의 범위를 설정한다. 예를 들어, 윈도우 크기를 5로 설정하면 중심 단어의 왼쪽과 오른쪽 각각 5개의 단어를 고려한다.
* **학습률 (Learning Rate)**: 모델의 학습 속도를 조절한다. 초기 학습률은 0.01\~0.1 범위로 설정한다.

#### 6.4 결과 평가 및 분석

모델 학습 후, 결과를 평가하고 분석하여 모델의 성능을 확인한다.

**6.4.1 유사도 평가**

단어 벡터 간의 유사도를 평가하여 모델의 품질을 확인한다. 코사인 유사도를 사용하여 벡터 간의 유사성을 측정한다:

$$
\text{Cosine Similarity}(\mathbf{v}\_1, \mathbf{v}\_2) = \frac{\mathbf{v}\_1 \cdot \mathbf{v}\_2}{|\mathbf{v}\_1| |\mathbf{v}\_2|}
$$

여기서 $ \mathbf{v}\_1 $과 $ \mathbf{v}\_2 $는 단어 벡터, $ \mathbf{v}\_1 \cdot \mathbf{v}\_2 $는 두 벡터의 내적, $ |\mathbf{v}\_1| $과 $ |\mathbf{v}\_2| $는 벡터의 노름이다.

**6.4.2 품질 검증**

모델이 실제 문제를 해결하는 데 적합한지 검증한다. 예를 들어, 문서 유사성 분석의 경우, 예측된 유사성 결과가 실제 유사성과 일치하는지 확인한다.

**6.4.3 성능 향상**

모델의 성능을 향상시키기 위해 다음과 같은 방법을 고려한다:

* **하이퍼파라미터 조정**: 벡터 차원, 윈도우 크기, 학습률 등을 조정하여 성능을 개선한다.
* **데이터 품질 개선**: 더 깨끗하고 관련성 높은 데이터를 사용하여 모델의 정확도를 향상시킨다.

#### 6.5 실제 문제 해결 전략

문제 해결을 위해 Word2Vec을 효과적으로 활용하기 위한 전략을 제시한다:

**6.5.1 문제에 적합한 모델 선택**

문제의 특성에 맞는 모델을 선택한다. 예를 들어:

* **문서 유사성 분석**: CBOW나 Skip-gram 모델을 활용하여 문서 벡터를 생성하고 유사성을 분석한다.
* **감정 분석**: 문장 벡터를 생성하여 감정 분류 모델에 입력한다.

**6.5.2 데이터 전처리의 중요성**

데이터 전처리는 모델 성능에 큰 영향을 미친다. 충분한 데이터 전처리를 통해 모델의 정확도를 높일 수 있다.

**6.5.3 성능 평가와 지속적인 개선**

모델 성능을 정기적으로 평가하고, 성능 향상을 위한 개선 작업을 지속적으로 수행한다.

#### 6.6 장단점 및 개선 사항

**6.6.1 장점**

* **문제 해결에 적합**: 다양한 NLP 문제를 해결할 수 있는 강력한 도구이다.
* **효율성**: 대규모 데이터에서도 빠르게 학습하고 예측할 수 있다.

**6.6.2 단점**

* **문맥 반영 부족**: 문맥 정보를 충분히 반영하지 못하는 경우가 있다.
* **모델 복잡성**: 하이퍼파라미터 조정과 데이터 전처리가 필요하여 복잡할 수 있다.

**6.6.3 개선 사항**

* **문맥 기반 모델 사용**: 문맥 정보를 더 잘 반영할 수 있는 최신 모델(BERT, ELMo 등)을 고려한다.
* **데이터 품질 향상**: 데이터 전처리를 철저히 하고, 더 많은 데이터를 수집하여 모델 성능을 향상시킨다.
