워드 임베딩 (Word Embedding)
단어를 수치형으로 표현하는 가장 간단한 방법은 원-핫 인코딩으로 표현하는 것(one-hot representation)이다. 즉 모든 단어에 대해 더미변수를 만들고, 해당 단어이면 1로 표기하는 방법이다. 단 이러한 방법을 통해 그대로 학습시키는 것은 단어 의미가 반영되지 않고, 단어 수가 증가함에 따라 벡터 차원이 어마어마하게 커지기에 직접적으로 사용되지는 않는다.
많은 경우 각 단어를 N차원 실수 벡터 공간의 점으로 표현하는 단어 임베딩을 사용한다. 어떻게 매핑할 것인가는 대규모 말뭉치를 통해 특정 모델을 학습시키고, 해당 모델이 임베딩하도록 한다. 대표적인 모델이 Word2Vec이다.
Word2Vec 모델은 대표적으로 CBOW(continuous bag of words) 학습 방식을 이용한다. 이는 문맥(context)을 보고 중심 단어(target word)를 예측하는 방법이다. 즉 주변 단어를 입력으로 받고, 중심 단어를 출력한다. 이 때 원-핫 벡터(one-hot vector)가 사용된다.
$$ \mathbf{v} = \frac{1}{2C} \sum_{i=1}^{2C} \mathbf{x}_i \cdot W $$
$$ \hat{\mathbf{y}} = \text{softmax} \left( \mathbf{v} \cdot \mathbf{W}^\prime \right) $$
여기서 $ \mathbf{x}_i \in \mathbb{R}^V $ 는 원-핫 벡터, $ \mathbf{W} \in \mathbb{R}^{V \times N} $ 는 입력 임베딩 행렬, $ 2C $ 는 앞 뒤 문맥 단어 수의 총합이다. $ V $ 는 단어장의 크기이고, $ N $ 은 임베딩 벡터의 크기이다. $ \mathbf{v} \cdot \mathbf{W}^\prime \in \mathbb{R}^V $ 는 각 단어에 대한 로짓(score)이다. 최종적으로 소프트맥스(softmax) 함수를 이용해 확률을 계산하여 나타낸다. 즉 같은 단어 사이에 들어올 확률이 높은 단어가 있다면 비슷한 단어로 판단할 수 있는 것이다. 손실함수는 크로스 엔트로피(cross entropy)이다.
벡터 유사도 (Vector Similarity)
여러 방법이 있겠지만, 가장 많이 사용되는 것은 코사인 유사도(cosine similarity)이다. 임베딩된 데이터에 대해 유사도 계산이 가능하다.
벡터 간 각도에 기반하여 유사도를 측정하는데 다음과 같이 계산한다.
$$ \text{Similarity}(D_1, D_2) = \cos (\theta) = \frac{D_1 \cdot D_2}{\| D_1 \| \cdot \| D_2 \|} = \frac{\sum_{i=1}^n D_{1, i} \cdot D_{2, i}}{\sqrt{\sum_{i=1}^n (D_{1, i})^2} \cdot \sqrt{\sum_{i=1}^n D_{2, i})^2}}$$
그 외 거리(참고링크)를 기반으로 유사도를 측정할 수도 있다.
'Artificial Intelligence > Natural Language Processing' 카테고리의 다른 글
[NLP] 기본적인 텍스트 데이터 처리 (0) | 2025.05.20 |
---|---|
[NLP] 검색증강생성(RAG, retrieval-augmented generation) (0) | 2025.02.24 |