얼렁뚱땅 스며드는 Data Science

Deep Learning/NLP

[NLP] 자연어 유사도 측정

Jesip14 2021. 7. 19. 14:43

자연어 유사도 측정

  • Euclidean Distance

'princess', 'prince', 'man'이라는 단어들이 벡터로 표현되어 있을 때, 'man'과의 거리를 euclidean distance로 계산해보면 d1이 d2보다 짧아 'man'은 'prince'와 더 유사하다고 볼 수 있다.

 

  • Cosine Similarity

'money money laudering'은 euclidean distance로 거리를 구했을 떼 'laundering'이라는 단어에 더 유사하다는 결과가 나온다. 실제로는 'money'가 2번, 'laundering'이 한번이므로 'money money money money money money'와 더 유사하다는 결과가 옳다. 이러한 문제는 벡터 특성 때문에 발생한다. 단어가 여러번 나올 수록, 즉, 벡터의 크기가 커질수록 거리가 멀어질 수 밖에 없다. 이러한 문제를 해결하기 위해 벡터의 크기를 무시해줄 Cosine Similarity를 사용해야한다.

벡터의 크기가 아닌 두 벡터 사이의 각도를 통해 문서의 유사도를 측정한다. cos함수는 각도가 작을수록 더 높은 값을 가진다. 따라서 각도가 좁을 수록 높은 유사도 값을 가진다는 것을 확인할 수 있다. 이러한 방법으로 유사도를 계산해보면, 초록색 각도보다 빨간색 각도가 더 작아 해당 두 벡터의 더 유사도 수치가 더 높음을 확인할 수 있다.

그렇다면 벡터 사이의 각도가 90도를 넘어가는 일이 발생할까?

단어가 발생하는 횟수가 음수가 될 수 없으므로 각도는 90을 넘길 수 없다. 따라서 cosine similarity는 언제나 0 이상의 값을 가지게 된다.

'Deep Learning > NLP' 카테고리의 다른 글

[NLP] TF-IDF  (0) 2021.07.19
[NLP] n-gram  (0) 2021.07.19
[NLP] Bag of words  (0) 2021.07.19