Math4AI-3주차-SVD-강의록.pdf

열린 문제

2-3: 감정의 유사도 판단

어떤 두 값의 유사도를 판단하는 것은 간단하다가도 생각보다 복잡한 작업입니다. 예를 들어, ‘행복함’이라는 지수가 있다고 하고, 두 사람(A, B)의 행복함의 정도가 유사한지 판단해보겠습니다. 이때, 보통 지수의 차(즉, 거리)를 유사도라고 정의할 수 있을 것입니다. 즉, $|A_0 - B_0|$입니다. 행복함이 0.3인 사람 A와 0.8인 사람 B가 있을 때, 행복함이 0.7인 사람은 B에 더 가까운 감정을 갖게 되는 것입니다.

문제는 지수의 가짓수가 늘어날 때 생깁니다. 대부분의 값은 단 한 개의 스칼라 값으로 표현하기 애매하기 때문에 벡터의 형태로 표시합니다. 사람의 감정을 값들의 순서쌍, 즉 벡터로 표시한다고 하겠습니다. (기쁨, 화, 두려움, 역겨움, 슬픔, 놀라움) 정도로 표시할 수 있을 것입니다. [1] 이 때 두 감정의 유사도는 거리를 통해 쉽게 계산할 수 있습니다.

다만, 이렇게 분류할 경우 슬픈 사람 A와 기쁜 사람 B에 대해, 두려운 사람 C는 명백하게 A에 가까워보이는 반면 이 분류에서는 관련없는 내용이 되어버립니다. 따라서, 감정을 새롭게 분류할 필요가 있어보입니다. Circumplex model(러셀 모델)에 따르면, 감정을 유쾌한 정도(valence)와 흥분한 정도라는 두 개의 지수를 이용해서 분류합니다. [2] 인터넷에 관련 자료를 찾아봤을 때 감정차원 모델링 방법에 관한 내용을 많이 발견할 수 있었습니다.

이미지 출처

이미지 출처

이렇게 감정을 모델링한 후에는, 감정 사이의 유사도를 거리로 측정할 수 있게 됩니다. 한번 임의의 값을 입력해서 유사도를 측정해보겠습니다.

A = vector([1.2, 0.1]) # 기쁨
B = vector([-1.1, -0.9]) # 우울함

X = vector([1.3, 1.0]) # 흥분함

sim_a = abs(X - A)
sim_b = abs(X - B)

print(f"A와 X의 유사도: {sim_a}")
print(f"B와 X의 유사도: {sim_b}")
if sim_a > sim_b:
	print("X와 더 유사한 개체: A")
else:
	print("X와 더 유사한 개체: B")

이 글에서 유사도를 판단하는 작업을 한번 해보았는데, 유사도라는 값이 실제로 두 값이 다른 정도를 잘 반영할 수 있을지가 의문이었습니다. 그리고 여기서는 두 개체 사이의 유사도만 판단했지만, 실제로는 그룹과 개체 사이의 유사도를 구할 경우도 있을텐데, 이때에는 어떤 방법을 써야 할지 추후 연구해보겠습니다.


참고문헌: [1] Ekman’s categorical emotion model, [2] A circumplex model of affect.