이제 분석을 위해 네 개의 계층을 합산하여 만든 벡터를 사용합니다.
코드 10-68 단어 벡터 확인
print("사과가 많았다", str(token_vecs_sum[6][:5]))
print("나에게 사과했다", str(token_vecs_sum[10][:5]))
print("사과를 먹었다", str(token_vecs_sum[19][:5]))
다음은 ‘사과가 많았다’, ‘나에게 사과했다’, ‘사과를 먹었다’에 대한 벡터 출력 결과입니다.
사과가 많았다 tensor([-0.5844, -4.0836, 0.4906, 0.8915, -1.8054]) 나에게 사과했다 tensor([-0.8631, -3.4047, -0.7351, 0.9805, -2.6700]) 사과를 먹었다 tensor([ 0.6756, -0.3618, 0.0586, 2.2050, -2.4193])
값이 서로 다른 것을 알 수 있지만 보다 정확한 비교를 위해 벡터 간의 코사인 유사도를 확인해 보겠습니다.
문장에서 ‘사과’라는 단어 사이의 코사인 유사도를 확인합니다.
코드 10-69 코사인 유사도 계산
from scipy.spatial.distance import cosine
diff_apple = 1 - cosine(token_vecs_sum[5], token_vecs_sum[27]) ------ ‘사과가 많았다’와 ‘나에게 사과했다’에서 단어 ‘사과’ 사이의 코사인 유사도를 계산
same_apple = 1 - cosine(token_vecs_sum[5], token_vecs_sum[16]) ------ ‘사과가 많았다’, ‘사과를 먹었다’에 있는 ‘사과’ 사이의 코사인 유사도를 계산
print('*유사한* 의미에 대한 벡터 유사성: %.2f' % same_apple)
print('*다른* 의미에 대한 벡터 유사성: %.2f' % diff_apple)