본문 바로가기

Study/NLP

텍스트 유사도 (자카드 유사도, 코사인 유사도, 맨하탄 유사도, 유클리드 유사도)와 tf-idf

NLP에서 텍스트 유사도란 두 문서가 텍스트 적으로 얼마나 유사한 내용을 담고 있는지를 나타내는 지표이다.

 

우선 유사도로 나타내기 전, 문서를 벡터화하는 작업이 필요하다.

 

 

TfidfVectorizer

문서를 tf-idf의 feature matrix로 변환하는 클래스이다. 문서에 CountVectorizer를 사용하고 tfidf Transformer를 사용한 것과 똑같은 결과를 가진다.

 

tf-idf(Term Frequency - Inverse Document Frequency)란?

TF(단어빈도)는 특정한 단어가 문서 내에서 얼마나 자주 등장하는지를 나타내는 값. 이 값이 높을수록 문서에서 중요하다고 생각할 수 있다. 하지만 하나의 문서에서 많이 나오지 않고 다른 문서에서 자주 등장하면 단어의 중요도는 낮아진다. 이를 DF(문서빈도, document frequency)라고 하며, 이 값의 역수를 IDF(역문서 빈도, inverse document frequency)라고 한다. TF-IDF는 TF와 IDF를 곱한 값으로 점수가 높은 단어일수록 다른 문서에는 많이 않고 해당 문서에서 자주 등장하는 단어를 의미한다.

 

 

 

 

유사도

자카드 유사도

자카드 유사도(자카드 지수)는 두 문장을 각각 단어의 집합으로 만든 뒤 두 집합을 통해 유사도를 측정하는 방식이다. 측정하는 방법은 두 집합의 교집합을 두 집합의 합집합으로 나눠준다.

 

두 문장의 교집합 개수는 6개, 합집합 개수는 24개 이므로 자카드 유사도는 6/24 = 0.25 이다.

 

 

코사인 유사도

코사인 유사도는 두 개의 벡터값에서 코사인 각도를 구하는 방법이다. -1~1 사이의 값을 가지고 1에 가까울수록 유사하다는 것을 의미한다. 이 유사도가 많이 사용되는 이유는 단손히 좌표상의 거리를 구하는 것이 아니라 두 벡터간의 각도를 구하는 것이기 때문에 방향성이 더해지기 때문이다.

 

 

 

유클라디안 유사도

가장 기본적인 유클리드 거리를 측정하는 유사도 공식이다.

 

유클라디언 거리는 L2거리라고도 불리며, n차원 공간에서 두 점 사이의 최단 거리를 구하는 접근 방식이다.

 

앞서 살펴본 유사도의 값은 범위가 0~1, -1~1 과 같이 정해져있었다. 하지만 유클리드 거리의 값은 범위가 정해져있지 않다. 거리이기 때문이다. 따라서 머신러닝에서는 L1정규화를 이용한다. L1정규화는 각 벡터 안의 요소 값을 모두 더한 것이 크기가 1이 되도록 벡터들의 크기를 조절하는 방법이다.

 

 

맨하탄 유사도

맨하탄 유사도는 맨하탄 거리를 이용해 유사도를 측정하고 흔히 L1거리라고 불린다.

 

맨하탄 거리는 사각형 격자로 이루어진 지도에서 출발점에서 도착점까지를 가로지르지 않고 갈 수 있는 최단 거리를 구하는 방법이다.

 

그림에서 초록선은 유클리디언 거리(L2, L2 Distance)이다.

이는 도로에서 아무런 장애물이 없다는 가정하에 이루어지는 측정방식이고, 여기서 맨하탄 거리는 빨강, 파랑, 노랑 선이 되겠다.

 

간단하게 도착점에서 출발점을 뺀 절댓값이 맨하탄 유사도가 되겠다.

이를 일반화 시키면 다음과 같다.