Julia에서 LSA 구현
LSA 설명
LSA의 설명이라고 해도 코드를 보면 한발입니다만, 설명하면
주어진 X라는 행렬이 있습니다. 이것은 각 요소의 문장 i (i = 4)에서 단어의 빈도를 포함하는 행렬입니다.
이것을 특이 값 분해합니다. 특이값 분해의 설명은 구구해 주세요.
그리고 그림과 같이 근사 행렬을 구합니다만, 특이값 분해된 U, S, V 중 S 행렬이 대각선에 특이값이 늘어서 있습니다.
이번에는 k = 2로서 2의 폭으로 행렬을 취득합니다.
U와 V도 마찬가지입니다. 그러면 $\widetilde{U},\widetilde{S},\widetilde{V}^T$를 구할 수 있습니다.
그것을 곱하면 근사 행렬 $\widetilde {X} $가 구해집니다.
더 자세한 정보는 위키백과 또는 참고 문헌을 참조하십시오.
LSA.jl
X = [2 3 0 0 0;2 0 2 0 0;0 0 0 2 2;0 0 0 3 1]
U,S,V = svd(X)
"""
U
4×4 Array{Float64,2}:
0.0 0.874642 -0.484769 0.0
0.0 0.484769 0.874642 0.0
0.661803 0.0 0.0 -0.749678
0.749678 0.0 0.0 0.661803
"""
# Sを対角行列にする.
S =diagm(S)
"""
S
4×4 Array{Float64,2}:
4.13065 0.0 0.0 0.0
0.0 3.9009 0.0 0.0
0.0 0.0 2.40479 0.0
0.0 0.0 0.0 0.968371
V
5×4 Adjoint{Float64,Array{Float64,2}}:
7.10101e-17 0.696974 0.324248 3.19545e-16
-4.73401e-17 0.672647 -0.604754 -2.1303e-16
-7.10101e-17 0.248542 0.727417 -3.19545e-16
0.86491 -0.0 0.0 0.501927
0.501927 0.0 0.0 -0.86491
"""
# 低ランク近似行列を求める
k = 2
U2 = U[:,1:k]
S2 = S[1:k,1:k]
V2 = V[:,1:k]
X2 = U2*S2*V2'
"""
U2
4×2 Array{Float64,2}:
0.0 0.874642
0.0 0.484769
0.661803 0.0
0.749678 0.0
S2
4.13065 0.0
0.0 3.9009
V2
5×2 Array{Float64,2}:
7.10101e-17 0.696974
-4.73401e-17 0.672647
-7.10101e-17 0.248542
0.86491 -0.0
0.501927 0.0
# Xの近似行列
X2
4×5 Array{Float64,2}:
2.378 2.295 0.847998 0.0 0.0
1.318 1.272 0.470001 0.0 0.0
1.94118e-16 -1.29412e-16 -1.94118e-16 2.36438 1.3721
2.19894e-16 -1.46596e-16 -2.19894e-16 2.67833 1.5543
참고문헌
주제 모델을 통한 통계적 잠재 의미 분석
저자 : 사토 이치 마코토
Reference
이 문제에 관하여(Julia에서 LSA 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/NoriakiOshita/items/34f962e9ea83e80fcc69텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)