텍스트 유사도는 각 텍스트가 얼마나 유사한지 정량적으로 계산한 값입니다.
이를 통해 동일한 의미를 가진 텍스트에 대해 같은 결과 값을 갖도록 처리한다면 모델의 효율성을 높일 수 있습니다.
방법 1 | 텍스트를 통한 직접 측정
- 자카드 유사도

문장을 단어 토큰(token)으로 나누고, 공통된 단어의 수를 전체 단어 수로 나눠서 계산합니다.
0~1 사이 값으로 나타나고, 1에 가까울수록 유사도가 높다고 판단할 수 있습니다.
(예시)
A : 빌드는 다양한 관점의 차트와 보드를 제공합니다
B : 차트 및 보드를 통해 다양한 관점에서 데이터를 탐색합니다
<토큰>
A : [빌드, 는, 다양, 한, 관점, 의, 차트, 와, 보드, 를, 제공, 합니다]
B : [차트, 및 ,보드, 를, 통해, 다양한, 관점, 에서, 데이터, 를, 탐색, 합니다]

방법 2 | 벡터화 된 텍스트를 통한 측정
TF-IDF를 통해 문장을 벡터화하고, 그 값을 바탕으로 유사도 계산합니다.
문장 A, B에 대한 벡터 값이 다음과 같이 나타난다고 가정해보겠습니다.

- 코사인 유사도


두 문장 벡터의 사이 각(θ)에 대한 코사인 값을 나타냅니다.
방향성 개념이 더해지는 것이 특징입니다.
-1~1사이 값을 가지며, 유사도가 높을수록 1에 가깞게 나타납니다(cos0 = 1).
유사성이 없는 경우, 코사인 유사도는 0입니다(cos90 = 0).
(예시)

(Python 코드 구현)
# TF-IDF로 벡터화한 각 문장을 A, B라고 가정
from sklearn.metrics.pairwise import cosine_similarity
cosine_similarity(A, B)
- 유클리디안 유사도


두 벡터 사이의 최단 거리를 계산한 값입니다.
정규화를 하지 않고 계산하면, 정해진 값의 범위 없이 거리에 따라 무한하게 나타는 것이 특징입니다.
(예시)

(Python 코드 구현)
# TF-IDF로 벡터화한 각 문장을 A, B라고 가정
from sklearn.metrics.pairwise import euclidean_distances
euclidean_distances(A,B)
- 맨하탄 유사도


벡터 값이 좌표 위에 있다고 가정할 때, 좌표를 가로지르지 않는 최단 거리를 의미합니다.
유클리디언 유사도와 마찬가지로 거리에 대한 값이기 때문에 값의 범위가 정해져 있지 않습니다.
(예시)

(Python 코드 구현)
# TF-IDF로 벡터화한 각 문장을 A, B라고 가정
from sklearn.metrics.pairwise import manhattan_distance
manhattan_distance(A, B)