자연어 처리를 공부하면서 읽는 책(https://wikibook.co.kr/nlp/) 내용중에
유사도에 대해서 나온 내용이 있어 해당 내용과 더불어 각종 자료를 찾아 정리합니다.
유사도는 문장이 유사한지 측정해야 할 때 사용합니다.
텍스트 유사도에서 사용되는 것입니다.
자주 쓰이는 유사도
- 자카드 유사도
- 유클리디언 유사도
- 맨하탄 유사도
- 코사인 유사도
가 있습니다.
유클리디언은 유클리디안 거리(Euclidean Distance)을 이용하고
맨하탄 유사도는 맨하탄 거리(Manhattan Distance)를 이용하는 등의 특징이 있죠
하나씩 정리를 해봅니다
1. 자카드 유사도
자카드 유사도(자카드 지수)는 두 문장을 각각 단어의 집합으로 마든 뒤 두 집합을 통해 유사도를 측정하는 방식 중 하나입니다. 측정하는 방법은 두 집합의 교집합을 두 집합의 합집합으로 나눠줍니다.
자카드 유사도(자카드 지수)의 공식은 위와 같습니다.
예시를 들어보면
두 문장의 교집합 개수는 6개, 합집합 개수는 24개이므로 자카드 유사도는 6/24 = 0.25 정도 됩니다
2. 코사인 유사도
코사인 유사도는 두 개의 벡터값에서 코사인 각도를 구하는 방법입니다. -1 ~ 1 사이의 값을 가지고 1에 가까울수록 유사하다는 것을 의미합니다. 이 유사도는 많이 사용되는데요. 이 이유는 단순히 좌표 상의 거리를 구하는 것에 비해 코사인 유사도는 두 벡터간의 각도를 구하는 것이기에 방향성의 개념이 더해지기 때문입니다.
그래서 문장이 유사하다면 같은 방향, 유사하지 않으면 직교 등으로 표현됩니다.
3. 유클리디안 유사도
유클리디안 유사도는 가장 기본적인 거리를 측정하는 유사도 공식입니다.
유클리디안 유사도는 유클리디안 거리라고 불리우죠. 그리고 L2 거리(L2 distance)라고도 불립니다. n차원 공간에서 두 점 사이의 최단 거리를 구하는 접근 방법입니다.
근데 앞서서 봤던 유사도들은 값이 0~1사이라던가 -1 ~ 1 이라던가 값의 범위가 정해져있는데 유클리디안은 값의 범위가 정해져있지 않습니다. 왜냐하면 거리이기 때문에 그렇습니다. 그래서 머신러닝이나 딥러닝을 할 때는 L1 정규화를 사용합니다. L1 정규화(L1 normalize)는 각 벡터 안의 요소 값을 모두 더한 것이 크기가 1이 되도록 벡터들의 크기를 조절하는 방법입니다.
4. 맨하탄 유사도
멘하탄 유사도는 멘타한 거리(Manhattan Distance)를 이용해서 유사도를 측정하고 흔히 L1 거리(L1 Distance)라고도 불리웁니다.
맨하탄 거리는 사각형 격자로 이뤄진 지도에서 출발점에서 도착점까지를 가로지르지 않고 갈 수 있는 최단 거리를 구하는 공식입니다.
위와 같은 그림이 있으면 유클리디언 거리(L2 거리, L2 Distance)는 초록색 선을 의미합니다.
이거는 도로에서 아무런 장애물이 없다고 가정했을 때 나오는 거라서 현실성이 부족합니다.
맨하탄 거리는 여기서 노란색 선을 의미합니다.
간단하게는 출발점에서 도착점까지의 가로, 세로 길이를 더하여 맨하탄 거리를 계산할 수 있습니다.
일반화 시키면 이렇게 됩니다.
여기까지 자카드 유사도, 코사인 유사도, 맨하탄 유사도(맨하탄 거리, L1 Distance), 유클리디안 유사도(유클리디안 거리, L2 distance)를 알아보았습니다.
'python' 카테고리의 다른 글
centos에 python3.x 설치하기! (2) | 2019.04.24 |
---|---|
tensorflow의 tf.concat에 대해서 알아보기(axis = 0, 1에 따른 변화) (0) | 2019.03.18 |
파이썬 형태소 분석기 konlpy 윈도우에 설치하기 (4) | 2019.02.26 |
파이썬(python)으로 SNS 텍스트 데이터 분석하기(python word2vec, python 크롤링) (4) | 2019.02.25 |
파이썬으로 업무 자동화하자! 데이터 흐름도(data flow chart) 만들기 (6) | 2019.02.25 |