전체 글 55

[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와 같았으면 하는 것이 목..

[3-4] 잠재 의미 분석(LSA,Latent Semantic Analysis) 이란?

'단어-문서 행렬', 'TF-IDF 행렬' '단어-문맥 행렬' , 'PMI 행렬' 과 같은 단어와 단어, 문장간의 등장 빈도를 행렬로 나타내어 단어를 벡터로 표현할 수 있었지만, 차원이 너무 커 계산상의 효율성을 키우기 위해 차원은 축소하되 단어가 담고있는 의미를 보존하기 위해(정교하게 뽑아냄으로써 잠재 의미를 드러내기 위해)잠재 의미 분석이라는 방법이 등장했다. ​ 이는 성능이 아주 뛰어나지는 않지만, 뒤에 나오는 GloVe나 Swivel 과 같은 곳에 행렬 분해 기법으로서 사용된다. ​ PMI는 두 확률 변수 사이의 상관성을 계량화한 지표이다. ​ ​ i 가 일어날 확률, j가 일어날 확률과 i,j가 동시에 일어날 확률을 가지고 다음과 같은 식으로 표현하면, PMI는 i,j가 자주 같이 등장할수록 커..

[3-3] FastText란?

FastText (Boganowski eta al., 2017)은 페이스북에서 개발해 공개한 단어 임베딩 기법이다. 기본적으로 Word2Vec과 같지만 FastText의 특징은 각 단어를 문자단위 n-gram으로 표현하여 학습한다는 것이다. 즉, Word2Vec은 단어들만으로 학습했다고 한다면, FastText는 더 나아가 단어 내에 들어있는 단어들까지 학습한다는 것이다. 예를들어 abcd라는 단어가 있다면 이를 n=3으로 표현한다고 하자. 우리는 abcd를 => , 5개의 문자 단위 n-gram 벡터를 합해 표현한다. ​ 그래서 기존 Word2Vec의 확률계산에 까지 벡터로써 업데이트 하는 것이다. ​ 그렇다면 이점이 무엇일까? ​ 바로 미등록 단어(+오타) 에도 강해진다는 것이다. 또한 조사나 어미가..