Tensorflow 2 NLP(자연어처리) 37

[4-5] 잠재 디리클레 할당(LDA, Latent Dirichlet Allocation)이란? + 베이즈 정리,깁스 샘플링

잠재 디리클레 할당(LDA)은 주어진 문서들에 대하여 각 문서에 어떤 토픽(주제)들이 존재하는지에 대한 확률 모형이다. 말뭉치 이면에 잠재된 토픽(주제)를 추출함으로써 토픽 모델링(topic modeling)이라 부르기도 한다. 문서들의 토픽 활률 분포로 각각 알아낸 다음 이를 이용해 문서를 임베딩한는 것이다. ​ 참고 자료는 다음과 같다. 1. 글쓴이가 글을 쓸 때 의도를 가지고 쓴다. 2. 그러므로 그 의도에 유사한 주제들이 글 속에 뭉텅이씩 차지하고 있을 것이다. 3. 그리고 주제에 해당하는 단어들이 글 속에 쓰였을 것이다. 특정 주제에 대한 글을 쓸 때 자주 쓰는 단어들 말이다. ​ 하지만, 우리가 볼 수 있는 것은 문서(글) 내의 단어들 뿐이다. 우리는 단어들로부터 문서의 의도를 추출해내고 그 ..

[4-4] Word2Vec에서 Doc2Vec까지

Word2Vec은 내 블로그에서 이미 다룬적이 있는 내용이다. 하지만 Doc2Vec은 Word2Vec의 응용형으로 생각 할 수 있기 때문에 다시한번 집는 동시에 이미지를 이용한 공간적 이해를 정확하게 해보면 좋을 것이다. ​ Word2Vec 단어 임베딩으로써 Word2Vec의 기본 개념은 1. 타깃단어와 문맥단어(주변단어)를 문장 내에서 선택한다. (window 사이즈(주변단어로 몇개까지 인정할것인가)를 정해놓아야 한다.) 2. 타깃단어와 문맥단어의 벡터 공간상 비슷한 공간에 위치하도록 한다. (유사한 방향을 보도록 = 코사인 유사도가 크도록) 3. 동시에 문맥단어가 아닌 단어(negative sample에서 negative word)들을 몇개 뽑아(negative sampling) 다른 방향으로 놓는다..

[4-3] 잠재 의미 분석(LSA), TF-IDF를 이용한 문서 임베딩

우리는 단어 임베딩을 할 때, LSA를 써서 단어 임베딩의 품질을 높였다. LSA를 사용하면 중심 단어와 문맥 단어(주위단어) 간의 내재적인 의미를 효과적으로 보존하고, 입력 데이터의 노이즈,희소성(sparsity : 행렬에 0많은 것 해결) 을 보완 가능하다. ​ 하지만 우리는 LSA의 성질을 사용하여 문장임베딩도 가능하다. ​ 1. 일단 형태소 분석기를 통해 문서들 내의 명사를 추출한다. 2. TF-IDF행렬을 만든다. (단어가 특정 문서에 어느정도의 영향을 끼치고 있는가를 수치적으로 표현 가능) 3. LSA를 하여(TruncatedSVD이용) 품질을 보존 한 채, 차원축소 4. 특정 문서를 가장 특징지을 수 있는 단어들(특정 문서의 정보성이 높은 단어들 = TF-IDF가 높은 단어)을 문서를 대표하..

[4-2] PCA(주성분 분석)와 SVD(특이값 분해) 차원축소를 완벽하게 이해하기

오늘은 정말 중요한 PCA와 SVD (특이값 분해)차원축소에 대해 다룰 것이다. 선형대수학을 배웠으면 천천히 따라가면서 충분히 이해 할 수 있을 것이다. 부디 이를 정확이 이해하고 싶다면 자신만의 언어로 만드는 시간을 들여 곱씹어 갔으면 좋겠다. ​ 솔직히 개념만 단순히 들으면, 직관적인 이해보다는 때려넣기식으로 느낄 수 있다. 이번 정리는 눈에 보이도록 하여 직관적인 이해를 가능하게 할 것이다. ​ ​ ​ 가장먼저 PCA를 설명하겠다. SVD는 더 간단하므로 PCA를 이해하고 나면 껌으로 보인다. PCA PCA를 설명하기 전에 차원축소에도 종류가 있다. 1. Feature extraction과 2. Feature selection으로 나뉜다. ​ Feature extraction은 모든 feature들..

[4-1] 가중 임베딩, SIF(Smooth Inverse Frequency)란?

SIF는 (Arora et al., 2016)에서 소개된 단어 임베딩을 문장 수준 임베딩으로 확장하는 기법이다. ​ 해당 논문은 다음과 같다. A Simple but Tough-to-Beat Baseline for Sentence Embeddings SIF의 구조를 간단히 정리해 보면 다음과 같다. 1. 문장 내 단어의 등장은 글쓴이가 의도한 주제와 연관이 깊다. 2. 하지만 주제와 관련되지 않은 단어들도 문장 내 포함가능하니 이 부분도 고려하자. 3. 문장 내 등장하는 단어들의 벡터 정보를 가지고(기존 단어 임베딩 기법을 통해 얻을 수 있음) 그 문장을 대표하는 벡터를 만들어 보자. ​ 이다. ​ ​ ​ ​ 이제 논문의 내용을 천천히 따라가 보자 ​ 가장먼저 논문 요약부분이다. 여기서 PCA/SVD부분..

[3-9] 단어 임베딩 평가 방법

단어 임베딩의 품질은 어떠한 기준으로 평가가 이루어 질까? ​ 크게 세 개로 나뉜다. 1. 단어 유사도 평가 (word similarity test) 2. 단어 유추 평가 (word analogy test) 3. 단어 임베딩 시각화 ​ ​ 1. 단어 유사도 평가는 일련의 단어 쌍을 미리 구성한 후에 사람이 평가한 점수와 단어 벡터 간 코사인 유사도 사이의 상관관계를 계산해 단어 임베딩의 품질을 평가한다. ​ 이때는 예측 기반 임베딩 기법(Word2Vec, FastText)이 행렬 분해 방법(GloVe,Swivel)들보다 의미적 관계가 잘 녹아있다는 결과가 나온다. (평가 데이터 셋 크가가 충분치 않기는 하지만 다음과 같은 경향을 띤다) ​ ​ 2. 단어 유추 평가는 단어 벡터간 계산을 통해 예를들어 '갑..

[3-8] Swivel이란?

단어 수준 임베딩 마지막 기법인 Swivel이다. ​ Swivel(Submatrix-Wise Vector Embedding Learner)은 구글 연구팀(Shazzer et al., 2016)이 발표한 행렬 분해 기반의 단어 임베딩 기법이다. ​ 해당 논문은 다음과 같다. ​ Swivel은 PMI 행렬을 분해한다는 점에서 단순히 중심단어-문맥단어 행렬을 분해하는 Glove와 차이점을 보인다. 또한 Swivel은 더 나아가 PMI의 단점을 극복할 수있게 설계하였다. ​ 그렇다면 PMI의 단점은 무엇일까? 학습과정에서 i,j 두 단어가 한번도 동시에 등장하지 않는 경우 로그 안의 값이 0이 되어 발산한다는 점이다. ​ 그래서 Swivel의 비용함수는 두가지로 나누니다. ​ 1. 말뭉치에 동시 등장한 케이스가..

[3-7] PMI 행렬 만드는 법

PMI 행렬을 만드는 기법을 하나 소개하겠다. ​ 기존의 단어-단어 행렬 등을 A라 하자 PMI행렬을 만들겠다는 것은 행에 해당하는 단어, 열에 해당하는 단어가 교차하는 부분의 원소자리에 그 두 단어간의 PMI값들로 채워넣고 싶은 것이다. 우리는 행에 해당하는 단어들에 대해 각각 전체 말뭉치에서 그 단어들이 등장할 확률을 미리 계산하여 (벡터)행렬로 나타낼 수 있다.(열에 해당하는 단어도 마찬가지) ​ ​ 단어 두개의 동시등장 '확률' 행렬은 기본 동시등장행렬에 말뭉치 개수(=중복을 허용한 전체 단어 등장수)로 나누어 주기만 하면 된다. PMI행렬은 에 로그를 취한 값으로 나타낼 수 있고, 행에 해당하는 단어들의 등장 확률 행렬과 열에 해당하는 단어들의 등장 확률 행렬을 대각행렬로 변환한다음 여기서 행렬..

[3-6] Glove란?

Glove는 당시 Word2Vec과 잠재의미분석 두 기법의 단점을 극복하고자 나온 단어 임베딩 기법이다. ​ 각각의 단점은 다음과 같다. 1. Word2Vec은 단어 간 유사도측정이 LSA(잠재의미분석)보다 유리하지만 사용자가 지정한 윈도우(타깃 단어 주위로 몇개의 단어까지 주변단어인가) 내의 로컬 문맥(local context)만 학습하기 때문에 말뭉치 전체의 통계 정보는 반영되기 어렵다. (그러나 이 단점은 Levy&Goldberg 2014 에서 Skip-gram 모델이 말뭉치 전체의 글로벌한 통계량인 SPMI 행렬을 분해하는 것과 동치라는 점을 증명하여 사라졌다.) ​ 2. 잠재의미분석은 말뭉치 전체의 통계량을 모두 활용할 수 있지만 단어간 유사도를 측정하기 어렵다. ​ ​ 이 단점을 극복하기 위해..

[3-5] Matrix Factorization이란?

간단히 말해 행렬 분해이다. ​ 하지만 기존의 행렬의 정보를 가지고 2개의 행렬로 분해하는 것이 아니라 충분히 작은 랜덤값을 가진 행렬 두개를 생성하고 그 두 행렬의 곱이 원래의 행렬과 유사해지도록 목적함수를 만든 다음 그 값을 줄여나가는 것이다. ​ 공부에 참고한 자료는 다음과 같다 1. 원래 행렬을 A , 분해 후 행렬을 Q,P 라 하자 그렇다면 다음을 만족도록 우리는 충분히 작은 랜덤값으로 차있는 행렬 Q,P를 업데이트 할 것이다. ​ 2. 업데이트를 위한 목적함수를 구한다. ​ 여기서 rui 는 예측행렬의 원소(원래 행렬 원소) 이고 , qiT,pu는 각각 QT행렬의 행벡터, p행렬의 열벡터이다. ​ 그렇다면 qTx p 는 내적처럼 스칼라값으로 나올 것이고 이 값을 rui와 같았으면 하는 것이 목..