1 코사인 유사도
코사인 유사도는 두 벡터가 얼마나 비슷하냐를 알기 위해 사용된다. 벡터 a, b가 있을 때 a와 b의 내적을 a의 놈과 b의 놈을 곱한 값으로 나누어 계산한다. 기존의 내적을 구할 때 쓰는 공식에서 a의 놈과 b의 놈을 우측으로 옮긴 것이다.
$$a \cdot b = \parallel a \parallel \parallel b \parallel \cos(\theta)$$
$$ \cos(\theta) = \frac{a \cdot b}{ \parallel a \parallel \parallel b \parallel}$$
내적과 놈(Norm)
$$a \cdot b = \sum_{k=1}^N a_k \cdot b_k $$
$$\parallel a \parallel = \sqrt{\sum_{k=1}^N (a_k)^2} $$
유사도가 높다면 1에 가깝고 낮다면 0에 가까워 진다.
2 유클리드 거리
유클리드 거리또한 두 벡터의 유사도를 구하기 위해 자주 사용되는데, 사실 그냥 두 점 사이의 거리를 구하는 공식이다. 벡터 a, b가 있을 때 각 벡터의 성분의 차를 제곱하여 더한 것의 제곱근을 구하면 유클리드 거리가 나온다.
$$ \sqrt{\sum_{k=1}^N (a_k - b_k)^2} $$
유사도가 높다면 0에 가깝고 낮으면 낮을수록 계속 값이 높아진다.
3 비교
특수한 경우 한 가지를 보겠다.
이 두 벡터의 코사인 유사도를 구하면 유사하다고 나올 것이고, 유클리드 거리를 구하면 코사인 유사도에 비해서는 덜 유사하다고 나올 것이다.
이런 경우에 대해 예시를 들어보자면 어떤 블로그 글 2개가 있는데 하나는 수학이라는 단어가 1번만 나오고 또 다른 하나는 수학이란 단어가 10번은 나온다. 그리고 다른 단어에 대해서는 별로 빈도의 차이가 없다하면 그림 1과 같이 벡터가 나올 것이다.
이 예시의 경우에는 유클리드 거리가 좀 더 유리하게 적용될 수 있다. 그러나 내가 어떤 문제를 푸는냐에 따라서 이러한 경우일지라도 코사인 거리가 더 유리할 수도 있다.
일반적으로는 벡터의 성분의 갯수가 어느정도 된다면 코사인 유사도를 많이 사용한다.
4 사용 예시
자연어 처리 분야에서 두 단어나 문장의 유사도를 구하고 싶을 때 사용한다. 특히 TF-IDF에서 문서 간의 유사도를 구할 때 많이 사용된다. 또 딥러닝 분야에서 언어 모델을 만들 때 평가 지표로서 코사인 유사도를 사용하기도 한다.
'인공지능 > nlp' 카테고리의 다른 글
[자연어 처리] TF-IDF (0) | 2024.04.10 |
---|