반응형

배울 점이 많은 강의가 있어서 추천드리며, 시리즈로 글을 쓰고자 합니다.

비정형 데이터 분석 7/11 Topic Modeling LDA

https://youtu.be/_fqzemENFSM

 

키워드 및 핵심 내용

토픽모델링 LDA

LSA, pLSA를 리뷰하면서 LDA 등장배경을 살펴보겠습니다.

LSA

1.TF(단어의 출현빈도) : 단어의 빈도와 중요도가 항상 비례하는 것은 아님

2.TF-IDF(단어가 다른 문서에서도 많이 나타나면 중요도를 줄임)

3.Document-Term 행렬은 공백이 많음 -> 차원축소(Truncated SVD) 필요

pLSA

1.차원축소에 SVD(Singular value Decomposition, 특이값 분해) 대신 확률적 방법 사용

2.P(Document, Term) 과 일치하는 확률모델을 찾는 것

한번도 보지 못한 문서에 대해서는 일반화하지 못함 -> LDA

LDA

1.문서에서의 토픽의 분포, 특정 주제에서의 단어의 분포를 결합해서 사용(디리클레 분포 사용)

2.디리클레 분포 : 분포의 분포


[LDA 추가 자료]

https://blog.naver.com/ericalee97/221678785232

LDA

: 데이터의 분포를 학습하여 분리를 최적화하는 결정경계를 만들어 데이터를 분류하는 모델이다.

PCA가 최적 표현을 위해 최대 분산을 찾아 차원을 축소했다면

LDA는 최적 분류를 위해 분별 정보를 최대한 유지시키면서 차원을 축소하는 방법이다.

Fisher's LDA

: 두 클래스의 중심점은 가능한 멀게, 즉, 클래스 간의 분산은 가능한 크게 하고

클래스 내의 분산은 가능한 작게 함으로써

클래스 내의 분산과 클래스 간의 분산을 동시에 고려한다.

LDA의 목적함수

목적함수 최대화를 위해 w로 미분을 했을 때 나오는 최종식은 아래와 같다.

위의 방정식을 만족시키는 w들은 SW −1SB 행렬의 고유벡터가 된다.

* 고유값 분해 (A𝑣=𝜆𝑣)

성능

: 데이터의 패턴, 내재적 속성을 밝혀내는 것이 중요할 때는 PCA,

데이터가 정규분포를 따르고 class가 동일한 공분산 행렬을 가지면 LDA를 사용하는 것이 더 좋은 성능을 낸다.


[NLP LDA 추가자료]

https://medium.com/@omicro03/%EC%9E%90%EC%97%B0%EC%96%B4%EC%B2%98%EB%A6%AC-nlp-8%EC%9D%BC%EC%B0%A8-lda-f571b4da9d04

잠재 디리클레 할당(Latent Dirichlet Allocation, LDA)

토픽 모델링은 문서의 집합에서 토픽을 찾아내는 프로세스를 말한다. (토픽은 한국어로는 주제라고 한다.)

이는 검색 엔진, 고객 민원 시스템 등과 같이 문서의 주제를 알아내는 일이 중요한 곳에서 사용된다.

잠재 디리클레 할당(Latent Dirichlet Allocation, LDA)은 토픽 모델링의 대표적인 알고리즘이다.

1. 잠재 디리클레 할당(Latent Dirichlet Allocation, LDA)

우선 LDA의 내부 매커니즘에 대해서 이해하기 전에, LDA를 일종의 블랙 박스로 보고 LDA에 문서 집합을 입력했다면, 어떤 결과를 보여주는지 예를 들어보겠다. 아래와 같은 3개의 문서가 있다고 가정한다면, 지금의 예제는 간단해서 눈으로도 토픽 모델링을 할 수 있을 것 같지만, 실제 수십만개 이상의 문서가 있는 경우는 LDA의 알고리즘의 도움이 필요하다.

문서1: 저는 사과랑 바나나를 먹어요

문서2 : 우리는 귀여운 강아지가 좋아요

문서3 : 저의 깜찍하고 귀여운 강아지가 바나나를 먹어요

LDA를 수행할 때 문서 집합에서 토픽이 몇 개가 존재할지 가정하는 것은 사용자가 해야할 일이다. 여기서는 LDA 알고리즘에 2개의 토픽을 찾으라고 요청하겠다. 토픽의 개수를 변수 k라고 하였을 때, k = 2 이다. k의 값을 잘못 선택하면 원치않는 이상한 결과가 나올 수 있다. 이렇게 모델의 성능에 영향을 주는 사용자가 직접 선택하는 매개변수를 머신러닝 용어로 하이퍼파라미터라고 한다. 이러한 하이퍼파라미터의 선택은 여러 실험을 통해 얻은 값일 수도 있고, 우선 시도해보는 것일 수도 있다.

LDA 알고리즘이 위의 세 문서로부터 2개의 토픽을 찾은 결과는 아래와 같다. 여기서는 LDA 입력 전에 주어와 불필요한 조사 등을 제거하는 전처리 과정은 거쳤다고 가정한다. 즉, 전처리 과정을 거친 TDM이 LDA의 입력이 되었다고 가정한다.

LDA는 각 문서의 토픽 분포와 각 토픽 내의 단어 분포를 추정한다.

<각 문서의 토픽 분포>

문서1 : 토픽 A 100%

문서2 : 토픽 B 100%

문서3 : 토픽 B 60%, 토픽 A 40%

<각 토픽의 단어 분포>

토픽A : 사과 20%, 바나나 40%, 먹어요 40%, 귀여운 0%, 강아지 0%, 깜찍하고 0%, 좋아요 0%

토픽B : 사과 0%, 바나나 0%, 먹어요 0%, 귀여운 33%, 강아지 33%, 깜찍하고 16%, 좋아요 16%

LDA 알고리즘은 토픽의 제목을 정해주지 않지만, 이 시점에서 알고리즘의 사용자는 두 토픽이 각각 과일에 대한 토픽과 강아지에 대한 토픽이라는 것을 알 수 있다.

2. LDA의 가정

LDA는 문서의 집합으로부터 어떤 토픽이 존재하는지를 알아내기 위한 알고리즘이다. LDA 알고리즘은 앞서 배운 빈도수 기반의 표현 방법들인 TDM 또는 TF-IDF 행렬을 입력으로 하는 데, 이로부터 알 수 있는 사실은 LDA는 단어의 순서는 신경쓰지 않는다는 점이다.

LDA는 문서들로부터 토픽을 뽑아내기 위해서 어떤 가정을 염두에두고 있다. 실제로 문서의 작성자가 그랬는지 안 그랬는지는 중요하지 않다. LDA는 기본적으로 이러한 가정을 전제로 한다. 모든 문서 하나, 하나가 작성될 때 그 문서의 작성자는 이러한 생각을 했다.

‘나는 이 문서를 작성하기 위해서 이런 주제들을 넣을거고, 이런 주제들을 위해서는 이런 단어들을 넣을 거야.’ 조금 더 구체적으로 알아보면, 각각의 문서는 다음과 같은 과정을 거쳐서 작성되었다고 가정한다.

1) 문서에 사용할 단어의 개수 N을 정한다.

ex) 5개의 단어를 정했다.

2) 문서에 사용할 토픽의 혼합을 결정한다.

ex) 위 예제와 같이 토픽이 2개라고 하였을 때 강아지 토픽을 60%, 과일 토픽을 40%와 같이 선택할 수 있다.

3) 문서에 사용할 각 단어를 (아래와 같이) 정한다.

3–1) 토픽 분포에서 토픽 T를 확률적으로 고른다.

ex) 60% 확률로 강아지 토픽을 선택하고, 40% 확률로 과일 토픽을 선택할 수 있다.

3–2) 선택한 토픽 T에서 단어의 출현 확률 분포에 기반해 문서에 사용할 단어를 고른다.

ex) 강아지 토픽을 선택했다면, 33% 확률로 강아지란 단어를 선택할 수 있다. 이제 3) 을 반복하면서 문서를 완성한다.

이러한 과정을 통해 문서가 작성되었다는 가정 하에 LDA는 토픽을 뽑아내기 위하여 위 과정을 역으로 추적하는 역공학(reverse engneering)을 수행한다. 앞서 LDA의 결과로 문서 내 토픽 분포와 토픽 내 단어 분포가 나왔던 이유가 여기에 있다.

3. LDA의 수행하기

이제 LDA의 수행 과정을 정리해보자.

1) 사용자는 알고리즘에게 토픽의 개수 k를 알려준다.

앞서 말하였듯이 알고리즘에게 토픽의 개수를 알려주는 역할은 사용자의 역할이다. LDA 알고리즘은 토픽 k가 M개의 문서에 걸쳐 분포되었다고 가정한다.

2) 모든 단어를 k개 중 하나의 토픽에 할당한다.

이제 각 문서는 토픽을 가지며, 토픽은 단어 분포를 가지는 상태이다. 물론 랜덤으로 할당하였기 때문에 사실 전부 틀린 상태이다. 만약 한 단어가 한 문서에서 2회 이상 등장하였다면, 각 단어는 서로 다른 토픽에 할당되었을 수도 있다.

3) 이제 모든 문서의 모든 단어에 대해서 아래의 사항을 반복 진행한다.(iterative)

3–1) 어떤 문서의 각 단어 w는 자신은 잘못된 토픽에 할당되어져 있지만, 다른 단어들은 전부 올바른 토픽에 할당되어져 있는 상태라고 가정한다. 이에 따라 단어 w는 아래의 두 가지 기준에 따라서 토픽이 재할당된다.

p(topic t | document d) : 문서 d의 단어들 중 토픽 t에 해당하는 단어의 비율

p(word w | topic t) : 단어 w를 갖고 있는 모든 문서들 중 토픽 t가 할당된 비율

이를 반복하면, 모든 할당이 완료된 수렴 상태가 된다. 두 가지 기준이 어떤 의미인지 예를 들어보자. 설명의 편의를 위해서 저자는 두 개의 문서라는 새로운 예를 사용했다.

위의 그림은 두 개의 문서 doc1과 doc2를 보여준다. 여기서는 doc1의 세번째 단어 apple의 토픽을 결정하고자 한다.

우선 첫번째로 사용하는 기준은 문서 doc1의 단어들이 어떤 토픽에 해당하는지에 대한 단어들의 비율이다. doc1의 모든 단어들은 토픽 A와 토픽 B에 50 대 50의 비율로 할당되어져 있으므로, 이 기준에 따르면 단어 apple은 토픽 A 또는 토픽 B 둘 중 어디에도 속할 가능성이 있다.

두번째 기준은 단어 ‘apple’이 전체 문서에서 어떤 토픽에 할당되어져 있는지를 본다. 이 기준에 따르면 단어 ‘apple’은 토픽 B에 할당될 가능성이 높다. 이러한 두 가지 기준을 참고하여 LDA는 doc1의 ‘apple’을 어떤 토픽에 할당할지 결정한다.

4. 잠재 디리클레 할당과 잠재 의미 분석의 차이

LSA : 단어 문서 행렬을 차원 축소하여 축소 차원에서 근접 단어들을 토픽으로 묶는다.

LDA : 단어가 특정 토픽에 존재할 확률과 문서에 특정 토픽이 존재할 확률을 결합확률로 추정하여 토픽을 추출한다.


[Dirichlet distribution(Dirichlet prior)를 사용하는 이유]

https://donghwa-kim.github.io/distributions.html

Distribution Estimation

분포를 추정하는 방법은 크게 두가지로 나눠진다.

- Parametric 분포 추정

·모수를 가정

·가우시안 분포: 평균(μ), 분산(σ)

·binomial 분포: 샘플 수 n, 확률 p

·데이터가 적어도, Parametric 분포를 잘 가정하면 좋은 추정이 될 수 있음

·모수에 영향을 받기 때문에, 데이터 따른 분포의 업데이트(유지보수)가 어려움

- Nonparametric 분포 추정

·모수를 가정하지 않음

·데이터가 많아질수록 좋은 추정을 할 수 있음

·모수에 영향을 받지 않기 때문에, 데이터 따른 분포의 업데이트가 쉬움

·데이터가 적을 때 분포의 모양이 over-fitting될 수 있음

Parametric distribtutions

먼저, classification에 사용되는 대표적인 4개의 분포를 소개해드리겠습니다.

- Binomial 분포: 단변량, 이산형(discrete)분포

베르누이 이산형 확률변수( {0,1})를 가정할 때, n 시행횟수로 성공확률 p를 표현

- Beta 분포: 단변량, 연속형(continious)분포

α,β를 이용해 continuous 확률변수을 이용한 분포 표현

- Multinomial: 다변량, 이산형(discrete)분포

n시 행횟수에 대하여, k개의 이산형 확률변수에 대응되는 k개의 확률값(pk)들을 사용한 분포

- Dirichlet 분포: 다변량, 연속형(continious)분포

αk에 대하여, k개의 연속형 확률변수에 대응되는 k개의 continous values(xk, ∑kxk=1,∀xk≥0)들을 사용하여 분포를 표현

Dirichlet distribtutions 활용 예제

LDA 토픽모델링으로 예를 들면, 한 문서에 대한 토픽의 분포는 k개의 토픽의 확률(pk)로 표현할 수 있습니다.

이 토픽 분포에서 특정 토픽을 샘플을 할때(해당하는 문서에서 각 단어에 대한 topic), 이 토픽 분포는 multinomial 분포를 가정하게 됩니다. 따라서 이 분포를 알기 위해 pk 확률 값을 알 필요가 있습니다.

한 방법으로, dirichlet 분포의 샘플링 된 k차원 vector는 sum to 1를 만족하기 때문에, multinomial 분포의 모수 pk

에 사용될 수 있습니다.

k=3

일 때, 2차원으로 시각화하면 다음과 같습니다.

따라서 분포의 분포(distribution over distributions)를 표현한다고 할 수 있습니다.

이러한 구조는 문서의 토픽의 분포, 각 토픽의 단어의 분포를 표현하는 목적(distribution over distributions)과 굉장히 부합이 잘 됩니다.


[이은아님 강의 모음]

https://www.youtube.com/playlist?list=PLGAnpwASolI0vViZItiP90nWI_s9m91Av

 


 

반응형
반응형

 

배울 점이 많은 강의가 있어서 추천드리며, 시리즈로 글을 쓰고자 합니다.

 

비정형 데이터 분석 6/11 Topic Modeling: pLSA

 

https://youtu.be/PY2cBE6HbjA

 

키워드 및 핵심 내용

Topic Modeling

 

LSA

- Probabilistic Latent Semantic Analysis (확률적 잠재 의미 분석)

 

pLSA 개념

- 문장의 등장하는 단어는 Latent Concepts (잠재 의미, 주제, Topic)에 따른다

 

parameter 추론

- Maximum Likelihood Estimator (MLE) 을 통해 parameter 추정

- MLE : 데이터로부터 (정규, 지수, 감마) 분포를 알아냄 -> 모집단의 평균, 분산, ...

- Likelihood function 최대화

 

pLSA 학습

- EM 알고리즘(최적해 찾기)

- 동시에 최적화할 수 없는 복수의 변수들을 반복적으로 계산하는 기법

- E-step

- M-step

 

 


[pLSA 추가 자료]

https://ratsgo.github.io/from%20frequency%20to%20semantics/2017/05/25/plsa/

 

LSA

pLSA는 기존잠재 의미분석(Latene Semantic Analysis) 과는아예 다른 기법이지만 개념을 공유하는 게 많아서 먼저 설명해볼까 합니다. LSA에 대한 자세한 내용은이곳을 참고하시면 좋을 것 같습니다. 어쨌든 LSA는 말뭉치 행렬A를 다음과 같이 분해하는 걸 말합니다.

 

LSA 수행 결과로n 개문서가 원래 단어 개수보다 훨씬 작은q 차원의벡터로 표현된 걸 확인할 수 있습니다.

마찬가지로m 개단어는 원래 문서 수보다 훨씬 작은q 차원벡터로 변환됐습니다.

q가 3이라면 전체 말뭉치가 3개의 토픽으로 분석됐다고도 말할 수 있을 것입니다.

위 그림에서 행렬L의 열벡터는 각각 해당 토픽에 대한 문서들의 분포 정보를 나타냅니다.

R의 행벡터는 각각 해당 토픽에 대한 단어들의 분포 정보를 나타냅니다.

중간에 대각행렬은q 개토픽 각각이 전체 말뭉치 내에서 얼마나 중요한지 나타내는 가중치가 될 겁니다.

 

 

pLSA

 

pLSA는 단어와 문서 사이를 잇는, 우리 눈에 보이지 않는 잠재 구조가 있다는 가정 하에 단어와 문서 출현 확률을 모델링 한 확률모형입니다.

pLSA는 아래 그림처럼Latent concepts가 존재하고 이것이 문서와 단어를 연결한다고 가정합니다. 문서들의 주제(토픽)이라고 생각하면 좋을 것 같습니다.

왼쪽부터 차례로 살펴보겠습니다. P(z|d)는 문서 하나가 주어졌을 때 특정 주제(토픽)가 나타날 확률을 의미합니다. P(w|z)는 주제가 정해졌을 때 특정 단어가 나타날 확률을 가리킵니다.

 

LSA와 pLSA

 

LSA는 행렬 인수분해(matrix factorization),

pLSA는 확률모형입니다.

아예 그 종류가 다르다고 할 수 있죠. 하지만 개념상 연결되는 부분이 있습니다. 그래서일까요? 이름도 좀 많이 비슷해요. 어쨌든 아래 그림을 보겠습니다.

LSA 결과물인 행렬Uk의 열벡터는 각각 해당 토픽에 대한 문서들의 분포 정보를 나타냅니다. 이는 pLSA의 P(d|z)에 대응합니다.

행렬Vk의 행벡터는 각각 해당 토픽에 대한 단어들의 분포 정보를 나타냅니다. 이는 pLSA의 P(w|z)에 대응합니다.

Σk의 대각성분은 토픽 각각이 전체 말뭉치 내에서 얼마나 중요한지 나타내는 가중치가 됩니다. 이는 pLSA의 P(z)에 대응합니다.

pLSA의 결과물은 확률이기 때문에 각 요솟값이 모두 0 이상, 전체 합이 1이 됩니다. 하지만 LSA는 이런 조건을 만족하지 않습니다.

 

 

pLSA의 목적식

 

pLSA는m 개단어,n 개문서,k 개주제(토픽)에 대해 아래 우도 함수를 최대화하는 걸 목표로 합니다.

위 식에서n(wi,dj)j 번째문서에i 번째단어가 등장한 횟수를 나타냅니다.

p(wi,dj)k 개주제(토픽)에 대해 summation 형태로 돼 있는데요. 같은 단어라 하더라도 여러 토픽에 쓰일 수 있기 때문입니다.

예컨대 정부(government) 같은 흔한 단어는 정치, 경제, 외교/국방 등 다양한 주제에 등장할 수 있습니다.

 

 

pLSA의 학습 : EM 알고리즘

 

EM 알고리즘은동시에 최적화할 수 없는 복수의 변수들을 반복적인 방식으로 계산하는 기법입니다. 우선 모든 값을 랜덤으로 초기화합니다. 이후 하나의 파라미터를 고정시킨 다음에 다른 파라미터를 업데이트하고, 이후 단계에선 업데이트된 파라미터로 고정시킨 파라미터를 다시 업데이트합니다. 다음과 같습니다.

 


 

[LSA 추가 자료]

https://www.wikidocs.net/24949

 

1. 특이값 분해(Singular Value Decomposition, SVD)

여기서의 특이값 분해(Singular Value Decomposition, SVD)는 실수 벡터 공간에 한정하여 내용을 설명함을 명시합니다.

SVD란 A가 m × n 행렬일 때, 다음과 같이 3개의 행렬의 곱으로 분해(decomposition) 하는 것을 말합니다.

 

2. 절단된 SVD(Truncated SVD)

위에서 설명한 SVD를 풀 SVD(full SVD)라고 합니다. 하지만 LSA의 경우 풀 SVD에서 나온 3개의 행렬에서 일부 벡터들을 삭제시킨 절단된 SVD(truncated SVD)를 사용하게 됩니다.

 

3. 잠재 의미 분석(Latent Semantic Analysis, LSA)

기존의 DTM이나 DTM에 단어의 중요도에 따른 가중치를 주었던 TF-IDF 행렬은 단어의 의미를 전혀 고려하지 못한다는 단점을 갖고 있었습니다. LSA는 기본적으로 DTM이나 TF-IDF 행렬에 절단된 SVD(truncated SVD)를 사용하여 차원을 축소시키고, 단어들의 잠재적인 의미를 끌어낸다는 아이디어를 갖고 있습니다.

 

4. 실습을 통한 이해

1) 뉴스그룹 데이터에 대한 이해

2) 텍스트 전처리

3) TF-IDF 행렬 만들기

4) 토픽 모델링(Topic Modeling)

이제 TF-IDF 행렬을 다수의 행렬로 분해해보도록 하겠습니다. 여기서는 사이킷런의 절단된 SVD(Truncated SVD)를 사용합니다. 절단된 SVD를 사용하면 차원을 축소할 수 있습니다. 원래 기존 뉴스그룹 데이터가 20개의 카테고리를 갖고 있었기 때문에, 20개의 토픽을 가졌다고 가정하고 토픽 모델링을 시도해보겠습니다. 토픽의 숫자는 n_components의 파라미터로 지정이 가능합니다.

 

5. LSA의 장단점(Pros and Cons of LSA)

정리해보면 LSA는 쉽고 빠르게 구현이 가능할 뿐만 아니라 단어의 잠재적인 의미를 이끌어낼 수 있어 문서의 유사도 계산 등에서 좋은 성능을 보여준다는 장점을 갖고 있습니다. 하지만 SVD의 특성상 이미 계산된 LSA에 새로운 데이터를 추가하여 계산하려고 하면 보통 처음부터 다시 계산해야 합니다. 즉, 새로운 정보에 대해 업데이트가 어렵습니다. 이는 최근 LSA 대신 Word2Vec 등 단어의 의미를 벡터화할 수 있는 또 다른 방법론인 인공 신경망 기반의 방법론이 각광받는 이유이기도 합니다.

 


[Latent Space 추가자료]

https://blog.naver.com/qbxlvnf11/221752228681

 

오토인코더(autoencoder), GAN (Generative Adversarial Networks) 등의 생성 모델은 학습 과정 중 잠재 공간 (latent space)을 만들어낸다.

일반적인 경우 이 잠재 공간은 고정된 차원의 연속적인 표현형 공간(continous representations)으로 나타내어지지만 이는 해석(interpretation) 하기 힘들 뿐만이 아니라 효율성이 떨어지는 측면이 있다.

그래서 잠재 공간을 이산적인 표현형 공간(discrete representations)으로 나타내려 하는 연구가 활발히 진행 중이다.

물론 이렇게 할 경우 trade-off로 그레디언트(gradients) 계산 즉, 최적화(optimization)이 쉽지 않다는 문제가 발생한다.

그럼에도 불구하고 위에서 언급했던 장점과 함께 지금껏 해석하기도 어려웠던 잠재 공간의 컨트롤 가능에 대한 희망과 설명 가능한(explainable) 인공지능 개발의 키가 될 수 있다는 것 때문에 최근에 활발히 연구되고 있는 분야이다.

이 기술은 순환 모델(recurrent model)의 효율성(efficiency) 강화를 통한 수렴 속도 향상, 다양한 잠재 공간 컨트롤을 통한 여러 언어 번역, 화자 분리 문제에서의 타깃 화자 선택 문제 등 머신러닝에서 산재하는 많은 문제에 응용될 수 있을 것이다.

 

[출처] Discrete latent space에 대한 연구|작성자 예비개발자


 

[이은아님 강의 모음]

https://www.youtube.com/playlist?list=PLGAnpwASolI0vViZItiP90nWI_s9m91Av

 

이은아님 머신러닝 자연어처리 - YouTube

 

www.youtube.com



 

 

반응형

+ Recent posts