Recent Posts
Recent Comments
Archives
반응형
250x250
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Today
Yesterday

Total
05-02 06:06
관리 메뉴

Hey Tech

[NLP] 문서 유사도 분석: (2) 유클리디안 거리(Euclidean Distance) 본문

AI & 빅데이터/자연어처리(NLP)

[NLP] 문서 유사도 분석: (2) 유클리디안 거리(Euclidean Distance)

Tony Park 2022. 4. 19. 08:39
728x90
반응형

📚 목차

1.  유클리드 거리 개념
2.  유클리드 거리 실습

1.  유클리드 거리 개념

수학적  관점 접근

유클리드 거리(Euclidean Distance)는 두 점 사이의 거리를 계산하는 기법입니다. 두 점 \(p\)와 \(q\)가 각각 \((p_1, p_2, ..., p_n)\), \((q_1, q_2, ..., q_n)\) 좌표를 가질 때, 두 점 사이의 거리를 유클리드 거리 공식으로 표현하면 아래와 같습니다.

 

$$ \sqrt{(q_1 - p_1)^2 + (q_2 - p_2)^2 + ... + (q_n - p_n)^2} = \sqrt{\displaystyle\sum_{i=1}^{n}(q_i - p_i)^2}$$

 

다차원이 아닌 2차원 공간에서 유클리드 거리를 쉽게 알아보겠습니다(그림 1 참고).

그림 1. 2차원 좌표상 두 점 사이의 거리

 

두 점 \(p\)와 \(q\)의 거리는 피타고라스를 활용해 아래와 같이 계산할 수 있습니다.

 

$$ d(p, q) = \sqrt{(x_2 - x_1)^2 + (y_2 - y_1)^2} $$

NLP 관점 접근

유클리드 거리를 활용하여 문서 간 유사도를 계산할 수 있습니다. 즉, 문서 간 유클리드 거리가 가까울수록 해당 문서들이 서로 유사하다고 할 수 있습니다. 코사인 유사도(Cosine Similarity)와 달리, 유클리드 거리는 비교하는 문서 간 길이에 영향을 받는다는 한계가 있습니다.  예를 들어, 문서 A, B, C가 있을 때, 문서 A와 문서 B가 같은 주제의 내용으로 구성되었지만 문서 길이가 2배 이상 차이나고, 문서 C는 문서 A와 길이가 거의 차이 나지 않는다고 가정해 보겠습니다. 이런 경우, 유클리드 거리를 계산하면 문서 A가 문서 B보다 문서 C와 유사하다고 나올 수 있습니다. 반면, 코사인 유사도는 벡터 간 방향에 초점을 두기 때문에, 문서의 길이가 다른 상황에서도 비교적 공정하게 유사도를 측정합니다. 이처럼, 유클리드 거리는 문서의 길이에 영향을 받기 때문에 문서 유사도 측정 시 자주 활용되지 않습니다. 그럼에도, 학습을 위해 이어지는 섹션에서 유클리드 거리를 활용해 문서 간 유사도를 비교해 봅니다.

2.  유클리드 거리 실습

문서 예시

아래와 같이 3개의 문서가 있다고 해보겠습니다. 파이썬을 활용하여 유클리드 거리를 계산하고 문서 간 유사도를 비교해 보겠습니다.

구분 문장
문서1 나는 아침보다 저녁이 좋다
문서2 사과는 아침보다 저녁이 좋다
문서3 사과는 점심 간식으로 좋다

띄어쓰기를 기준으로 토큰화를 진행한다고 가정해 보겠습니다. 문서-단어 행렬(Document Term Matirx, DTM)을 표현하면 아래 표와 같습니다.

구분 나는 아침보다 저녁이 좋다 사과는 점심 간식으로
문서1 1 1 1 1 0 0 0
문서2 0 1 1 1 1 0 0
문서3 0 0 0 1 1 1 1

파이썬 코드

Step 1. 패키지 불러오기

import numpy as np

벡터 간 연산에 효과적인 numpy 패키지를 (설치하고) 불러옵니다.

Step 2. 유클리드 거리 계산 함수

def euclidean_distance(A, B):   
    return np.sqrt(np.sum((A-B)**2))

유클리드 거리 계산 함수를 수식을 고려하여 작성합니다.

Step 3. 문서-단어행렬(DTM) 준비

doc1 = np.array([1,1,1,1,0,0,0])
doc2 = np.array([2,2,2,2,0,0,0])
doc3 = np.array([0,0,0,1,1,1,1])

문서 예시를 DTM으로 표현한 대로 준비합니다. 물론, 워드임베딩을 사용하실 수 있다면 위와 같이 수기로 작성하실 필요는 없습니다. 간단한 예제이므로 수기로 작성해 봤습니다.

Step 4. 문서 간 유사도 확인

print(f"1. 문서1-문서2 간 유사도: {euclidean_distance(doc1, doc2)}")
print(f"2. 문서1-문서3 간 유사도: {euclidean_distance(doc1, doc3)}")
print(f"3. 문서2-문서3 간 유사도: {euclidean_distance(doc2, doc3)}")

유클리드 거리가 가까울수록 문서 간 유사하다고 해석할 수 있습니다.

1. 문서1-문서2 간 유사도: 2.0
2. 문서1-문서3 간 유사도: 2.449489742783178
3. 문서2-문서3 간 유사도: 4.0

📚 참고할 만한 포스팅

1. [NLP] Bag of Words(BoW) 개념 및 실습
2. [NLP] 문서 단어 행렬(DTM) 개념 이해
3. [NLP] TF-IDF 개념 및 계산 방법
4. [NLP] Word Embedding의 이해: (1) 희소표현 및 밀집표현
5. [NLP] 언어모델(Language Model)의 개념 및 특징
6. [NLP] N-gram 언어 모델의 개념, 종류, 한계점
7. [NLP] 언어모델의 평가지표 'Perplexity' 개념 및 계산방법
8. [NLP] Word2Vec: (1) 개념
9. [NLP] Word2Vec: (2) CBOW 개념 및 원리
10. [NLP] Word2Vec: (3) Skip-gram
11. [NLP] Word2Vec: (4) Negative Sampling
12. [NLP] 문서 유사도 분석: (1) 코사인 유사도(Cosine Similarity)
13. [NLP] 문서 유사도 분석: (2) 유클리디안 거리(Euclidean Distance)
14. [NLP] 문서 유사도 분석: (3) 자카드 유사도(Jaccard Similarity)

오늘은 유클리드 거리의 개념을 알아보고, 간단한 파이썬 실습을 진행해 봤습니다.

포스팅 내용에 오류가 있거나 보완할 점이 있다면 아래에 👇👇👇 댓글 남겨주시면 감사드리겠습니다 :)

그럼 오늘도 즐겁고 건강한 하루 보내시길 바랍니다.

고맙습니다😊

728x90
반응형
Comments