반응형

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

비정형 데이터 분석 9/11 #Seq2Seq, #Attention

https://youtu.be/iYTYiAELk-U

 

키워드 및 핵심 내용

Seq2Seq

- endcoder -> context -> decoder

- 텍스트, 음성, 영상 등 이러한 시계열 데이터들을 다른 시계열 데이터로 변환하는 문제에 적합

Attention

- Seq2seq의 구조를 살펴보면, Encoder에서 계산한 여러 Hidden State 중 마지막 Hidden State만을 Decoder에서 사용하게 된다.

어텐션 매커니즘은 바로 이 사용되지 않은 Hidden State를 이용하자는 아이디어이다.

- attention weights * context vector -> attention vector

 


 

[RNN과 비교]

https://blog.naver.com/kbsdr11/221586617910

오른쪽 모델을 보면 알겠지만 Seq 2 Seq모델은 시퀀스를 입력받고 출력한다.

그런데 RNN모델은 태어난 이유 자체가 시퀀스 데이터를 다루기 위함이었는데

Seq 2 Seq모델이 굳이 필요할까?

일반적인 RNN과 다른 점은 무엇일까?

Seq 2 Seq이 잘 작동하는 테스크는 대표적으로 번역이나 챗봇이 있다.

위의 사진을 보면

이별한지 얼마 안 된 사람이, '완벽한 날씨가 날 더 슬프게 해.'라고 말한다.

그런데 RNN모델로 챗봇작업을 수행하게 되면

완벽한 날씨니까 좋은 기분일것이라고 유추하면서 문장을 출력하다가

sad라는 단어를 마지막에 입력받고 굉장히 일이 꼬이게 될 것이다.

이 처럼 일반적인 RNN모델에서 문장을 다 듣기도 전에 답변을 하게 되면 제대로 답변할 수 없는 문제가 발생하는데

Seq2Seq는 말을 끝까지 듣고 출력하도록 만들어진 모델이라고 볼 수 있겠다.

[출처] Seq2Seq|작성자 kbsdr11


 

[Seq2Seq 추가 자료]

https://blog.naver.com/sooftware/221784419691

세상에는 많은 시계열 데이터 (Sequence Data)가 존재한다.

텍스트, 음성, 영상 등 많은 종류의 시계열 데이터가 존재하고,

이러한 시계열 데이터들을 다른 시계열 데이터로 변환하는 문제들도 숱하게 생각할 수 있다.

Encoder는 어떤 시계열 데이터를 압축해서 표현해주고,

Decoder는 압축된 데이터를 다른 시계열 데이터로 변환해준다.

Encoder는 RNN (or LSTM, GRU)을 이용하여 데이터를

h라는 Hidden State Vector로 변환한다.

Encoder가 출력하는 벡터 h는 마지막 RNN 셀의 Hidden State이다.

즉, Encoder는 그냥 RNN을 이어놓은 것에 불과하다.

여기서 주목할 점은 Encoder가 내놓는 Context Vector는 결국 마지막 RNN 셀의

Hidden State므로, 고정 길이 벡터라는 사실이다.

그래서 인코딩한다라는 말은 결국 임의 길이의 시계열 데이터를 고정 길이 벡터로 변환하는 작업이 된다.

다음으로 Decoder를 살펴보자.

Decoder는 기본적으로 RNNLM (RNN Language Model)이다.

Decoder는 Encoder로부터 Context Vector (h)를 넘겨받는다.

그리고 첫 입력으로 문장의 시작을 의미하는 심벌인 <s>가 들어간다.

(<s>는 <sos>, <bos>, <Go> 등 많은 이름으로 불린다)

여기서 디코더와 RNNLM (RNN Language Model).

즉, RNN을 이용해서 문장을 생성하는 모델과의 유일한 차이점은

인코더에서 만든 Context Vector를 입력받는다는 점만이 다르다.

콘텍스트 벡터를 초기 입력으로 받는다는 사소한 차이점이 평범한 언어 모델도

기계 번역, 음성 인식과 같은 복잡한 문제도 풀 수 있는 Decoder로 탈바꿈시킬 수 있다.

Seq2seq 개선

이번에는 앞에서 본 기본적인 Seq2seq 구조를 조금 개선해보자.

효과적인 기법이 몇 가지 존재하는데 그중 2가지를 살펴보자.

입력 데이터 반전 (Reverse)

첫 번째 개선안은 아주 손쉬운 방법이다.

위 그림에서 보듯이 입력 데이터의 순서를 반전시키는 것이다.

위의 트릭은

「"Sequence to sequence learning with neural networks." Advances in neural information processing system. 2014.」

논문에서 제안했다.

이 트릭을 사용하면 많은 경우 학습이 빨라져서, 최종 정확도도 좋아진다고 한다.

그렇다면 왜 입력 데이터를 반전시키는 것만으로 학습이 빨라지고 정확도가 향상되는 걸까?

직관적으로는 Gradient의 전파가 원활해지기 때문이라고 볼 수 있다.

이어서 Seq2seq 두 번째 개선안(Peeky Seq2seq)이다.

앞서 배운 Seq2seq의 동작을 다시 한번 살펴보게 되면,

Encoder는 입력 데이터를 고정 길이의 콘텍스트 벡터로 변환한다.

Decoder 입장에서는 이 컨텍스트 벡터만이 예측을 하는데에 제공되는 유일한 정보인 셈이다.

그러나 이 중요한 정보를 기본 Seq2seq에서는 최초 RNN 셀에만 전달이 된다.

이러한 점을 수정해서 중요한 정보가 담긴 콘텍스트 벡터를 디코더의

다른 계층들에게도 전달해주는 것이다.

이러한 아이디어는

「”learning phrase representation using RNN encoder-decoder for statistical machine translation” Cho, Kyunhyun 2014.」

논문에서 제안되었다.

Peeky Seq2seq는 기본 Seq2seq에 비해 꽤나 더 좋은 성능을 보인다고 알려져 있다.

하지만 Peeky Seq2seq는 기본 Seq2seq에 비해 파라미터가 더 늘어나기 때문에

계산량 역시 늘어나게 된다.

그리고 Seq2seq의 정확도는 하이퍼파라미터에 영향을 크게 받으므로,

실제 문제에서는 어떤 성능을 낼지 미지수이다.

Seq2seq의 한계

하지만 이러한 기본적인 Seq2seq에는 한계점이 존재한다.

입력 데이터가 길어지게 되면 성능이 확연하게 떨어진다는 것이다.

이러한 Seq2seq의 한계를 극복하기 위해 제안된 Attention Mechanism이 있다.

실제로 엄청난 성능 향상을 일으킨 이 어텐션 기법에 대해서는 다음 글에서 알아보자.

[출처] [Sooftware 머신러닝] Seq2seq (Sequence to sequence)|작성자 Sooftware


 

[Attention 추가 자료]

https://blog.naver.com/sooftware/221784472231

Seq2seq의 한계

기본적인 Seq2seq 모델은 간단한 구조라는 장점이 있었지만, 크게 2가지의 문제점이 존재한다.

첫째, 하나의 고정된 크기의 벡터에 모든 정보를 압축하다 보니 정보 손실이 발생한다.

둘째, RNN의 고질적인 문제인 Vanishing Gradient Problem이 존재한다.

이러한 문제점들은 입력 데이터가 길어지면 성능이 크게 저하되는 현상으로 이어지게 된다.

이를 위한 기법으로 입력 데이터가 길어지더라도,

정확도가 떨어지는 것을 보정해주기 위해 등장한 방법이 어텐션(Attention) 기법이다.

Seq2seq의 문제점 Encoder의 Hidden State들을 활용하지 않는다

Seq2seq의 구조를 살펴보면, Encoder에서 계산한 여러 Hidden State 중

마지막 Hidden State만을 Decoder에서 사용하게 된다.

즉, 마지막 Encoder의 RNN 셀의 마지막 Hidden State를 제외하고는 사용되지 않는다.

어텐션 메커니즘은 바로 이 사용되지 않은 Hidden State를 이용한 아이디어이다.

어텐션의 기본 아이디어는 Decoder에서 출력 결과를 예측하는 매 시점(time step)마다,

Encoder의 Hidden State를 다시 한번 참고한다는 아이디어다.

그리고 이 참고하는 비율을, 해당 시점에서 예측해야 하는 결과와 연관이 있는 부분을 판단하여

좀 더 집중 (Attention) 하여 본다고 하여 Attention Mechanism이라고 부른다.

다양한 종류의 어텐션

다양한 종류의 어텐션 (출처 : https://wikidocs.net/22893)

어텐션은 그 효과가 검증된 만큼, 많은 종류의 기법이 존재한다.

하지만 다른 어텐션들과의 차이는 어텐션 스코어를 구하는 중간 수식의 차이일 뿐이지,

크게 개념을 벗어나지 않는다.

위의 표처럼 다양한 어텐션의 종류가 있으며, 어떤 어텐션을 적용하느냐도 모델의 성능을 좌우할 것이다.

[출처] [Sooftware 머신러닝] Attention Mechanism (어텐션 메커니즘)|작성자 Sooftware


 

[Attention 추가 자료]

https://blog.naver.com/teach3450/221900313366

지난 시간에 구현했던 모델과 이번 업그레이드 버전의 모델의 성능 비교

loss의 줄어드는 속도가 급격히 상승했다.

[출처] 텐서플로우(tensorflow) : seq-to-seq 구조의 RNN(순환신경망)을 이용하여 기계번역 문제 해결하기 *attention weight upgrade version*|작성자 용쓰


 

[이은아님 강의 모음]

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


 

반응형
반응형

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

비정형 데이터 분석 8/11 LDA Inference: Collapsed Gibbs Sampling

https://youtu.be/aja7ASTDHz0

 

키워드 및 핵심 내용

LDA Inference: Collapsed Gibbs Sampling

- 관찰할 수 있는 문서와 단어로 숨겨진 토픽의 분포를 추정

​- 나머지는 정리가 잘되었다고 가정하고 한 번에 하나씩 정리

1. 각각의 단어에 임의의 주제를 배정한다.

2. (잘못됐겠지만) 모든 단어에 주제가 배정되어 있고, 그 결과 문헌별 주제 분포와 주제별 단어 분포가 결정되었음. 이를 깁스 샘플링을 통해서 개선해 나간다.

3. 문헌 A에 속하는 단어 cute가 주제1에 속할지 주제2에 속할지 판단해야 합니다. 문헌 내 주제 분포를 따르면

(문헌 A 내에 주제1이 있을 확률) = 0.1 / (0.1+1.1) = 0.083...

주제별 단어 분포를 따르면

(주제1 내의 단어가 cute 일 확률) = 0.001 / 8.007 = 0.00012...

따라서 (A 안의 cute가 주제1일 확률) = 0.083 * 0.00012 ... = 0.00008... 이 됩니다.

마찬가지로 주제2에 속할 확률도 계산해봅시다.

(문헌 A 내에 주제2가 있을 확률) = 1.1 / (0.1+1.1) = 0.916...

(주제2 내의 단어가 cute 일 확률) = 1.001 / 8.007 = 0.125...

따라서 (A 안의 cute가 주제2일 확률) = 0.916 * 0.125 ... = 0.114... 가 됩니다.

즉 A 안의 cute는 (0.00008, 0.114)의 카테고리 분포를 따라 주제1이 되거나 주제2가 되겠죠. 가능도 비중을 따라  주제1이나제2 중에 하나를 뽑습니다. (물론 높은 확률로 주제2가 뽑히겠죠. 하지만 주제1이 뽑힐 가능성이 아예 0이 되지는 않습니다. 이는 하이퍼 파라미터 α β가 하는 역할 중 하나에요.) 여기서는 주제2로 배정되었다고 가정할게요.

4. 다음 단어 반복

 

 


[Gibbs Sampling 추가 자료]

https://enginius.tistory.com/514

Bayesian과 MCMC 알고리즘 (Gibbs and Metropolis-Hastings Algorithm)

Motivation

깁스 샘플링이 무엇인가를 정의하기 전에 이것이 왜 필요한지에 대해서 먼저 생각해보자.

'우리'는 베이지안이라고 가정을 하겠다.

베이지안은 '일반적'으로 우리의 현상을 표현하는 latent variable을 가정한다.

우리의 현상, 혹은 관측을 Y라 하고, 이 현상의 원인을 X라 했을 때, 다음 세 가지를 정의한다.

- 편의상 X를 내면의 감정이라 하고, Y를 외면의 표현이라고 하자.

- X는 기쁨, 슬픔, 등등이 있고, Y에는 웃음, 울기, 짜증 등등이 있을 것이다.

1. Likelihood (개인적으로 우도란 단어를 별로 좋아하지 않는다.)

P(Y|X)

이것이 의미하는 것은 어떤 (원인)의도가 주어졌을 때 (관찰)현상이 일어날 확률이다. 예를 들면 슬플 경우 꽤나 높은 확률로 울 것이다.

2. Posterior

P(X|Y)

베이지안의 주된 목적은 바로 이것을 구하는 것이다. 다시 말해서 우리에게 현상이 주어졌을 때 원인을 찾는 것이다. 예를 들면 누가 웃고 있을 때 과연 이 사람이 슬픈지, 기쁜지를 알아내는 것이다. 이는 단순히 Likelihood와는 다르다. 현상에서 원인을 '역으로' 맞추는 것이기 때문에 추가 정보가 필요하고, 이것이 Prior이다. 이는 해당 사람이 평소에 슬픈지, 기쁜지에 대한 사전 정보이다.

3. Prior

P(X)

이것은 앞서 말한 사전 정보이다. 사람이 평소에 기쁜지, 슬픈지, 짜증 내는지에 대한 정보이다. 이 정보의 유무에 따라 베이지안과 프리퀀티스트를 나눈다고 볼 수 있다.

그리고, 위의 식들을 하나로 묶는 것이 바로 베이즈 법칙이다.

말로 풀어서 설명을 해보면 어떤 사람이 울고 있을 때 이 사람이 기쁠 확률은

1. 해당 사람이 기쁠 때 울 확률과

2. 해당 사람이 평소에 기쁠 확률을

곱해서 구해진다는 것이다. 나름 일리가 있다.

여기서 한 가지 주의할 점은 비례한다는 것이다. 정확한 확률 분포를 구하기 위해서는 normalize를 해줘야 하고, 이는.. 어렵다! 특정 Likelihood와 Prior가 곱해졌을 경우 Posterior를 쉽게 구할 수 있는 경우가 있는데 이런 Prior를 Conjugate Prior라고 한다. 대표적인 예로는 가우시안-가우시안+인버스 감마, 디리클레-멀티노미알 등이 있다. 자세한 건 위키를 참고하면 된다.

위에서 설명한 Likelihood, Prior, Posterior에 대한(?) 그림

우리가 어떤 '값'을 원한다고 하자. 예를 들면 울고 있는 저 사람이 기쁠 '확률'을 구하시오! 혹은 이 사람이 기쁜지 슬픈지를 '구분'하시오! 란 명령이 내려졌다고 하자. 이런 경우에 베이지언은 다음과 같은 해답을 내놓는다.

즉 Posterior mean을 구한다는 의미이다. 그리고 이 적분은 가능한 모든 X의 공간인 X에서 수행되어야 한다. 하지만 우리가 모두 알듯이 적분은 어렵다. 그래서 이를 근사하고자 할 때 사용되는 것이 바로 Monte Carlo Markov Chain (MCMC) 알고리즘이다. 위의 적분은 큰 수의 법칙에 따라 다음과 같이 표현될 수 있다.

그리고 여기서 필요한 가정이

이다. 즉 우리가 모은 N 개의 데이터가 Posterior에서 '추출된' 데이터야 한다는 것이다.

하지만 이는 생각보다 쉽지가 않다. 여기에는 두 가지 이슈가 있다.

1. 우리가 추출할 수 있는 확률은 Uniform 혹은 Gaussian 정도이다.

2. 데이터의 차원이 커질수록 exponential 하게 어려워진다..

첫 번째 문제를 다루고 있는 것이 Metropolis-Hastings (MH) 알고리즘이고, 두 번째 문제를 다루고 있는 것이 Gibbs 샘플링이다.

Metropolis-Hastings (MH) Algorithm

알고리즘 자체는 매우 간단하고, 증명은 매우 복잡하니 알고리즘 설명만 하겠다. 여기서 증명이라는 것은 이런 식으로 뽑아도 괜찮다는 것을 의미한다.

1. 목적

가 주어졌을 때, pi(X)에서 N 개의 샘플인 X_1, X_2, ..., X_N 을 구하는 것이다.

2. 알고리즘

초기화

: 임의의 q(y|x)를 설정한다. 그리고 이는 우리가 sample 할 수 있어야 한다. 일반적으로 다음과 같이 설정한다.

의미를 생각해보면 현재 샘플 된 값 주변에서 다음 샘플을 뽑고자 하는 것이다.

: 초깃값 X_1을 구한다.

n-th 샘플링

1.에서 Y를 뽑는다.

2. 다음과 같이 r을 구한다.

이때 f는 pi에 비례하는 함수이다.

3. r의 확률로 X_n = Y로 하고, 1-r의 확률로 X_n = X_n-1로 한다.

사족 1: r의 의미를 살펴보면, 이 값은 Y가 우리의 분포인 pi(Y)에 대해서 얼마나 적합한지를 나타낸다. 분모에 f(Y)가 있으므로, 확률이 더 높은 걸 뽑으려고 하는 경향성을 볼 수 있다. 사실 우리는 X_i들을 다 모아서 empirical distribution을 그렸을 때 pi(·)이 되도록 하길 원하므로 일맥상통한다고 볼 수 있다.

사족 2: 여기서 f는 우리가 관심 있는 pi에 비례함에 주목하자. 바꿔 말하면 정확한 확률 분포가 아니라 비례하는 pseudo-distribution이여도 이 알고리즘은 돌아갈 수 있다.

위의 알고리즘에서 알 수 있듯이 우리는 우리의 목적인 pi(X)에서 X를 직접 뽑을 필요가 없다. 하지만 이 알고리즘은 데이터의 차원이 커질수록 매우 오랜 시간이 걸려서 알고리즘이 돌아간다.

자세한 것은 위키(http://en.wikipedia.org/wiki/Metropolis–Hastings_algorithm)를 참고하도록 하자.

Gibbs Sampling

1. 목적

깁스 샘플링에 대한 포스팅은 예전에 한 적이 있다. (http://enginius.tistory.com/296) 벌써 2년 전이다.. 시간 참 빠르다. 여튼 깁스 샘플링의 의의(?)는 고차원 공간에서 샘플링을 효과적으로 할 수 있다는 데 있다. 사실 개념은 굉장히 straight-forward 하다. d 차원의 랜덤 변수를 d 개의 1차원 변수로 나눠서 보겠다는 것이다.

2. 알고리즘

우리가 관심 있는 것이 X = {x_1, x_2, ..., x_d}의 d 차원 변수라고 할 때, 이들을 나눠서 샘플링 하면 된다. 즉,

를 잘 정의하고, i = 1, 2, ..., d로 반복하면서 X를 뽑는다. 간단하다.

물론 여기서 위의 확률 분포에서 뽑기가 힘들 땐, 앞서 설명한 Metropolis-Hastings 알고리즘을 이용하면 된다.

정리하자면 임의의 다차원 확률 분포가 주어졌을 때, 이들을 conditional distribution으로 변경할 수 있다면, Metropolis-Hastings 알고리즘과 Gibbs sampling을 이용해서 이들 분포를 따르는 확률분포의 seqeunce를 뽑아낼 수 있고, Posterior mean을 구할 수 있다.


[베이즈 정리 추가 자료]

https://m.blog.naver.com/davidj09/221246165061


[Gibbs Sampling 추가 자료]

https://newsight.tistory.com/102

MCMC, Metropolis-Hastings, Gibbs Sampling

by 곽동현 IMCOMKING 2014. 7. 22.

Markov Assumption(=Markov Property) : 직전 사건에 의해서만 현재 사건이 영향을 받는 속성

Chain : discrete 한 Time Sequence 사건

Markov Chain : Markov Assumption 을 만족하는 Chain

Monte Carlo Method : 다음과 같이 여러 개의 표본을 추출해서 전체적인 분포를 파악하는 방법론

Sampling : 해당 모델을 만족하는 데이터를 생성, 추출해내는 것. 단 그 모델의 확률 분포에 비례하여 확률 밀도가 높은 곳에서 그에 비례하게 더 많은 데이터가 나오도록 추출해야 한다.

Markov Chain Monte Carlo : Markov Chain에서 샘플링을 하기 위해 Monte Carlo Method를 써서 확률 분포가 반영된 데이터를 샘플링하는 것. 여기서의 Markov는 샘플링을 Markov Chain으로 하는 의미임.

(Markov Random Field에서의 Markov는 그래프의 노드들이 서로 마르코프 프로퍼티를 갖는 의미인 듯)

Detailed Balance : MCMC에서 뽑은 샘플이 P(X)의 분포를 충분히 근사하기 위한 조건. P(X'->X)/P(X->X')=1 이면 만족하며, Ergodicity라는 개념 또한 관련이 있다. 간단히 말하면 확률 분포가 연속적이고 섬처럼 동떨어진 분포가 있지 않는 일반적인 경우를 말한다.

Rejection Sampling : MCMC 알고리즘 중 가장 기본적인 샘플링 기법. 랜덤하게 (Uniform 하게) 하나의 데이터를 추출한 다음, 그것의 확률 값을 계산하여 그 확률만큼 Accept 하고 나머지는 Reject 시키는 방법. (당연히 이렇게 하면 확률 값이 큰 곳의 샘플들은 많이 뽑히고, 확률 값이 적은 곳의 샘플들은 잘 뽑히지 않는다. 그러나 이 방법은 확률분포가 매우 넓고 길게 퍼져있는 공간에서는 버려야 하는 샘플이 너무 많아 시간 효율이 좋지 않다.)

Metropolis-Hastings : 조금 더 개선된 MCMC 알고리즘의 하나로 샘플링을 한 번 한 다음, 다음 샘플에 대해서 Accept 할지를 min(1, P(X')/P(X)) 의 확률로 결정하는 방법. X'은 다음에 샘플링하기 위해 랜덤하게 (Uniform 하게) 뽑아본 샘플이다. min(1, P(X')/P(X))을 해석해보면, X'에서의 확률이 기존 샘플 X에서의 확률보다 크면 무조건 샘플링을 하는 것이고(1이 선택되므로),X'의 확률이 더 작은 경우 그에 비례하여 Reject를 하는 방법이다. 이것은 Detailed Balance를 만족시키면서 보다 빠른 방법이다.

그러나 Metropolis-Hastings의 경우도 고차원으로 갈수록 한 샘플에서의 확률 값이 0으로 점점 가까워지기 때문에 Accept Ratio가 매우 낮아져 시간 상 비효율적이다.

(고차원에서도 어떤 확률 분포의 합은 결국 1이 되어야 한다. 그러나 차원이 커질수록 그것을 구성하는 분포도 차원에 따라 확장되어 퍼질 수밖에 없다.)

Gibbs Sampling : Metropolis-Hastings의 단점인 고차원에서의 느린 샘플링을 해결한 MCMC 알고리즘. 구현이 쉽고 간편하며, 실행 속도도 빨라 널리 사용되는 샘플링 방법이다.

맨 처음 하나의 Initial 한 샘플을 랜덤하게 정한 다음, 그 샘플에서 변수를 1개씩, 즉 1개 차원씩 번갈아가면서 정하는 방법.

이것은 Xi ~ P(Xi|X-i) 로 표현하며, 의미는 Xi라는 i 번 째 변수 하나를 결정할 때, i를 제외한 나머지(X-i) 변수들을 이용해서 결정하는 것이다.

만약 L 차원에서의 확률 분포라면, 1~L까지의 변수들을 하나씩 샘플링 한 다음, 다시 1~L까지를 또 샘플링하고 이것을 계속해서 반복한다. 그렇게 만든 샘플들이 쭉 있으면, 그것들을 다시 일정한 간격으로 택하여 최종 샘플링을 완성한다.

Gibbs Sampling은 고차원의 영역을 빠르게 여기저기 왔다 갔다 하면서 샘플들을 뽑기 때문에 딥러닝 등에서 자주 쓰인다.

(Gibbs Sampling의 Binary에서 예시)

1-1 : [1,0,1] // Initial 샘플로, 랜덤하게 정해진 것이며, 굵게 칠해진 숫자"1"을 0으로 바꿀지, 그대로 1로 놓을 지를 나머지 두 변수 0, 1의 확률을 이용해서 계산한다.

1-2 : [0,0,1] // 다시 두 번째 변수인 0에 대해서 결정 한다. 물론 확률적인 것으로, 0->0이 될 수도 있고 0->1이 될 수도 있다.

1-3 : [0,1,1] // 마지막 세 번째 변수인 1에 대해서 정한다. 이번엔 1->1로 변하지 않았다.

(3차원 변수이므로, 3회가 지날 때마다 전체 데이터를 샘플링한다.)

2-1 : [0,1,1] // 다시 마지막 상태에서부터 이어서 첫 번째 변수부터 시작한다.

2-2 : [1,1,1]

...

이렇게 1000사이클을 돌아 총 1000*3개의 결과가 완성되었다고 해보자, 그러면 이 3천 개의 데이터 셋에서 일정한 간격(N 차원 일 경우, N 번 째 간격)으로 데이터를 선택하여 최종적인 샘플링을 완성한다. 그 이유는 위와 같은 과정이 N 번 거쳐야만, 모든 차원에 대해 변화가 이루어지기 때문이다.

Gibbs Sampling은 일종의 현재 상태에서의 변수들의 상태를 체크해보고자 하는 방법으로 쓰일 것 같다는 느낌이다. 물론 활용 범위가 매우 매우 커서 공학적으로 안 쓰이는 곳이 없는 것 같다.

http://enginius.tistory.com/296

고급이론 :

Gibbs sampling에서는 proposal distribution 이 그 확률 분포 자체의 conditional distribution이다. RBM 같은 경우 이 conditional 분포 자체가 gaussian 혹은 베르누이 분포이기 때문에 이 자체에서도 바로 샘플링이 가능하며, 이것의 의미는 N 차원의 공간에서 1축씩 이동할 때, conditional distribution을 통해서 샘플링을 하여 한 축씩 이동하는 것을 의미한다.

그런데 만약 gibbs sampling에서의 conditional distribution 자체만으로 proposal distribution으로 사용이 불가능할 때, 즉 샘플링이 불가능한 분포인 경우 이 1개의 축을 이동하는 과정에서도 metropolis-hastings 같은 방법을 사용해야만 한다. 즉 어떻게 보면 깁스 샘플링은 1축씩 이동하는 어떤 메타 방법론이라고 볼 수도 있다.

그리고 만약 gibbs sampling을 2차원의 변수에 대해서 할 때, 2개의 모드가 있는데 이 두 개의 모드가 x1과 x2의 대각선 방향으로 아주 멀리 서로 위치해 있다면, gibbs sampling만으로는 절대 다른 모드로 넘어갈 수가 없다. 왜냐하면 1축씩 이동하는 방식으로는 현재의 모드 밖을 넘어갈 확률이 0이기 때문이다.(대각선에 위치하므로 1개의 변수만 사용해서는 확률이 0이 됨)

그러나 아주 고차원 공간에서는 이런 식으로 모든 축에 대해서 걸리지 않는 모드가 존재할 확률이 매우 낮아지고, 반드시 어느 한 축에서는 다른 모드의 확률이 존재하게 된다. 그래서 고차원 공간에서는 이렇게 1개의 축이라도 걸리면, 이 축을 통해서 다른 모드로 넘어가는 것이 가능하다. 그래서 gibbs sampling이 고차원 공간에서 아주 빠르게 효과적으로 잘 동작한다고 볼 수 있다.


https://newsight.tistory.com/151

Gibbs sampling

MCMC는 N 차원의 점에서 바로 N 차원의 점으로 모든 차원을 한 번에 이동하면서 샘플링을 한 것인 반면, 깁스 샘플링은 한 개의 차원을 제외한 나머지는 고정을 시킨 다음, 한 차원 씩 샘플링을 해서 총 N 번의 이동을 하고 난 다음 진짜 새로운 데이터를 샘플링하는 것이다.

단 깁스 샘플링을 하기 위해서는 말한 대로 한 개 차원을 제외한 나머지를 given으로 고정시켜야 한다. 즉 각 차원에 대한 conditional probability를 알아야만 사용이 가능하다.

그러나 RBM 같은 모델의 경우, 우리가 모델을 정의하였으므로 그 conditional probability를 알 수가 있다. 따라서 당연히 깁스 샘플링도 가능하다.

MH는 1~10차원의 샘플링은 잘 하지만, 수천 차원에서의 샘플링은 리젝션 레이트가 너무 높아서 작동을 하지 못한다.

깁스 샘플링이 좋은 이유는 한 번에 1개의 차원씩 이동을 하기 때문에, 문제를 훨씬 단순화 시켜서 풀었다는 것이고 그로 인해 고차원의 저주와 같은 문제가 안 발생하는 걸로 보인다. 그래서 고차원 분포의 샘플링에서 훨씬 빠르게 동작하는 것 같다.


[Gibbs Sampling 추가 자료]

https://bab2min.tistory.com/569

문헌 d에 속하는 어떤 단어 m이 주제 j에 속할 확률은 주제 j에 속하는 모든 단어 중에서 단어 m이 차지하는 비중문헌 d에 속하는 모든 주제 중 주제 j가 차지하는 비중의 곱에 비례한다는 것입니다.

깁스 샘플링을 이용한 LDA는 다음과 같은 절차로 이뤄집니다.

1. 각각의 단어에 임의의 주제를 배정한다

2.(잘못됐겠지만) 모든 단어에 주제가 배정되어 있고, 그 결과 문헌별 주제 분포와 주제별 단어 분포가 결정되었음. 이를 깁스 샘플링을 통해서 개선해 나가자.

3.n 번째 단어를 골라 빼낸다. (나머지 단어들이 모두 적절하게 배정되어 있다고 가정하고)

4. 빼낸 단어를 제외하고, 그 단어가 속한 문헌의 주제 분포(P(Topic | Document))를 계산하고, 그 단어가 속한 주제의 단어 분포(P(Word | Topic))를 계산한다. P(Word | Topic) * P(Topic | Document)에서 Topic을 하나 뽑아 그 단어에 배정한다.

5.n <- n+1로 하고 3번으로 돌아간다.

6. 충분히 반복하다 보면 값들이 수렴하고 안정되게 된다. 그럼 끝.

​적용예)

1. 각각의 단어의 임의의 주제를 배정한다

주제가 2개이므로 #1, #2둘 중에 하나를 각 단어에 임의로 배정했습니다. 이렇게 단어가 배정되었으니 우리는 이제 문헌별 주제 분포와 주제별 단어 분포를 계산할 수 있습니다.

2. 문헌별 주제 분포, 주제별 단어 분포를 계산한다.

문헌별 주제 분포 θ입니다. 각 값이 0으로 끝나는 게 아니라. 1인 이유는 모든 값에 하이퍼 파라미터 α값이 합쳐져 있기 때문입니다. A 문헌에는 #1, #2가 각각 하나씩이므로 (1.1, 1.1)이 계산된 것이고, C 문헌에는 #2만 2개 배정되었으므로 (0.1, 2.1)가 계산된 것입니다.

주제별 단어 분포 φ입니다. 마찬가지로 0.001로 끝나는 이유는 하이퍼 파라미터 β값이 합쳐져 있기 때문입니다.

3. 첫 번째 단어를 골라 빼낸다.

첫 번째 단어 cute를 빼냈습니다. 따라서 문헌별 주제 분포, 주제별 단어 분포도 다음과 같이 바뀌게 됩니다.

4. 새로운 주제를 배정한다

문헌 A에 속하는 단어 cute가 #1에 속할지 #2에 속할지 판단해야 합니다. 문헌 내 주제 분포를 따르면

(문헌 A 내에 #1이 있을 확률) = 0.1 / (0.1+1.1) = 0.083...

주제별 단어 분포를 따르면

(#1 내의 단어가 cute 일 확률) = 0.001 / 8.007 = 0.00012...

따라서 (A 안의 cute가 #1일 확률) = 0.083 * 0.00012 ... = 0.00008... 이 됩니다.

마찬가지로 #2에 속할 확률도 계산해봅시다.

(문헌 A 내에 #2가 있을 확률) = 1.1 / (0.1+1.1) = 0.916...

(#2 내의 단어가 cute 일 확률) = 1.001 / 8.007 = 0.125...

따라서 (A 안의 cute가 #2일 확률) = 0.916 * 0.125 ... = 0.114... 가 됩니다.

즉 A 안의 cute는 (0.00008, 0.114)의 카테고리 분포를 따라 #1이 되거나 #2가 되겠죠. 가능도 비중을 따라 #1이나 #2 중에 하나를 뽑습니다. (물론 높은 확률로 #2가 뽑히겠죠. 하지만 #1이 뽑힐 가능성이 아예 0이 되지는 않습니다. 이는 하이퍼 파라미터 αβ가 하는 역할 중 하나에요.) 여기서는 #2로 배정되었다고 가정할게요.

3-1. 두 번째 단어를 골라서 빼낸다.

여기서부터는 반복입니다. 설명은 다 적지 않도록 하고 각 단어 샘플링 단계마다 주제 배정이 어떻게 바뀌었는지만 보여드리도록 하겠습니다.

두 번째 단어 업데이트. #2에 배정됨

세 번째 단어 업데이트. #1에 배정됨

네 번째 단어 업데이트. #1에 배정됨

.

마지막 단어까지 업데이트가 끝나면 이것이 1회 깁스 샘플링을 마무리한 것이 됩니다. 이 작업을 적절하게 여러 번 반복하다 보면 모든 단어가 적절하게 자기 주제를 찾아 배정되게 될 것이라는 것이 깁스 샘플링을 이용한 LDA의 가정이죠. 수렴할 때까지 반복하면 다음과 같은 결과가 나옵니다.

최종 결과물

이를 바탕으로 구한 문헌별 주제 분포, 주제별 단어 분포는 다음과 같습니다.

이를 보기 좋게 정리하면 다음과 같이 되겠죠.

A 문헌: #2(0.955), #1(0.045)

B 문헌: #1(0.968), #2(0.032)

C 문헌: #2(0.955), #1(0.045)

D 문헌: #1(0.955), #2(0.045)

E 문헌: #1(0.968), #2(0.032)

F 문헌: #1(0.596), #2(0.404)

#1: eat(0.272), cake(0.272), bread(0.272), rice(0.181), cute(0.001), kitty(0.001) hamster(0.001)

#2: cute(0.333), kitty(0.333), hamster(0.333), eat(0.001), rice(0.001), cake(0.001), bread(0.001)

적절하게 잘 분류된 것 같군요. #1에는 '음식'이라는 타이틀을, #2에는 '귀여운 동물'이라는 타이틀을 붙여주면 딱 좋겠군요.

 


[이은아님 강의 모음]

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

 


 

반응형
반응형

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

비정형 데이터 분석 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



 

 

반응형
반응형

 

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

 

비정형 데이터 분석 5/11 Feature Extraction t-SNE

 

https://youtu.be/JXeViICwR6A

 

 

키워드 및 핵심 내용

 

Feature extraction 2가지 방법

- LSA

- t-SNE

 

t-SNE

- SNE (Stochastic Neighbor Embedding)

고차원의 데이터를 저차원으로 변환할 때 개체 간의 거리를 확률적으로 정하기

 

- Symmetric SNE

어떤 개체를 기준으로 할지에 따라 거리가 달라짐 -> 양쪽의 평균

 

- Crowding problem & t-SNE

normal distribution -> t-distribution -> 꼬리가 두꺼워짐 -> 웬만히 가까운 점들 이외는 멀리 배치

Crowding problem : 저차원으로 변환할 때 완벽하게 거리 보전은 불가능하다고 보고 오차를 줄이는 방향으로 학습

알고리즘

1. 개체를 임베딩 공간에 랜덤 배치

2. 각 개체에 대해 원래 공간에서의 거리가 가까우면 끌어당기고 멀면 민다

3. 모든 개체에 대해 반복하면 끝

 


[t-SNE 추가자료]

https://bcho.tistory.com/1210

 

PCA 기반 차원 감소의 문제점

PCA의 경우 선형 분석 방식으로 값을 사상하기 때문에 차원이 감소되면서 군집화되어 있는 데이터들이 뭉개져서 제대로 구별할 수 없는 문제를 가지고 있다.

 

 

출처  https://www.youtube.com/watch?v=NEaUSP4YerM

이 그림은 2차원에서 1차원으로 PCA 분석을 이용하여 차원을 줄인 예인데, 2차원에서는 파란색과 붉은색이 구별이 되는데, 1차원으로 줄면서 1차원 상의 위치가 유사한 바람에, 두 군집의 변별력이 없어져 버렸다.

 

t-SNE

 

이런 문제를 해결하기 위한 차원 감소 방법으로는 t-SNE (티스니라고 읽음) 방식이 있는데, 대략적인 원리는 다음과 같다.

먼저 점을 하나 선택한다. 아래는 검은색 점을 선택했는데, 이 점에서부터 다른 점까지의 거리를 측정한다.

 

다음 T 분포 그래프를 이용하여, 검정 점(기준점) 을 T 분포 상의 가운데 위치한다면, 기준점으로부터 상대점까지 거리에 있는 T 분포의 값을 선택(위의 T 분포 그래프에서 파란 점에서 위로 점성이 올라가서 T 분포 그래프상에 붉은색으로 X 표가 되어 있는 값) 하여, 이 값을 친밀도 (Similarity)로 하고, 이 친밀도가 가까운 값끼리 묶는다.

 

이 경우 PCA처럼 군집이 중복되지 않는 장점은 있지만, 매번 계산할 때마다 축의 위치가 바뀌어서, 다른 모양으로 나타난다.

단 데이터의 군집성과 같은 특성들은 유지되기 때문에 시각화를 통한 데이터 분석에는 유용하지만, 매번 값이 바뀌는 특성으로 인하여, 머신러닝 모델의 학습 피처로 사용하기는 다소 어려운 점이 있다.

 

출처: https://bcho.tistory.com/1210?category=555440 [조대협의 블로그]

 


[이은아님 강의 모음]

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

 

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

 

www.youtube.com

 


 

 

 

반응형
반응형

 

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

 

비정형 데이터 분석 4/11 Feature Selection

 

https://youtu.be/Zd9WYBZZso8

 

 

키워드 및 핵심 내용

 

차원축소(Dimensionality Reduction)

- Feature Selection

- Feature Extraction

 

Feature Selection

- Feature를 가공 없이 선택해서 사용

 

Feature Selection 지표

 

F1 (데이터의 밸런스가 맞지 않을 때 즉 각 class 비중이 차이가 날 경우 사용)

- Recall = TP / (TP + FN) : 긍정문서 중 해당 Term 등장 횟수

- Precision = TP / (TP + FP) : 해당 Term 이 나타난 문서 중 긍정문서의 개수

- Harmonic Mean(조화평균) : 큰 값에 페널티 -> 작은 값의 비중 높임

- F1 Score = 2 x ( Precsion x Recall ) / ( Precision + Recall )

- F1 단점 : 긍정문서를 잘 판독하는 단어에 높은 점수, 상대적으로 부정문서를 판독하는 단어에 낮은 점수

 

IG (Information Gain)

- 분류기에 의해서 얼마나 정보가 발생했는지로 판단

- Entropy(무질서의 정도) -> 정보 -> Entropy 낮아짐

- 단어(feature)의 등장에 의해 전후 Entropy의 차이가 클수록 그 단어(feature)에 높은 점수

 

X2 (Chi(카이)-squared Statistic)

- 해당 단어의 출현 여부와 긍정, 부정 분류가 통계적으로 완전히 독립적이라면 기댓값을 구할 수 있다는 아이디어

- X^2으로 나온 결괏값이 크다는 것은 우리가 가정한 독립성의 가정에 적합하다는 것을 의미한다.

 

BNS (Bi-Normal Separation)

- 잘 안 쓰임

 

PR, OddR, OddN / Acc, AccR / DF

 


[Feature Selection 추가 자료]

 

https://blog.naver.com/jamiet1/221419434072

 

1. Feature Selection vs Feature extraction

둘 다 차원 감소를 하는 방법이다.

- Feature selection : 변환 없이 원래 있는 d개 feature 중 m개만 뽑아 쓰겠다는 것

- Feature extraction : d개 feature를 m 차원 공간 벡터로 변환시키는 것

 

2. Feature Subset Selection(#FSS)

정확도가 높은 목적함수 J(Y)를 찾는 것

 

 

왜 feature extraction 안 하고 FSS를 할까?

1) feature를 획득하기 어렵거나 비싼 경우

test 해야 하는 feature는 너무 많은데 final 선택은 한 개... 막 이런 경우

2) 내 classifier에서 의미 있는 rule을 추출하고 싶은 경우

project 할 때, feature들이 사라질 가능성도 있으니까

3) feature가 숫자가 아니라 test나 모양일 경우

 

feature를 줄이면

1) 일반화 성능이 올라간다.

2) 복잡도와 실행시간이 줄어든다.

 

3. Search strategy and objective function

feature를 어떻게 선택해볼까?

목적함수는 뽑아낸 것이 용도에 맞게 잘 뽑아냈는지를 판단해야 한다.

 

 

1) Filter : feature, 클래스 간 정보를 이용한다

- 클래스 간 거리... (유클라드, 멘하탄)

- separability... (LDA 고윳값)

- 상관관계... 상관관계의 여부를 따져본다

- 정보이론

 

1-1) 선형 관계 : correlation coefficient를 이용한다

 

 

Pic : feature i와 클래스 label 간의 correlation coefficient

Pij : feature i, j 간 correlation coefficient

 

1-2) 비선형 관계 : 상호 정보량 I를 사용한다.

상관관계는 선형에서만 가능하니까.

 

 

I(Ym, C) : feature 벡터와 클래스 label 간 상호 정보량으로 클래스 불확실성의 양.

H(.) : 엔트로피 함수

 

상호 정보량이 0 이면 독립이니까 변별 불가능하다.

상호정보량이 큰 걸 선택한다.

 

 

가중치를 넣어서 빼준다.

 

장점 1 : 계산이 빠르다. 데이터셋에 대한 반복 계산 없다. training 빠름.

장점 2 : 일반화. 데이터의 고유 형태를 평가하기 때문에 어떤 형태의 분류기가 와도 좋은 성능을 가진다.

단점 : large subset을 고르는 경향이 있다. 목적 함수 자체가 단조로워서... 모든 feature를 선택해버리기도 한다. user가 선택할 feature의 수를 직접 골라줘야 함.

 

2) Wrapper : classifier를 사용한다.

cross-validation이나 resampling 같은 것

매번 인식기 모델을 훈련 후 cross-validation 해준다.

 

장점 1 : 정확도.

장점 2 : 일반화 능력. 오버 피팅을 피하는 메커니즘을 통해 상승!

단점 1 : 느린 실행 속도. subset마다 classifier training

단점 2 : 부족한 일반화. classifier의 평가 함수에 달려있다.

즉, 목적함수에서 선택한 분류기의 성능에 따라 일반화 정도가 갈린다.

 

[출처][패턴인식] sequential feature selection|작성자Karen

 


[허민석님 강의] 다중 분류 모델 성능 측정 (accuracy, f1 score, precision, recall on multiclass classification)

https://youtu.be/8DbC39cvvis

 


[IG, X2 추가 자료]

http://freesearch.pe.kr/archives/1324

 

Feature Selection - from __future__ import dream

Machine Learning을 하기 전에 수가지의 후보 Feature 셋중에 쓸만한 것들을 골라내는 작업을 한다. 이 작업이 필요한 이유는 쓸데없는 noise feature를 추가할 경우 실험셋에서만 적합한 classifier가 나올 ��

freesearch.pe.kr

확률적인 단점 때문에 chi-square 방법이 feature 셋을 작게 선정했을 때 성능이 좋지 않다고 한다.

예를 들어 spam class에 erlang이 한번 나왔다고 그것을 스팸 확률을 100으로 주는 건 문제가 있는 것과 비슷하다.

 

저런 저빈도 고확률의 feature들이 다 선택이 되고 난 다음에 선택되는 고빈도 중확률 feature들과의 조화로 인해 feature 셋이 추가될수록 성능은 나아진다고 한다.

물론 위의 단점을 보완하기 위한 Roinson의 희소 확률 보정식 같은 게 있긴 하지만 이런 카이제곱 방법의 단점은 알아두는 게 좋을 거 같다.

 

Mutual Information 방법은 feature 선정 초반에 정확도가 높아지다가 셋이 추가될수록 점점 하강하는 곡선을 탄다.

따라서 feature 셋의 크기가 작게 선정이 되어야 되는 경우라는 Mutual Information 방법이 더 나을 거란 생각을 해본다.


[이은아님 강의 모음]

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



 

 

반응형
반응형

 

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

 

비정형 데이터 분석 3/11 문장, 문단, 문서 임베딩(Embedding)

youtu.be/1tb2njpp8-s

 

설명 구조

 

지난 시간까지 배운 내용돌아보면

가장 고전적방법

가장 보편적방법

예시로 간단히 소개

 


키워드 및 핵심 내용

 

문장, 문단, 문서, Categoly (자연어) 임베딩

 

Doc2Vec

- 문장 분석을 위한 임베딩

- Word2Vec과 유사한 아이디어(CBOW, Skip gram) 활용

 

PV-DM (Paragraph Vector - Distributed Memory model)

- paragraph-id(문서정보) + 단어들 -> 다음 단어 예측

- paragraph-id는 그 문장의 모든 단어들과 학습 -> 그 문장의 주제 정보 함축

- paragraph vector 가 문서의 주제를 저장(Memory) -> PV-DM 명명

 

PV-DBOW (Paragraph Vector - Distributed Bag Of Words)

- skip gram(중심단어로 주변단어 예측) : PV-DBOW(paragraph-ID로 주변단어 예측)

- paragraph vector는 그 문서(문단, 문장)의 모든 정보 함축

 

사례) Wikipedia 문단 벡터의 시각화(t-SNE 차원축소)

- 비슷한 주제끼리 임베딩 됨

 

- 리뷰 데이터의 임베딩

- 평점이 유사한 문단, 단어끼리 임베딩

- 특정 평점과 가까이 있는 문단은 해당 평점을 받을 확률이 높다는 의미

 

 

자연어 이외의 임베딩

 

- 일별 뉴스 임베딩

- 서로 가까이 있는 사건으로 사회, 경제, 정치적 상황의 유사성 예측 가능

 

- 시스템 콜 임베딩

- 시스템 작업 로그 -> 정상적 로그와 떨어져 있는 의심이 가는 이상 행동 사용자 파악

 

- 방송 임베딩(afreecaTV Live2Vec)

- 시간순 시청 이력을 문장, 문단으로 보고 임베딩(학습)하여 유사한 방송 추천

 


 

[유사도 기법]

https://wikidocs.net/24654

 

1. 유클리드 거리(Euclidean distance)

 

다차원 공간에서 두 개의 점 pq가 각각p=(p1, p2, p3,...,pn)과q=(q1, q2, q3,...,qn)의좌표를 가질 때 두 점 사이의 거리를 계산하는 유클리드 거리 공식은 다음과 같습니다.

2. 자카드 유사도(Jaccard similarity)

 

A와 B 두 개의 집합이 있다고 합시다. 이때 교집합은 두 개의 집합에서 공통으로 가지고 있는 원소들의 집합을 말합니다. 즉, 합집합에서 교집합의 비율을 구한다면 두 집합 A와 B의 유사도를 구할 수 있다는 것이 자카드 유사도(jaccard similarity)의 아이디어입니다.

자카드 유사도는 0과 1사이의 값을 가지며, 만약 두 집합이 동일하다면 1의 값을 가지고, 두 집합의 공통 원소가 없다면 0의 값을 갖습니다. 자카드 유사도를 구하는 함수를J라고 하였을 때, 자카드 유사도 함수J는 아래와 같습니다.

두 개의 비교할 문서를 각각doc1,doc2라고 했을 때doc1doc2의 문서의 유사도를 구하기 위한 자카드 유사도는 이와 같습니다.

 

즉, 두 문서doc1,doc2사이의 자카드 유사도J(doc1, doc2)는두 집합의 교집합 크기를 두 집합의 합집합 크기로 나눈 값으로 정의됩니다.

 


[이은아님 강의 모음]

www.youtube.com/playlist?list=PLGAnpwASolI0vViZItiP90nWI_s9m91Av

 

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

 

www.youtube.com

 


 


 

 

반응형
반응형

 

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

 

비정형 데이터 분석 2/11 Word2Vec

 

youtu.be/G8UFjFlVVQQ

 

설명 구조

 

 

~식과 같고 이 식을 최대화하려면 분자는 키우고 분모는 줄여야합니다.

~값을 높인다는 것은 무엇일까요?

~의 의미에 대해 잠깐 살펴보겠습니다.

~은 한자~이며 ~입니다.

~의 정의는 ~과 같습니다.

~에 비유할 수 있습니다.

~의 

 


 

수식 입력 관련

blog.naver.com/alwaysneoi/220698343806

 

키워드 및 핵심 내용

 

Word2Vec/ skip-gram 모델 중심

 

- skip-gram 학습 방법

 

학습 목표는 중심단어(c)가 주어졌을 때, 주변단어(o)가 나타날 확률 최대화하는 것입니다.

그 확률은 아래 식과 같고 이 식을 최대화하려면 우변의 분자는 키우고 분모는 줄여야 합니다.

분자를 키우다는 것은 중심단어 벡터 v 와 주변단어 벡터 u의 내적 값을 높인다는 것입니다.

우선 내적의 정의는 아래 식과 같습니다.

주변단어가 중심단어에 더 가깝게 리프리젠테이션되면 그 내적 값은 더 크게 됩니다.

중심단어와 주변단어의 연관성을 높여야 합니다.

 

분모는 줄일수록 좋습니다.

윈도우 내에 등장하지 않는 단어를 포함한 전체 단어와 중심단어의 유사도를 감소시킨다는 정도로

이해하시면 될 것 같습니다.

 

word2vec 의 학습법은 경사상승법으로 업데이트를 수행합니다.

조금씩 이동하면서 가야할 방향을 결정해야 합니다.

가야할 방향과 보폭은 다음 식과 같습니다.

이 식이 만들어진 과정을 살펴보겠습니다.

 

방향을 결정한다는 것은 해당 지점에서의 기울기를 구하는 것을 의미합니다.

 

eda-ai-lab.tistory.com/122

 

- skip-gram 학습 트릭

 

1.다빈도 단어의 표본추출

- 자주 등장하는 단어를 샘플링에서 제외 -> 학습 부하 감소

- 제외 확률

 

2.윈도우 밖 단어의 표본추출

- negative sample : 윈도우(중심단어, 주변단어) 밖에서 5~20개 단어를 확률적으로 추출

- negative sample에 뽑힐 확률

- 3/4(0.75)승하여 많은 샘플은 확률을 약간 줄이고 적은 샘플은 확률을 약간 높임

 


 

[word2vec 추가 설명]

ratsgo.github.io/from%20frequency%20to%20semantics/2017/03/30/word2vec/

 

Word2Vec의 학습 방식 · ratsgo's blog

이번 포스팅에서는 최근 인기를 끌고 있는 단어 임베딩(embedding) 방법론인 Word2Vec에 대해 살펴보고자 합니다. Word2Vec은 말 그대로 단어를 벡터로 바꿔주는 알고리즘입니다. Neural Network Language Model(

ratsgo.github.io

 


[이은아님 강의 모음]

www.youtube.com/playlist?list=PLGAnpwASolI0vViZItiP90nWI_s9m91Av

 

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

 

www.youtube.com


 


 

 

반응형

+ Recent posts