BoW에 기반한 단어 표현 방법인 DTM, TF-IDF, 또는 뒤에서 배우게 될 Word2Vec 등과 같이 단어를 수치화할 수 있는 방법을 이해했다면 이러한 표현 방법에 대해서 코사인 유사도를 이용해 문서의 유사도를 구하는 게 가능하다.
코사인 유사도(Cosine Similarity)
코사인 유사도는 두 벡터 간의 코사인 각도를 이용해 구할 수 있는 두 벡터의 유사도를 의미한다. 두 벡터의 방향이 완전히 동일한 경우에는 1의 값을 가지며, 90도의 각을 이루면 0, 180도로 반대의 방향을 가지면 -1의 값을 가지게 된다. 즉, 결국 코사인 유사도는 -1 이상 1 이하의 값을 가지며 값이 1에 가까울수록 유사도가 높다고 판단할 수 있다. 이를 직관적으로 이해하면 두 벡터가 가리키는 방향이 얼마나 유사한가를 의미한다.
두 벡터 A, B에 대해서 코사인 유사도는 식으로 표현하면 다음과 같다.
문서 단어 행렬이나 TF-IDF 행렬을 통해서 문서의 유사도를 구하는 경우에는 문서 단어 행렬이나 TF-IDF 행렬이 각각의 특징 벡터 A, B가 된다. 예시를 통해 문서 단어 행렬에 대해 코사인 유사도를 구해보자.
문서1 : 저는 사과 좋아요
문서2 : 저는 바나나 좋아요
문서3 : 저는 바나나 좋아요 저는 바나나 좋아요
위의 세 문서에 대해 문서 단어 행렬을 만들어보자.
출력 결과 :
[[0 1 1 1]
[1 0 1 1]
[2 0 2 2]]
{'저는': 2, '사과': 1, '좋아요': 3, '바나나': 0}
출력 결과 :
문서 1과 문서 2의 유사도 : 0.67
문서 1과 문서 3의 유사도 : 0.67
문서 2와 문서 3의 유사도 : 1.0
눈여겨볼만한 점은 문서1과 문서2의 코사인 유사도와 문서1과 문서3의 코사인 유사도가 같다는 점과 문서2와 문서3의 코사인 유사도가 1이 나온다는 것이다. 앞서 1은 두 벡터의 방향이 완전히 동일한 경우에 1이 나오며, 코사인 유사도 관점에서는 유사도의 값이 최대임을 의미한다고 언급한 바 있다.
문서3은 문서2에서 단지 모든 단어의 빈도수가 1씩 증가했을 뿐이다. 다시 말해 한 문서 내의 모든 단어의 빈도수가 동일하게 증가하는 경우에는 기존의 문서와 코사인 유사도의 값이 1이라는 것이다. 이것이 시사하는 점은 무엇일까? 예를 들어보자. 문서 A와 B가 동일한 주제의 문서이고 문서 C는 다른 주제의 문서라고 해 보자. 그리고 문서 A와 문서 C의 문서의 길이는 거의 차이가 나지 않지만, 문서 B의 경우 문서 A의 길이보다 두 배의 길이를 가진다고 가정해보자. 이런 경우 유클리드 거리로 유사도를 연산하면 문서 A가 문서 B보다 문서 C와 유사도가 더 높게 나오는 상황이 발생할 수 있다. 이는 유사도 연산에 문서의 길이가 영향을 받았기 때문인데, 이런 경우 코사인 유사도가 해결책이 될 수 있다. 코사인 유사도는 유사도를 구할 때 벡터의 방향(패턴)에 초점을 두므로 코사인 유사도는 문서의 길이가 다른 상황에서 비교적 공정한 비교를 할 수 있도록 도와준다.
'NLP > 딥러닝을 이용한 자연어 처리 입문' 카테고리의 다른 글
[NLP] 5-1. 머신 러닝이란 (0) | 2024.01.03 |
---|---|
[NLP] 4-2. 여러 가지 유사도 기법 (0) | 2024.01.02 |
[NLP] 3-4. TF-IDF(Term Frequency-Inverse Document Frequency) (1) | 2023.12.26 |
[NLP] 3-3. 문서 단어 행렬(DTM) (0) | 2023.12.26 |
[NLP] 3-2. Bag of Words(BoW) (0) | 2023.12.21 |