similairy 비교
def calc_cosine_similarity(v1, v2):
dot_product = np.dot(v1, v2)
norm_v1 = np.linalg.norm(v1)
norm_v2 = np.linalg.norm(v2)
return dot_product / (norm_v1 * norm_v2)
def calc_l2_distance(v1, v2):
return np.linalg.norm(v1 - v2)
v1 = np.array([1, 2])
v2 = np.array([2, 4])
v3 = np.array([5, 10])
base_vector = np.array([1, 0])
angles = [0, 30, 45, 60, 90, 120, 135, 150, 180]
vectors = []
doc1 = "인공지능은 컴퓨터 과학의 한 분야입니다"
doc2 = "인공지능은 컴퓨터 과학의 한 분야입니다. 인공지능은 기계가 학습하고 문제를 해결할 수 있게 합니다"
doc3 = "자연어 처리는 컴퓨터가 인간의 언어를 이해하도록 하는 기술입니다"
위의 식을 활용해서 아래의 케이스들을 얻을 수 있다.
예제 1: 크기는 다르지만 방향이 같은 벡터
- 벡터 v1: [1 2], 크기: 2.24
- 벡터 v2: [2 4], 크기: 4.47
- 벡터 v3: [ 5 10], 크기: 11.18
- 코사인 유사도 (v1, v2): 1.000000
- 코사인 유사도 (v1, v3): 1.000000
- 코사인 유사도 (v2, v3): 1.000000
- L2 거리 (v1, v2): 2.24
- L2 거리 (v1, v3): 8.94
- L2 거리 (v2, v3): 6.71
예제 2: 다양한 각도의 2차원 벡터
- 각도 0° 벡터: [1.00, 0.00], 코사인 유사도: 1.000000
- 각도 30° 벡터: [0.87, 0.50], 코사인 유사도: 0.866025
- 각도 45° 벡터: [0.71, 0.71], 코사인 유사도: 0.707107
- 각도 60° 벡터: [0.50, 0.87], 코사인 유사도: 0.500000
- 각도 90° 벡터: [0.00, 1.00], 코사인 유사도: 0.000000
- 각도 120° 벡터: [-0.50, 0.87], 코사인 유사도: -0.500000
- 각도 135° 벡터: [-0.71, 0.71], 코사인 유사도: -0.707107
- 각도 150° 벡터: [-0.87, 0.50], 코사인 유사도: -0.866025
- 각도 180° 벡터: [-1.00, 0.00], 코사인 유사도: -1.000000
예제 3: 길이가 다른 유사한 문서
- 문서1 단어 수: 5
- 문서2 단어 수: 13
- 문서3 단어 수: 8
- 문서 벡터1 크기: 2.24
- 문서 벡터2 크기: 3.87
- 문서 벡터3 크기: 2.83
- 문서1-문서2 코사인 유사도: 0.692820
- 문서1-문서3 코사인 유사도: 0.000000
- 문서2-문서3 코사인 유사도: 0.000000
- 문서1-문서2 L2 거리: 2.83
- 문서1-문서3 L2 거리: 3.61
- 문서2-문서3 L2 거리: 4.80
예제 4: 정규화된 벡터와 원래 벡터 비교
- 벡터 a: [4 3 2], 크기: 5.39
- 벡터 b: [8 6 4], 크기: 10.77
- 벡터 c: [2 3 4], 크기: 5.39
- 정규화된 a: [0.74, 0.56, 0.37], 크기: 1.00
- 정규화된 b: [0.74, 0.56, 0.37], 크기: 1.00
- 정규화된 c: [0.37, 0.56, 0.74], 크기: 1.00
- 원래 벡터 코사인 유사도 (a, b): 1.000000
- 정규화된 벡터 코사인 유사도 (a_norm, b_norm): 1.000000
- 원래 벡터 코사인 유사도 (a, c): 0.862069
- 정규화된 벡터 코사인 유사도 (a_norm, c_norm): 0.862069
- 원래 벡터 L2 거리 (a, b): 5.39
- 정규화된 벡터 L2 거리 (a_norm, b_norm): 0.000000
Appendix

(자료: https://www.learndatasci.com/glossary/cosine-similarity/)