티스토리 뷰

본 포스팅은 『텐서플로2와 머신러닝으로 시작하는 자연어처리』를 참고하여 만들어졌습니다.
https://wikibook.co.kr/nlp-tf2/

 

  • 이 노래 누가 만들었어?
  • 지금 나오는 노래의 작곡가가 누구야?

위 두 문장은 똑같은 의미이지만 인공지능에게는 단순하게 다른 문장으로 인식될 것이다. 따라서 각기 다른 답을 만들어야 하는데, 좀 더 효율성을 위해 비슷한 의미를 가진 문장에 대해서는 같은 대답을 준비할 수 있을 것이다. 이때 문장이 유사한지 측정해야 하며, 텍스트 유사도(Text Similarity) 측정 방법을 사용하면 된다.

텍스트 유사도란 말 그대로 텍스트가 얼마나 유사한지를 표현하는 방식 중 하나이다. 앞에서 예로 든 두 문장의 경우 다른 구조의 문장이지만 의미는 비슷하기 때문에 두 문장의 유사도가 높다고 판단할 수 있다. 물론 유사도를 판단하는 척도는 매우 주관적이기 때문에 데이터를 구성하기가 쉽지 않고 정량화하는데 한계가 있다. 이를 최대한 정량화해서 모델을 만드는 것이 중요하다.

일반적으로 유사도를 측정하기 위해 정량화하는 방법에는 여러 가지가 있다. 단순히 같은 단어의 개수를 사용해서 유사도를 판단하는 방법, 형태소로 나누어 형태소를 비교하는 방법, 자소 단위로 나누어 단어를 비교하는 방법 등 다양한 방벙이 있다. 

본 포스팅에서는 그 중에서도 딥러닝을 기반으로 텍스트의 유사도를 측정하는 방식을 주로 다룰 것이다. 단어, 형태소, 유사도의 종류에 상관 없이 텍스트를 벡터화한 후 벡터화된 각 문장간의 유사도를 측정하는 방식이다. 그리고 자주 쓰이는 4개의 유사도 측정 방법에 대해 알아 볼 것이다.

 

  1. 자카드 유사도(Jaccard Similarity)
  2. 코사인 유사도(Cosine Similarity)
  3. 유클리디언 유사도 (Eucilidean Similarity)
  4. 맨하탄 유사도(Manhattan Similarity)

 

1. 자카드 유사도

자카드 유사도(Jaccard Similarity), 또는 자카드 지수는 두 문장을 각각 단어의 집합으로 만든 뒤 두 집합을 통해 유사도를 측정하는 방식 중 하나다. 유사도를 측정하는 방법은 두 집합의 교집합인 공통된 단어의 개수를 두 집합의 합집합 즉, 전체 단어의 수로 나누면 된다. 결과값은 공통의 원소의 개수에 따라 0과 `사이의 값이 나올 것이고, 1에 가까울수록 유사도가 높다는 의미이다. 

자카드 유사도

 

 

Jaccard index - Wikipedia

From Wikipedia, the free encyclopedia Jump to navigation Jump to search measure of similarity and diversity between sets The Jaccard index, also known as the Jaccard similarity coefficient , is a statistic used for gauging the similarity and diversity of s

en.wikipedia.org

 

2. 코사인 유사도

코사인 유사도는 두 개의 벡터값에서 코사인 각도를 구하는 방법이다. 코사인 유사도 값은 -1과 1 사이의 값을 가지고 1에 가까울 수록 유사하다는 것을 의미한다. 코사인 유사도는 유사도를 계산할 때 가장 널리 쓰이는 방법 중 하나다. 다른 유사도 접근법에 비해 일반적으로 성능이 좋은데 이는 단순히 좌표상의 거리를 구하는 다른 유사도 측정 방법에 비해 코사인 유사도는 말 그대로 두 벡터 간의 각도를 구하는 것이라서 방향성의 개념이 더해지기 때문이다. 두 문장이 유사하다면 같은 방향을 가리킬 것이고 유사하지 않을수록 직교로 표현될 것이다.

 

사이킷런에서 코사인 유사도를 구할 수 있는 모듈을 제공해주고 있다.

from sklearn.metrics.pairwise import cosine_similarity

코사인 유사도

 

Cosine similarity - Wikipedia

From Wikipedia, the free encyclopedia Jump to navigation Jump to search measure of similarity between vectors of an inner product space Cosine similarity is a measure of similarity between two non-zero vectors of an inner product space. It is defined to eq

en.wikipedia.org

 

3. 유클리디언 유사도

유클리디언 유사도는 가장 기본적인 거리를 측정하는 유사도 공식이며 공식은 다음과 같다.

유클리디언 유사도

여기서 구하는 거리는 유클리디언 거리 혹은 L2 거리(L2-Distance)라고 불리며, n차원 공간에서 두 점 사이의 최단 거리를 구하는 접근법이다. 

앞서 확인했던 유사도 방식들은 모두 0과 1사이의 값을 가졌는데, 유클리이던 유사도는 1보다 큰 값이 나올 수 있다. 일반적으로 유클리디언 유사도는 단순히 두 점 사이의 거리를 뜻하기 때문에 값에 제한이 없이 계속 커질 수 있다. 이러한 제한이 없는 유사도 값은 사용하기 어렵기 때문에 값을 제한해야 한다.

앞선 유사도 측정 방식과 동일하게 0과 1사이의 값을 갖도록 만들어 주는 작업이 필요하다. 벡터화된 문장을 일반화 한 후 다시 유클리디언 유사도를 측정하면 0과 1사이의 값을 갖게 된다. 여기서 L1 정규화 방법을 사용하겠다. L1 정규화 방법은 각 벡터 안의 요소 값을 모두 더한 것이 크기가 1이 되도록 벡터들의 크기를 조절하는 방벙이다. 즉, 벡터의 모든 값을 더한 뒤 이 값으로 각 벡터의 값을 나누면 된다.

#L1 정규화 코드

import numpy as np

def L1_nomalize(v):
	return v/ np.sum(v)

사이킷런에서 유클리디언 유사도를 구하는 모듈을 제공해주고 있다.

from sklearn.metrix.pairwise import euclidean_distances

 

4. 맨하탄 유사도

맨하탄 유사도(Manhattan Similarity)는 맨하탄 거리를 통해 유사도를 측정하는 방법이다. 맨하탄 거리란 사각형 격자로 이뤄진 지도에서 출발점에서 도착점까지를 가로지르지 않고 갈 수 있는 최단 거리를 구하는 공식이다. 유클리디언 거리를 L2 거리(L2-Distance)라고 부르는 반면 맨하탄은 L1 거리(L1-Distance)라고 부른다. 다음은 맨하탄 거리를 구하는 공식이다.

         빨간선=맨하탄거리        초록선=유클리디언 거리

맨하탄 유사도 또한 유클리디언 거리와 마찬가지로 거리를 통해 유사도를 측정하는 방법이라 값이 계속해서 커질 수 있다. 따라서 0과 1사이의 값을 갖도록 L1 정규화 방법을 사용해 벡터 안의 요소 값을 정규화한 뒤 유사도를 측정한다.

 

Taxicab geometry - Wikipedia

From Wikipedia, the free encyclopedia Jump to navigation Jump to search Type of geometry using Manhattan or L1 metric A taxicab geometry is a form of geometry in which the usual distance function or metric of Euclidean geometry is replaced by a new metric

en.wikipedia.org

사이킷런에서 맨하탄 유사도를 구하는 모듈을 제공해주고 있다.

from sklearn.metrics.pairwise import manhattan_distances

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/11   »
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
글 보관함