** 교류학술제 방법론 조사한 내용 발표를 위해 만든 자료이기에 글이 별로 없습니당,,
** 교류학술제 파이팅~ 완료되면 프로젝트 란에 게시할 예정입니다~
- 잠재 의미 분석LSA, 잠재 디리클레 할당LDA
reference
- https://wikidocs.net/book/2155
- https://towardsdatascience.com/latent-dirichlet-allocation-lda-9d1cd064ffa2
- https://www.machinelearningplus.com/nlp/topic-modeling-gensim-python/#1introduction
- https://ratsgo.github.io/from frequency to semantics/2017/06/01/LDA/ (LDA의 자세한 과정으로, 참조하시면 좋을 듯 합니다)
- https://lettier.com/projects/lda-topic-modeling/ (코딩 없이 간단하게 자동으로 계산되는 LDA의 결과를 볼 수 있습니다)
개요
- 카운트 기반의 단어 표현(BoW, DTM, TF-IDF)
- LSA
- LDA
카운트 기반의 단어 표현
- 왜 필요한가? ⇒ LDA, LSA의 input
BoW(Bag of Words) :
- 순서는 고려하지 않고, 빈도만 고려하여 텍스트 데이터의 수치화 표현
- 단, 이때 단어의 순서는 고려하지 않음
ex. "오늘 점심은 삼계탕입니다. 내일도 기대해주세요."
점심만 2번 카운팅 된 것을 볼 수 있습니다.
문서 단어 행렬DTM :
- BoW를 여러 문서의 BoW를 행렬로 표현함
- 한계점
- (1) 희소성 sparse: 0이 많아, 계산에 낭비가 생김
- (2) 단순 빈도 수 기반 접근
단어 빈도 -역 문서 빈도TF-IDF
- 가정 : 모든 문서에 자주 등장하면 중요도가 떨어지고, 특정 문서에만 단어가 자주 등장하면 중요도가 높다 (참고: 정보 이론)
- 방법 : DTM 에 TF-IDF의 가중치를 추가함 (TF-IDF 는 TF 값과 IDF 값을 곱함)
- annotation: 문서-d, 단어-t, 문서의 총 갯수-n
$tf(d,t)$: 특정 문서 d 내에서 특정 단어 t의 등장 횟수
$df(t):$ 특정 단어 t 가 등장한 문서의 수(각 문서 내에서 몇 번인지는 관심 없음)
$idf(t) = \log{\frac{n}{1+df(t)}}$ , $df(t)$의 역수 같은 느낌
TF-IDF 수행 전 (단순 DTM): 각 grid의 값이 $tf(d,t)$임
TF-IDF 수행 후: 각 grid에 $idf(t)$를 곱해준 값
잠재 의미 분석 LSA
- 배경 : 기본적으로 위에서 언급한 BoW, DTM, TF-IDF는 빈도 수만 고려한 수치화 기법이기에, 단어의 의미를 알 수 없다는 한계가 있음. 따라서 잠재적인 의미를 찾기 위해서 고안된 방법이 본 LSA
- 방법 : truncated 특이값 분해 이용
- 특이값 분해 W라는 DTM 혹은 TF-IDF의 행렬이 있을 때, 이를 두 개의 orthogonal 행렬($U, V^{T}$)과 diagonal 행렬($\sum$)의 곱으로 분해함 따라서 오른쪽의 모든 term의 곱이 W와 완벽하게 일치함
$$W = U \sum V^{T}$$
하지만 truncated 특이값 분해는 오른쪽 term의 일부를 잘라서, 오른쪽 term이 완벽하게 A와 동일하지는 않지만, 근사해지도록 함
⇒ (1) 차원 축소 및 (2) 설명력 높은 정보만 남김(PCA와 유사함) 특히, (2)를 통해서 잠재적인 의미를 알 수 있게 되는 것
- $U$: 문서 * 토픽
- $V^{T}$: Topic * 단어
- 예시($V^{T}$에 해당되는 부분) topic 과, 자주 등장하는 상위 5개의 단어 (기준은 TF-IDF)
- 의의: 빠르며 잠재적인 의미를 끌어낼 수 있음
- 한계: 신규 정보에 대한 업데이트가 느림 ⇒ Word2Vec 등 단어의 의미를 벡터화할 수 있는 또 다른 방법론인 인공 신경망 기반의 방법론
잠재 디리클레 할당LDA
- LSA와 LDA의 차이
LSA : DTM을 차원 축소 하여 축소 차원에서 근접 단어들을 토픽으로 묶는다.
LDA : 단어가 특정 토픽에 존재할 확률과 문서에 특정 토픽이 존재할 확률을 추정하여 토픽을 추출한다.
- 가정 : 아래의 과정대로 인간은 문서를 작성함
(1) 문서에 사용할 단어 개수를 정함
(3) 문서에 사용할 단어를 선택함 (위 과정을 (1)에서 고른 문서에 사용할 단어의 개수만큼 반복해서 시행함)
(2) 문서에 사용할 토픽의 비율을 정함( ex. A 토픽 40%, B토픽 60%)
-
- 위에서 정한 토픽의 비율에 기반한 본 문서의 토픽을 정함(40%의 확률로 토픽 A를 고르고, 60%의 확률로 토픽 B를 고름)
-2) 선택한 토픽의 단어 출현 확률 분포에 기반해서 문서에 작성할 단어를 고름
(토픽의 단어 출현 확률 분포란 A토픽에서는 '아이폰'이라는 단어의 비율이 10%, '갤럭시'의 비율이 5% 등등 이런 식 )
따라서 이 과정을 역으로 수행하면서 토픽 모델링을 진행함
- 과정
(1) 토픽 갯수 K 설정(적절하게 값을 설정할 필요가 있음)
(2) 모든 단어를 k 개의 토픽 중 하나에 할당함(랜덤으로 할당하게 됨 틀리게 할당되는 경우가 多)
(3) 모든 문서에 아래의 사항을 반복 시행함
- 단어가 잘못된 토픽에 할당되어 있으며 그 외의 단어들은 옳게 할당되어있다는 가정하에, 아래의 기준에 따라 단어들을 계속해서 토픽에 재 할당함
- 기준: 아래의 두 결합 확률을 곱한 확률
$P(t|d)$ d 문서 내에서 토픽 t에 해당하는 단어의 비율
$P(w|t)$ 토픽 t에서 주어진 단어 w의 비율
- 예시 : apple이라는 단어를 할당해야 하는 상황
- 코드 구현 예시:
'딥러닝 > 기타 리뷰' 카테고리의 다른 글
[음성데이터] 음성데이터 개괄 (0) | 2022.07.11 |
---|---|
[Optimizer]AdamW (0) | 2022.02.10 |
[의료데이터] 단백질 구조 예측 (0) | 2021.11.24 |
[GNN] GCN (0) | 2021.11.23 |
[의료이미지 분석]Introduction to medical image analysis (0) | 2021.09.22 |
댓글