본문 바로가기
  • 기술을 이야기하지만 사람을 생각합니다.
20. 인공지능과 딥러닝

Deep Learning Cookbook :: Chapter 03 단어 임베딩을 사용하여 텍스트 유사성 계산하기 (1)

by WE DONE IT. 2019. 3. 10.

03 단어 임베딩을 사용하여 텍스트 유사성 계산하기

 

 

 

 

Deep Learning Cookbook
[그림] Deep Learning Cookbook

 

이 책은 (주)느린생각에서 'Deep Learning Cookbook' 책을 지원 받아 이 책을 교재로 스터디를 진행하였습니다. 이 글은 Deep Learning Cookbook의 3장 <단어 임베딩을 사용하여 텍스트 유사성 계산하기>를 실습을 목적으로 공부한 내용을 정리한 글입니다.


3장의 앞 부분은 다른 스터디원이 정리한 포스트를 참고해 주세요!

Chapter 3.1 단어 임베딩 관련 포스트 

 

Chapter 3 : 단어 임베딩을 사용하여 텍스트 유사성 계산하기

Note : 이 포스터는 (주)느린생각의 지원을 받아 딥러닝 쿡북이라는 교재로 스터디를 하고 작성하는 포스터입니다. 이론은 딥러닝을 이용한 자연여 처리 입문(https://wikidocs.net/22660) 교재를 사용하였고 코드..

eda-ai-lab.tistory.com

Chatper 3.1 단어 임베딩 + 3.4 SVM 시각화 관련 포스트

 

Main

이 블로그의 내용은 DeepLearning Cookbook이라는 교재를 참고하여 작성한 글이며, 포스팅 목적은 해당 내용을 이해하고 실행할 수 있도록 도움을 주기 위함입니다. 부족한 부분은 관련 자료를 통해 설명을 하였습..

daljoong2.tistory.com

 


3.3. 단어 임베딩 시각화

문제

단어 임베딩이 객체 집합을 분할하는 방법

 

해결

t-SNE(t-distributed stochastic) 알고리즘을 이용하면 300차원과 같은 고차원 공간을 사람이 인지할 수 있는 2차원으로 축소하여, 좀 더 쉽게 해석할 수 있다.

 

t-SNE으로 300차원 공간을 2차원으로 축소하면 결과는 아래와 같다.

 

 
 

 

 

오류가 나므로 파일 이름을 "GoogleNews-vectors-negative300.bin" 으로 변경한 뒤 코드를 실행하면 된다.

 
[t-SNE] Computing 17 nearest neighbors...
[t-SNE] Indexed 18 samples in 0.001s...
[t-SNE] Computed neighbors for 18 samples in 0.009s...
[t-SNE] Computed conditional probabilities for sample 18 / 18
[t-SNE] Mean sigma: 0.581543
[t-SNE] Computed conditional probabilities in 0.020s
[t-SNE] Iteration 50: error = 60.7847748, gradient norm = 0.7886704 (50 iterations in 0.027s)
[t-SNE] Iteration 100: error = 61.2921944, gradient norm = 0.4299120 (50 iterations in 0.013s)
[t-SNE] Iteration 150: error = 52.9808693, gradient norm = 0.0496481 (50 iterations in 0.013s)
[t-SNE] Iteration 200: error = 54.7292290, gradient norm = 0.1720696 (50 iterations in 0.014s)
[t-SNE] Iteration 250: error = 50.6168594, gradient norm = 0.1087890 (50 iterations in 0.016s)
[t-SNE] KL divergence after 250 iterations with early exaggeration: 50.616859
[t-SNE] Iteration 300: error = 0.8112949, gradient norm = 0.0012971 (50 iterations in 0.013s)
[t-SNE] Iteration 350: error = 0.6075364, gradient norm = 0.0006353 (50 iterations in 0.013s)
[t-SNE] Iteration 400: error = 0.4851717, gradient norm = 0.0006334 (50 iterations in 0.013s)
[t-SNE] Iteration 450: error = 0.2509334, gradient norm = 0.0008011 (50 iterations in 0.015s)
[t-SNE] Iteration 500: error = 0.1563788, gradient norm = 0.0001507 (50 iterations in 0.013s)
[t-SNE] Iteration 550: error = 0.1497200, gradient norm = 0.0000897 (50 iterations in 0.014s)
[t-SNE] Iteration 600: error = 0.1452281, gradient norm = 0.0000978 (50 iterations in 0.014s)
[t-SNE] Iteration 650: error = 0.1221646, gradient norm = 0.0001468 (50 iterations in 0.013s)
[t-SNE] Iteration 700: error = 0.1077207, gradient norm = 0.0000568 (50 iterations in 0.013s)
[t-SNE] Iteration 750: error = 0.1052061, gradient norm = 0.0000623 (50 iterations in 0.014s)
[t-SNE] Iteration 800: error = 0.0988510, gradient norm = 0.0000459 (50 iterations in 0.016s)
[t-SNE] Iteration 850: error = 0.0980938, gradient norm = 0.0000230 (50 iterations in 0.019s)
[t-SNE] Iteration 900: error = 0.0975218, gradient norm = 0.0000267 (50 iterations in 0.019s)
[t-SNE] Iteration 950: error = 0.0961482, gradient norm = 0.0000276 (50 iterations in 0.016s)
[t-SNE] Iteration 1000: error = 0.0974766, gradient norm = 0.0000160 (50 iterations in 0.014s)
 
 
 

 

 

t-SEN 결과
[그림] t-SEN 사용한 결과 2차원으로 표현됨

 

고찰

t-SNE 알고리즘은 고차원 공간에서의 정보를 저차원으로 축소하여도 점 사이의 거리(관계)를 유지하도록 최선의 투영 방법을 반복적으로 찾는다. 더 복잡한 경우에는 복잡도 파라미터 (perplexity parameter)를 이용할 수 있으며, 로컬 정확도와 전체 정확도 사이의 균형을 결정하며 클러스터를 생성한다. 

 

 

책에 서술된 내용은 여기까지이며, 추가로 t-SNE 알고리즘과 복잡도 파라미터에 대해서 정리해 보았습니다.

 

 

t-SNE 알고리즘

사람의 눈은 3차원 이상은 시각적으로 인지하기 어렵기 때문에, 고차원 벡터를 시각화하는 것은 기계학습의 주요 고민 중 하나이다. 1960년대부터 고차원 벡터를 시각화하기 위해 차원 축소를 하는 알고리즘인 MDS(Multi-Dimensional Scaling), LLE(Locally Linear Embedding) 등 다양한 방법들이 제안되었다.

 

PCA(Principal Components Analysis) 또한 고차원 벡터의 거리 정보를 보존하여 저차원으로 축소하는 알고리즘이다. PCA는 차원을 축소할 때 선형 분석 방식을 이용하기 때문에 축소하여 클러스터링된 데이터들이 뭉쳐있어 제대로 구분하기 어렵다. 따라서 클러스터링 간의 변별력을 높이는 데 한계가 있다.

 

이 문제를 해결할 수 있는 알고리즘이 t-stochastic neighbor embedding (t-SNE, 티스니)이다. t-SNE는 데이터의 비선형 차원을 축소하는 알고리즘으로, Word2vec로 임베딩한 텍스트를 클러스터링이나 2, 3차원으로 축소하여 시각화할 때 사용할 수 있다. 

 

Stochastic Neighbor Embedding (SNE)

2002년에 발표된 Stochastic Neighbor Embedding (SNE)란 고차원 공간에 있는 데이터 x의 이웃 간의 거리(유사도)를 최대한 보존한 저차원의 y를 학습하는 방법론이다. 즉, 원 공간에서 데이터 간의 유사도 p_ij와 임베딩한 데이터 공간에서의 유사도 q_ij를 정의한다.

 

 

p_j_i
[식] 고차원 공간에서의 식

 

j|i 식은 고차원의 원 공간에서 존재하는 i번째 개체 x_i가 주어졌을 때, j번째 이웃인 x_j가 선택될 확률을 의미한다.

 

q_j_i
[식] 차원 공간에서의 확률을 구하는 식

 

j| 식은 저차원에 임베딩된 i번 째 개체 yi가 주어졌을 때 j번 째 이웃인 yj가 선택될 확률을 뜻한다.

 

하지만 이 방법은 crowding problem이 있으며, 이 문제를 해결하고자 Maaten, L. V. D., & Hinton, G.(2008)은 t-SNE을 제안하였다.

논문에서 얘기하는 SNE와 t-SNE의 차이점은 다음과 같다.

 

1. Cook et al. (2007)이 간략하게 소개한 기울기를 가진 SNE 비용 함수의 대칭 버전을 사용한다.

2. 저차원 공간의 두 점 사이의 유사도를 계산하기 위해 Gaussian 분포보다는 Student-t 분포를 사용한다.

 

 

 

* Student-t 분포는 정규 분포의 평균을 측정할 때 주로 사용되는 분포이다.

 

The cost function used by t-SNE differs from the one used by SNE in two ways: (1) it uses a symmetrized version of the SNE cost function with simpler gradients that was briefly introduced by Cook et al. (2007) and (2) it uses a Student-t distribution rather than a Gaussian to compute the sim- ilarity between two points in the low-dimensional space.

 

(이 글은 추후 t-SNE에 대해 더 추가할 예정입니다.)

 

* 3장 다음 포스트

Deep Learning Cookbook :: Chapter 03 단어 임베딩을 사용하여 텍스트 유사성 계산하기 (2) (feat. SVM)


References

 
 
 
 
 

 

댓글