본문 바로가기
NLP

비정형 데이터 - LSA / pLSA

by 볼록티 2019. 12. 16.
728x90
반응형

LSA

LSA: Latent Sementic Analysis의 약자로 잠재 의미 분석이라는 뜻이다. 아래의 그림처럼 $X$라는 단어 문서 행렬을 SVD(특잇값분해)를 통해서 3개의 매트릭스 곱으로 나타내고, 차원수도 줄이게 되고 이러한 과정 중에 잠재된 의미를 찾는다는 것이다.

 

 

 

 

SVD라는 것이 고급 선형대수학에 포함되어 있는 파트인데, 완벽하게 이해하기에는 기초 선형대수, 선형독립, 직교 등등 선행학습이 필요하다. 그러므로 어떤식의 알고리즘인지 완벽하진 않더라도 짚고 넘어가보도록 한다.

 

SVD는 eigen value decomposition(고윳값분해) 처럼 행렬을 대각화하는 한 방법이다. 정방행렬만을 다뤘던 고윳값 분해와는 달리 이 SVD 특잇값 분해는 모든 $m$ x $n$ 행렬에 대해 적용이 가능하기 때문에 유용하다. 위의 그림처럼 정의를 할 수 있으며 SVD 변환에 대하여 알아본다.

 

SVD 변환

 -$U$가 직교 행렬(orthogonal matrix)이라고 한다면, $UU^{T} = U^{T}U$ = $I$ 가 성립한다.

 -$\sum$가 대각 행렬(diagonal matrix)라고 한다면, $\sum$의 대각 성분을 제외한 나머지 원소의 값은 모두 0 이다.

 -$\sum$가 2 x 2 행렬일 때, $\begin{pmatrix} \sigma_1 & 0\\  0 & \sigma_2 \end{pmatrix}$ 와 같이 표현되고,

 -$m$x$n$ 일때 m>n 인경우, \begin{pmatrix}
\sigma_1 &0  &...  &0 \\ 
0 &\sigma_2  &...  &0 \\ 
 &  &...  &\sigma_3 \\ 
0 &0  &...  &0 \\ 
0 &0  &...  &0 \\ 
... &...  &...  &... \\ 
0 &0  &...  &0 
\end{pmatrix}

 

 -$m$x$n$ 일때 m<n 인경우,\begin{pmatrix}
\sigma_{1}  &0  &...  &0  &0  &...  &0 \\ 
0 &\sigma_{2}  &...  &0  &0  &...  &0 \\ 
 &  & ...  &  &  &  & \\ 
0 &0  &...  &\sigma_{3}  &0  &...  &0 
\end{pmatrix}

 

SVD 변환의 의미

 -$A_x$와 $A_y$가 직교하게 되는 경우가 단 한번만 있는 것은 아니다. $A_x$와 $A_y$는 $A$ 라는 행렬(선형변환)을 통해 변환되었을 때, 길이가 조금씩 변했다는 것을 알 수 있다.

 - 이러한 값 scaling factor들을 singular value(특잇값)이라하고, $\sigma_1$, $\sigma_2$ 등이 대각 원소에서 내림차순으로 나타나진다.

 - 선형 변환의 관점에서 네 개의 행렬($A$, $V$, $\sum$, $U$)의 관계를 생각하면 다음과 같다.

 $AV$ = $U\sum$

 

 - 즉, "$V$에 있는 열벡터($x$ 혹은 $y$)를 행렬 $A$를 통해 선형변환할 때, 그 크기가 $\sigma_1$, $\sigma_2$만큼 변하지만, 여전히 직교하는 벡터 $u_1$, $u_2$를 찾을 수 있는지 묻는 것이라고 할 수 있다.

 

SVD 변환의 목적: 

특잇값분해 공식

 - 제일 첫 항인 $\sigma$$u_1\sigma_1\underset{u}{\rightarrow}_1\underset{u}{\rightarrow}_1^T 부분만 보면, 이 행렬의 크기는 $\sigma_1$에 의해 정해진다.

 - 즉, 우리는 SVD라는 방법을 이용해서 A라는 임의의 행렬을 분해하는데, 분해된 각 행렬의 원소의 값의 크기는 $\sigma$의 크기에 의해 결정된다. 

 - 다시말해, SVD를 이용해서 임의의 행렬 A를 정보량에 따라 여러 layer로 쪼개서 생각할 수 있게 해준다.

 - 즉, 특잇값에 따라 A의 정보량이 결정되기 때문에 값이 큰 몇개의 특잇값들을 가지고도 충분히 유용한 정보를 유지할 수 있다.

 

 

아래의 그림처럼 $A^{'}$행렬을 생성해내어 최종적으로 토픽모델이 나온다고 할 수 있다.

 

 

 

 

 

 

'Minsuk Heo' 유투브에서 얻은 예시를 통해 LSA의 개념을 공부해보자.

 

우선 위의 그림처럼 메뉴가 있고, 구성으로 미국음식 3개와 일본음식 2개가 있다고 치자. 이를 BOW방식으로 유사도를 구하게 되면, 아래의 그림처럼 메뉴-음식 행렬로 만들어 볼 수 있다.

메뉴-음식 빈도 행렬

 피자와 햄버거의 유사도는 피자와 라면의 유사도와 같다고 나온다. 즉 같은 미국음식인데도 유사도가 0이라는 것을 알 수 있다. 이는 BOW행렬과 TFIDF행렬이 단어 기반의 벡터로 유사도를 계산하기 때문이다. 즉 두 행렬에 있어서 피자는 라면이나 햄버거랑 문서에서 동시에 출현한 적이 없기 때문인 것이다. 그러므로 토픽을 구할 수 없다. 

 

 

 

위의 그림은 음식 메뉴 - 구성 음식 형식으로 표현한 매트릭스이다.

 A매트릭스를 특잇값분해하면 단어가 행으로 들어왔기 때문에 $U$매트릭스는 토픽을 위한 단어 매트릭스라고 말할 수 있고, $V^{T}$ 매트릭스는 문장 매트릭스가 된다. 가운데 $\sum$매트릭스는 토픽의 강도(가중치)가 된다. 

 

 세개의 매트릭스를 곱하면 $A$ 매트릭스와 거의 유사한 값을 가진 매트릭스가 된다.

 위 그림을 토대로 얘기하면 우리가 알고자 하는 것은 문장 벡터(Document matrix for topic)이기 때문에 아래의 그림처럼 두 행렬의 곱을 이용한다. $\sum$ 벡터행렬과 $V^{T}$ 벡터행렬의 곱으로 피자와 햄버거의 유사도를 알 수 있다.

 이 예제에서는 2차원 그래프를 그릴 거라서 시그마 행렬의 2x2행렬만 가져온다. 시그마 행렬의 대각원소는 중요도를 기준으로 내림차순으로 정렬되어 있다. 

 

 

 시그마행렬에서 t1, t2만 빼서 곱한다. 아래의 그림처럼. 

 

 

 

아래의 그림처럼 결과가 나왔다. 6개의 d가 t1과 t2로 표시된 것을 확인할 수 있다.

 

 

 이를 2차원 그래프로 시각화하면, 아래의 그림과 같다.

 

 

파란점들과 녹색 점들 사이에는 각이 90도라 코사인 유사도가 0 이 된다. 파란점들끼리 혹은 녹색점들끼리의 유사도는 벡터값의 크기는 다르지만 방향이 동일하기 때문에 유사도는 1로 가장 높게 나온다. 

 

결과적으로 t1과 t2는 각각 미국,일본 음식을 나타낸 것을 잠재적으로 알 수 있다.

 

 

 

 

 

 

 

 

 

 

 

LSA를 통해 데이터가 큰 경우의 차원축소 효과의 장점을 볼 수 있고, 또한 단어와 문맥 간의 내재적인 의미를 보존할 수 있기 때문에 문서 간 유사도 측정 등의 모델 성능 향상에 도움을 줄 수 있다고 한답니다.

 단점으로는 새로운 문서나 단어가 추가되면 아예 처음부터 작업을 새로 시작해야한다는 것이 있습니다.

 

 

 

pLSA

출처: ratsgo블로그(https://ratsgo.github.io/from%20frequency%20to%20semantics/2017/05/25/plsa/)

pLSA(probabilistic Latent Semantic Analysis): 단어와 문서 사이를 잇는, 보이지 않는 잠재구조가 있다는 가정을 두고! 단어와 문서 출현 확률을 모델링한 확률모형이다.

 

 아래의 그림은 pLSA 알고리즘을 도식화 한 것이다. $P(z|d)$는 문서 $d$가 주어졌을 때 특정 주제(토픽) $z$가 나타날 확률을 의미하며, $P(w|z)$는 주제가 정해졌을 때, 특정 단어 $w$가 나타날 확률을 의미한다.

 네번째 Document의 주제는 TRADE라는 주제로만 구성되어 있고, trade라는 주제는 economic, imports, trade 따위의 단어를 선호한다. 이로써 pLSA가정에 문제가 없다면 네번째 Document에 특정 단어 $w$의 출현 확률이 높을 것이다.

 

 

 

 

아래의 그림 (a), (b) 는 pLSA의 과정을 나타낸 것이다.

(a): 문서를 뽑은 다음 이 문서에 주제를 뽑는다. 그다음으로 주제별로 단어를 뽑는다. (사람이 글을 쓸 때와 유사한 방법)

(b): 주제를 먼저 뽑고, 주제에 해당하는 문서와 단어를 뽑는 방식이다. pLSA는 이 방식으로 구성이 되어 있다.

 

 

- LSA와 pLSA는 아예 종류가 다른 모형이다. 하지만 개념적으로 연결된 부분이 있는데 아래의 그림에서  $\sumk$의 대각 성분은 토픽 각각이 전체 말뭉치 내에서 얼마나 중요한지를 나타내는 가중치라는 것을 위에서 언급했던 것처럼 알고 있다. 이 때 이 가중치는 pLSA의 $P(z)$에 대응한다.

 $U_k$의 열벡터는 각각 해당 토픽에 대한 Document들의 분포 정보를 나타내면서 $P(d|z)$와 대응이 되고, $V_k$행렬의 행벡터는 각각 해당 토픽에 대한 단어들의 분포정보를 나타내고, $P(w|z)$와 대응이 된다. 

 

 pLSA의 결과물은 확률이기 때문에 0~1 사이의 값을 갖고, 전체 합은 1이 된다. LSA는 이 조건을 만족하지 않는다.

 

 

pLSA의 목적식

아래의 그림처럼 $m$개의 단어, $n$개의 문서, $k$개의 주제(토픽)에 대해서 아래 우도함수(likelihood function)를 최대화하는 것을 목표로 한다.

 

 위 식에서 $n(w_{i}, d_{j})$는 $j$번째 문서에 $i$번째 단어가 등장한 횟수를 나타낸다. $p(w_{i}, d_{j})$는 $k$개의 주제(토픽)에 대해 summation 형태로 되어 있는데, 같은 단어라도 여러 토픽에 쓰일 수 있기 때문이랍니다. 마지막 줄의 식을 말하는 거다. 예를 들어 '정부' 같은 흔한 단어는 정치,경제,외교 등 다양한 주제에 등장할 수 있습니다.

 

 

pLSA의 학습: EM 알고리즘

마지막으로 수식 한번만 더 훑고 가보자.. EM알고리즘은 동시에 최적화할 수 없는 복수의 변수들을 반복적인 방식으로 계산하는 방식으로 계산하는 기법이다. 

 우선 모든 값을 랜덤으로 초기화한다. 이후 하나의 파라메터를 고정시키고 다른 파라메터를 업데이터하고 그 이후에 업데이트된 파라미터로 고정시켰던 파라미터를 다시 업데이트 한다.

위의 그림처럼 E스텝에서는 잠재 변수의 사후 확률을 구하는 것입니다. 토픽 $z$에 의해 설명될 수 있는 문서 $d$에 속한 $w$ 단어의 출현 확률 입니다.

M스텝에서는 통계에 기반한 모수 추정입니다. $P(w|z)$, $P(d|z)$, $P(z)$ 확률들은 각각 위의 설명처럼 "얼마나 단어 $w$가 토픽 $z$와 연관되어 있느냐?", "얼마나 문서 $d$가 토픽$z$와 연관되어 있느냐?", "얼마나 토픽 $z$가 빈번하게 쓰이느냐?" 에 관한 확률값들을 나타내는 것이다.

 

 

위의 복잡했던 알고리즘을 조금이나마 해소시켜줄 간단한 예제를 들어주셔서 당연히 짚고 넘어간다.

아래의 그림은 수식으로만 보았던 문서와 단어 행렬이다.

 

아쉽게도 위의 단어/문서를 가지고 확률 값을 구하는 예시가 없고, pLSA 결과로 얻어낸 가중치 행렬이었던 $P(z)$를 보여준다. 차원(사용자지정)은 3차원으로 설정하였다. 그래서 토픽이 3개만 나온 것이다.

다음으로 $P(d|z)$의 결과를 봅니다. 이를 통해서 문서별로 각 토픽에 대한 확률 값을 갖게 되는데, 여기서 해석은 사용자가 해주어야하는데 문서 1이나 2같은 경우는 토픽 3이고, 가진 단어들로 볼 때 스포츠에 관련된 토픽이라고 유추해볼 수 있습니다.

 

마지막으로 $P(w|z)$확률값을 구한 결과표를 보면, 각 주제에 대한 단어들의 확률 값을 알 수 있습니다. 위와 마찬가지로 토픽에 따라서 해석하기 좋게 나온 것 같습니다.

 

pLSA 수행결과로 나온 표들은 LSA의 행렬 인수분해(factorization)과 흡사해보이지만, 결과 도출 과정 자체가 확률 모형을 전제했기에 다릅니다 !

 

 

 

 

 

 

 

 

 

 

참조를 중간에 명시합니다.

728x90
반응형

'NLP' 카테고리의 다른 글

비정형 데이터 - Word2Vec  (0) 2019.12.16
비정형 데이터 - Classifier_Basic  (0) 2019.12.16
비정형 데이터 - TF-IDF  (0) 2019.12.16
비정형 데이터 - 전처리  (0) 2019.12.16
비정형 데이터 - 소개  (0) 2019.12.16

댓글