두 텍스트 데이터가 얼마나 비슷한지를 수치화하는 유사도의 개념과, 집합을 이용한 자카드 유사도·벡터를 이용한 유클리드 유사도를 배웁니다.
| 단계 | 활동 | |
|---|---|---|
| 도입 | 유사도란 무엇일까? | 5분 |
| 활동1 | 자카드 유사도로 리뷰 감성 분석하기 | 20분 |
| 활동2 | 벡터의 크기와 두 벡터 사이의 거리 | 10분 |
| 활동3 | 유클리드 유사도로 리뷰 감성 분석하기 | 15분 |
| 정리 | 확인하기 — 리조트 리뷰 분석 | 5분 |
텍스트 데이터 사이의 유사한 정도를 수치화하여 나타낸 것을 유사도라고 합니다. '비슷한 정도'는 매우 주관적이므로 이를 정량화해야 하는데, 그 방법으로 집합을 이용하는 유사도(자카드 유사도)와 벡터를 이용하는 유사도(유클리드 유사도, 코사인 유사도)가 있습니다.
두 텍스트 데이터 $A, B$에 공통으로 포함된 단어 개수와 전체 단어 개수의 비를 자카드 유사도 $J(A,B)$라고 합니다.
$J(A,B)=\dfrac{n(A\cap B)}{n(A\cup B)}=\dfrac{n(A\cap B)}{n(A)+n(B)-n(A\cap B)}$
자카드 유사도는 0 이상 1 이하의 값을 가지며, 1에 가까울수록 유사, 0에 가까울수록 유사하지 않다고 판단합니다.
어느 음식점 리뷰의 긍정 단어 집합 $P$, 부정 단어 집합 $N$이 다음과 같다고 합시다.
$P=\{$청결하다, 편하다, 좋다, 친절, 빠르다, 맛있다, 많다, 알차다, 최고, 넓다$\}$
$N=\{$불결하다, 불편하다, 별로다, 불친절, 느리다, 맛없다, 적다, 빈약하다, 최악, 좁다$\}$
벡터 $\vec{a}=\overrightarrow{OA}=(a_1,a_2)$에서 시점과 종점 사이의 거리를 벡터의 크기 $|\vec{a}|$라 하고 $|\vec{a}|=\sqrt{a_1^2+a_2^2}$로 구합니다. 두 벡터 $\vec{a}=(a_1,a_2), \vec{b}=(b_1,b_2)$에 대하여 $\overrightarrow{AB}=\vec{b}-\vec{a}$의 크기, 즉 두 종점 사이의 거리는
$d(\vec{a},\vec{b})=|\vec{b}-\vec{a}|=\sqrt{(b_1-a_1)^2+(b_2-a_2)^2+\cdots+(b_n-a_n)^2}$
과 같이 구합니다. 이 거리가 유클리드 유사도이며, 값이 0에 가까울수록 두 데이터가 유사하다고 판단합니다.
긍정 단어 $P=\{$청결하다, 빠르다, 맛있다, 많다$\}$, 부정 단어 $N=\{$불편하다, 별로다, 불친절, 최악$\}$이고 전체집합 $U=\{$청결하다, 빠르다, 맛있다, 많다, 불편하다, 별로다, 불친절, 최악$\}$일 때, 리뷰 X: "이 음식점은 매장이 청결하고 서비스도 빨랐지만, 음식이 별로고 직원들도 불친절해서 불편했습니다."의 유사도를 분석해 봅시다.
$d(\vec p,\vec x)=\sqrt5\approx2.24$, $d(\vec n,\vec x)=\sqrt3\approx1.73$이므로 $\vec x$의 종점이 $\vec n$의 종점에 더 가깝습니다. 따라서 리뷰 X는 부정 리뷰로 분류합니다.
$U=\{$쾌적, 친절, 경치 좋음, 주차 공간 여유, 객실 좁음, 난방 안 됨, 방음 안 됨, 외짐$\}$이고 긍정 단어 $\vec p=(1,1,1,1,0,0,0,0)$, 부정 단어 $\vec n=(0,0,0,0,1,1,1,1)$일 때, 세 리뷰 $\vec a=(2,0,2,2,0,1,1,0)$, $\vec b=(1,0,1,1,0,1,1,0)$, $\vec c=(0,0,1,1,0,1,1,1)$의 감성과 서로 간의 유사도를 알아봅시다.
| 리뷰 | d(p, ·) | d(n, ·) | 분류 |
|---|---|---|---|
| A | √6 ≈ 2.45 | √14 ≈ 3.74 | 긍정 |
| B | √3 ≈ 1.73 | √5 ≈ 2.24 | 긍정 |
| C | √5 ≈ 2.24 | √3 ≈ 1.73 | 부정 |
| 리뷰 간 거리 | d(a, b) | d(b, c) | d(c, a) |
|---|---|---|---|
| 값 | √3 ≈ 1.73 | √2 ≈ 1.41 | √7 ≈ 2.65 |
오늘은 자카드 유사도와 유클리드 유사도로 텍스트 데이터의 유사한 정도를 분석했습니다. 다음 시간에는 벡터의 방향을 이용하는 코사인 유사도를 배우고 Ⅱ단원을 정리합니다.