일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 분산 학습
- nccl 업그레이드
- GaN
- Transformer
- gru-d
- nccl 설치
- first pg on this rank that detected no heartbeat of its watchdog.
- pre-trained llm
- irregularly sampled time series
- timesfm
- 토픽모델링
- pytorch
- 불규칙적 샘플링
- 의료정보
- 패혈증 관련 급성 호흡곤란 증후군
- m/m/s
- timellm
- Time Series
- ERD
- queueing theory
- 딥러닝
- moirai
- length of stay
- 리뷰
- multi gpu
- operation management
- 대기행렬
- ed boarding
- nccl 업데이트
- NTMs
- Today
- Total
데알못정을
SVD(singular value decomposition) & LSA(Latent Semantic Analysis) 본문
SVD(singular value decomposition) & LSA(Latent Semantic Analysis)
쩡을이 2022. 12. 19. 14:041. 특이값 분해(Singulart Value Decomposition, SVD)
특이값 분해(Singular Value Decomposition, SVD)란 실수 벡터 공간에서 A가 m $\times$ n 행렬일 때, 다음과 같이 3개의 행렬의 곱으로 분해(decomposition)하는 것을 말한다.
$$A=U\sum_{}^{}V^T$$
여기서 각 3개의 행렬은 다음과 같은 조건을 만족한다.
$$U: m\times m 직교행렬$$
$$V: n\times n 직교행렬$$
$$\sum : m\times n 직사각대각행렬$$
직교행렬(orthogonal matrix)이란 자신과 자신의 전치 행렬(transposed matrix)의 곱 또는 이를 반대로 곱한 결과가 단위행렬(identity matrix)이 되는 행렬을 말한다.(직교행렬의 성질에 대한 직관적 이해를 하고 싶다면 여기를 참고하면 좋습니다.) 또한 대각행렬(diagonal matrix)이란 주대각선을 제외한 곳의 원소가 모두 0인 행렬을 의미한다. 이때 SVD로 나온 대각행렬($\sum$)의 대각 원소의 값을 행렬 A의 특이값(singular value)라고 한다.
2. LSA(Latent Semantic Analysis)
LSA는 TF-IDF 행렬을 분석해서 단어들을 주제(topic)들로 요약하는 알고리즘 중 하나이다. LSA는 또한 주제 차원들의 다양성이 유지되도록 주제들은 최적화한다. 원래의 단어들 대신 단어들에서 얻은 주제들로도 문서들의 뜻(의미)을 상당히 많이 포착할 수 있다. 문서들의 의미를 포착하는 데 필요한 주제의 수(즉, 주제 벡터의 차원 수)는 어휘의 단어 수(TF-IDF의 차원수이다.)보다 훨씬 작다. 그래서 LSA를 하나의 차원 축소 기법이라고 칭할 때가 많다. LSA는 문서들의 의미를 포착하는데 필요한 차원의 수를 줄인다. LSA는 TDM(term document matrix) 행렬을 이용하여, 문서와 문서, 단어와 단어, 문서와 단어의 의미 관계를 분석할 수 있다. LSA를 통해 결과적으로 문서와 단어는 각각 하나의 점으로 표현되며 거리를 바탕으로 문서와 단어의 유사도를 표현할 수 있다.
그림 2와 같이 단어-문서 동시발생 행렬이 존재할 때 이 행렬을 가지고 SVD를 수행하게 되면 그림 3과 같다.
LSA는 다른 알고리즘에 비해 간단한 것 같다. 단지 SVD를 수행하는데에 있어서 출발점을 TDM 행렬을 이용하고, 분해된 3가지의 행렬에 의미를 부여했다. 분해된 3가지의 행렬의 의미를 정리하면 다음과 같다.
1.$U: $단어(m) - 토픽(r) 간의 유사도, 즉 행렬에서 열에 해당하는 것은 r개의 토픽들이며 행에 해당하는 것은 m개의 단어들이다. 각 단어가 어떤 토픽과 얼만큼 연관이 있는지 알 수 있다.
2.$\sum :$r개의 토픽 별 가중치(중요도), 개인적인 이해로는 TDM에 대하여 r개의 토픽 중 어떤 토픽이(r개 중 몇개가) 중요한지, 문서를 잘 표현하는지 알 수 있다고 생각했다.
3.$V: $ 토픽(r) - 문서(n)간의 유사도 행렬, 즉 각 문서 단위에서 어떤 토픽들이 연관이 있는지 알 수 있다.
LSA는 임의의 벡터들에 대한 선형 변환을 수행하는 “최선의” 방법을 찾기 위한 수학 기법이라 할 수 있다. NLP의 경우 선형 변환 대상은 TF-IDF 벡터나 BOW 벡터이다. 그리고 여러 NLP 응용에서 그러한 “최선의” 방법은 단어 빈도들의 분산(variance)이 최대가 되도록, 다시 말해 단어 빈도들의 차이가 최대한 커지도록 새 벡터들의 축(차원)들을 정렬하는 것이다. 그런 식으로 새 벡터 공간을 구했다면, 여러 문서에 대한 벡터들의 분산에 별로 기여하지 않는 축들을 제거함으로써 벡터 공간을 축소할 수 있다. 이런 방식의 특이값 분해를 절단된 특잇값 분해(truncated singular value decomposition), 줄여서 절단된 SVD라고 부른다. 이 기법은 주성분 분석(PCA)과 같은 것이다.
주성분 분석에서 차원을 몇 개로 줄일 것인지 결정하는 것과 같이 LSA에서는 중요한 의미 변수라고 판단되는 것을 k 개만큼 선택하여 행렬을 다시 구성한다.(그림 6은 k=2일 때이다.) 이러한 의미 변수는 선택한 개수에 따라서 결과값이 달라질 수 있으며, 최적의 개수 선택의 명확한 기준은 없다. 다만, 매우 큰 데이터의 경우, 100~300개의 의미 변수를 선택하는 것이 최적인 것으로 다수의 실험에서 밝혀진 바 있다. 이러한 LSA 다음과 같은 단점이 존재한다.
1) 새로운 문서나 단어가 추가되면 처음부터 작업(SVD)을 새로 시작해야 한다.
2) 단어의 순서 고려가 없다.
- 문서 내 단어별 위치 정보는 무시하고, 단지 동시 발생 행렬만을 사용한다.
- Although I did not get 95 in last TOEFL, I could get in the Ph.D program 문장과
Although I did get 95 in last TOEFL, I could not get in the Ph.D program 문장은 뜻이 다르다.
3. Sammary
1. LSA는 단어문서동시발생 행렬(TDM)을 이용하여 문서, 단어, 토픽 간의 관계를 밝히는 알고리즘이다.
2. LSA는 특이값 분해(SVD)를 이용하여 구현할 수 있다.
3. 분해한 행렬 중 시그마 행렬을 통해 토픽의 갯수를 몇개로 지정할 것인지 선택할 수 있다.
4. 단순히 특이값 분해로 얻어진 결과이기 때문에 단어의 순서에 담겨 있는 의미 고려를 할 수 없다.
참고문헌
[1] Benjamin Bengfort. 『Applied Text Analysis with Python』. Jpub, 2019.
[2] Hobson Lane. 『Natural Language Processing in Action』. Jpub, 2020.
'Topic Modeling' 카테고리의 다른 글
Dirichlet Distribution & LDA(Latent Dirichlet Allocation) (1) | 2022.12.19 |
---|---|
pLSA(Probabilistic Latent Semantic Analysis) (1) | 2022.12.19 |
Cosine Similarity & TF-IDF (0) | 2022.12.19 |
Topic Modeling 이란? (0) | 2022.12.19 |