1-3. SVD Application

Bard·2023년 3월 14일
3
post-thumbnail
post-custom-banner

본 글은 K-MOOC의 인공지능 수학 고급(Advanced Mathematics for AI) 강의를 듣고 요약한 글입니다.

Question

1-1. Data representation 에서 봤던 데이터를 다시 가져오자.

d1d_1: Romeo and Juliet
d2d_2: Juliet O happy dagger
d3d_3: Romeo died by dagger
d4d_4: Live free or die that is the New-Hampshire's motto
d5d_5: Did you know New-Hampshire is in New-England

자, 여기에서 diedagger에 관련된 문서를 찾으라는 문제가 나왔다면 어떻게 접근할 수 있을까?

d2d_2, d3d_3, d4d_4은 제목에 단어들이 있다. 아마 연관성이 있을 것이다.
d5d_5는 아무 단어도 없다. 그리고 연관성도 없다.
d1d_1은 아무 단어도 없다. 하지만..? 사실 로미오와 줄리엣은 diedagger와 연관이 있는 소설의 제목이다.

이러한 숨은 의미를 발견할 수 있을까?

Solution: Latent Semantic Indexing

우리는 문서들에 숨은 의미를 찾아내야 한다.

1-1. Data representation 에서 만들었던 행렬을 다시 가져오자.

romeojuliethappydaggerlivediefreeNew-Hampshire
d1d_111000000
d2d_201110000
d3d_310010100
d4d_400001111
d5d_500000001

이 행렬을 분해하여 숨은 의미를 찾을 수 있지 않을까?

우리는 1-2. Matrix Decomposition 에서 여러 분해 기법을 살펴보았고, 해당 행렬은 정사각행렬이 아니기 때문에 마지막으로 다룬 SVD가 가능해보인다.

잠깐 SVD에 대해서 짚고 넘어가자.
주어진 행렬 AM×NA_{M\times N}AM×N=UM×MΣM×NVN×NTA_{M\times N} = U_{M\times M}\Sigma_{M\times N}{V_{N\times N}}^T 로 분해하는 것을 full SVD라고 부른다.
실제로 이와같이 full SVD를 하는 경우는 드물며 아래 그림들과 같이 reduced SVD를 하는게 일반적이다.

  • thin SVD
  • compact SVD
  • truncated SVD

여기서 우리는 데이터들간의 유사성을 판병해야 하고 2차원 평면 위에서 쉽게 표현하기 위해 다음과 같은 reduced SVD를 적용할 것이다.

A5×8=U5×2Σ2×2(V2×8)TA_{5\times 8} = U_{5\times 2}\Sigma_{2\times 2}(V_{2\times 8})^T

그 결과 아래와 같은 데이터들을 얻을 수 있다.

Σ=[2.285002.010]U=[0.3110.3630.4070.5470.1430.229]d1d2d5V=[0.3960.2800.3140.4500.3260.460]romeojulietnewhampshire\Sigma = \begin{bmatrix} 2.285 & 0 \\ 0 & 2.010 \end{bmatrix}\\\,\\ U = \begin{bmatrix} -0.311 & 0.363 \\ -0.407 & 0.547 \\ \vdots & \vdots \\ -0.143 & -0.229 \end{bmatrix} \larr \begin{matrix} d_1 \\ d_2 \\ \vdots \\ d_5 \end{matrix} \\\,\\ V = \begin{bmatrix} -0.396 & 0.280 \\ -0.314 & 0.450 \\ \vdots & \vdots \\ -0.326 & -0.460 \end{bmatrix} \larr \begin{matrix} \rm{romeo} \\ \rm{juliet}\\ \vdots \\ \rm{new-hampshire} \end{matrix}

여기에서 본래의 가중치(특이값, Singular value)를 각각 UUVV에 곱해주면 각각의 문서, 단어들의 벡터를 구해줄 수 있다.
(Document vector: UΣU\Sigma, Word vector: ΣVT\Sigma V^T)

d1=[0.7110.730],d2=[0.9301.087],d3=[1.3570.402],d5=[0.3270.460],romeo=[0.9050.563],juliet=[0.7170.905],dagger=[1.0010.742],die=[1.1970.494]d_1 = \begin{bmatrix} -0.711\\ 0.730 \end{bmatrix}, d_2 = \begin{bmatrix} -0.930\\ 1.087 \end{bmatrix}, d_3 = \begin{bmatrix} -1.357\\ 0.402 \end{bmatrix}, d_5 = \begin{bmatrix} -0.327\\ 0.460 \end{bmatrix}, \\\,\\ \rm{romeo} = \begin{bmatrix} -0.905\\ 0.563 \end{bmatrix},juliet = \begin{bmatrix} -0.717\\ 0.905 \end{bmatrix}, dagger = \begin{bmatrix} -1.001\\ 0.742 \end{bmatrix}, die = \begin{bmatrix} -1.197\\ -0.494 \end{bmatrix}

자 이제 쿼리의 벡터를 구해주기 위해 die 벡터와 dagger 벡터의 평균을 내주자.

q=[1.0990.124]q=\begin{bmatrix} -1.099\\ 0.124 \end{bmatrix}

마지막으로 문서들과 쿼리 벡터를 2차원 평면위에 나타내어 보자.

그 결과 겉으로는 둘 다 아무 단어도 포함되어 있지 않은 d1d_1d5d_5였지만, 현재는 d1d_1이 더 좁은 각도를 나타내는 것을 볼 수 있다.

이런 식의 분석법을 Latent Semantic Indexing이라고 한다.

profile
The Wandering Caretaker
post-custom-banner

5개의 댓글

comment-user-thumbnail
2023년 3월 14일

??

1개의 답글
comment-user-thumbnail
2023년 3월 17일

흥미롭네요,,

1개의 답글
comment-user-thumbnail
2023년 3월 20일

That was so amazing I need that. Tim Hortons Survey

답글 달기