미국 스탠포드 대학에서 개발한 2014 GloVe 임베딩.
-요약
1. 주어진 Corpus와 Window size를 가지고, co-occurrence matrix X를 만든다.
2. Word2Vec과 유사한 방법으로 학습 대상이 되는 단어들을 Window size안에서 고른다.
3. 고른 단어와 matrix X를 기반으로 Objective Function을 사용해서 학습시킨다.
잠깐 단어 표현 ( Word Representation) 분류표를 한번 죽 보자. 그리고 GloVe의 탄생 배경을 적당히 살펴본다.
full document같은 경우는 단어-문서간 동시출현을 기반으로 matrix X를 구축한다. 일반적인 주제분류에 적합하고 뭐 LSA가 있다.
window기반 같은 경우 단어-단어간의 동시 출현을 matrix X 로 구축한다. 의미와 문법 정보를 모두 캡쳐해낼 수 있다.
예측기반의 분산 표현인 Word2Vec은 window수치에 따라서 주변 단어의 등장확률을 보존한다.
[GloVe는 두 단어 $w_{i}$와 $w_{j}$의 co-occurrency(동시출현!) $W_{ij}$를 보존하는 임베딩이다. ]
Glove는 사실 카운트 기반과 예측 기반을 모두 사용하는 방법론이라고 할 수 있다. 앞서 학습했던 카운트 기반의 LSA 잠재의미분석이나 예측 기반의 word2vec의 단점을 보완한다는 목적으로 나왔다. 실제로도 word2vec보다 뛰어난 성능을 보여준다. 현재까진 단정적으로 뭐가 더 낫다고 하기는 힘든 상황이다.
아무튼,
LSA는 DTM이나 TF-IDF 행렬과 같이 각 문서에서의 각 단어의 빈도수를 카운트 한 행렬이라는 전체적인 통계 정보를 입력으로 받아 차원을 축소(Truncated SVD)하여 잠재된 의미를 끌어내는 방법론이었습니다. 반면, Word2Vec는 실제값과 예측값에 대한 오차를 손실 함수를 통해 줄여나가며 학습하는 예측 기반의 방법론이었다.
LSA는 카운트 기반으로 코퍼스의 전체적인 통계 정보를 고려하기는 하지만, 왕:남자 = 여왕:? (정답은 여자)와 같은 단어 의미의 유추 작업(Analogy task)에는 성능이 떨어진다. Word2Vec는 예측 기반으로 단어 간 유추 작업에는 LSA보다 뛰어나지만, 임베딩 벡터가 윈도우 크기 내에서만 주변 단어를 고려하기 때문에 코퍼스의 전체적인 통계 정보를 반영하지 못한다. GloVe는 이러한 기존 방법론들의 각각의 한계를 지적하며, LSA의 메커니즘이었던 카운트 기반의 방법과 Word2Vec의 메커니즘이었던 예측 기반의 방법론 두 가지를 모두 사용한다.
- 두 단어의 임베딩 벡터의 곱이 log co-occurrency가 되도록 임베딩하는 것이다.
동시출현을 알고 싶다면 단어-단어 행렬이나 문서-문서 행렬과 같이 행렬에 행렬의 전치를 곱한 결과 매트릭스를 준비해야한다.
아래 표는 어떤 동시 등장 행렬(1-mode matrix)을 가지고 정리한 동시 등장 확률을 보여주는데, 동시 등장 확률은 뭘까?
$P(k|i)$는 동시 등장 행렬로부터 특정 단어 i의 전체 등장 횟수를 카운트하고, 특정 단어 i가 등장했을 때 어떤 단어 k가 등장한 횟수를 카운트하여 계산한 조건부 확률이다.
$P(k|i)$에서 $i$를 중심단어, $k$를 주변단어라고 했을 때 중심단어 $i$의 행의 모든 값을 더한 값을 분모로 하고, $i$행 $k$열의 값을 분자로 한다고 할 수 있다.
위의 표는 k를 바꿔가며 여러 조건부 확률을 구한 표이다
이 아래의 표는 조금 단순화 해서 표현한 것이고, 이제 동시 등장 행렬과 동시 등장 확률의 이해를 바탕으로 손실함수를 설계해야한다. 손실함수는 시간관계상 패스.
GloVe의 아이디어를 한 줄로 요약하면 '임베딩 된 중심 단어와 주변 단어 벡터의 내적이 전체 코퍼스에서의 동시 등장 확률이 되도록 만드는 것'입니다. 즉, 이를 만족하도록 임베딩 벡터를 만드는 것이 목표입니다.
서울과기대 이영훈교수님 강의와 여러 블로그(wikidocs.net)를 참조하였음을 명시합니다.
'NLP' 카테고리의 다른 글
비정형 데이터 - Doc2Vec (0) | 2019.12.19 |
---|---|
비정형 데이터 - LDA (0) | 2019.12.16 |
비정형 데이터 - Word2Vec (0) | 2019.12.16 |
비정형 데이터 - Classifier_Basic (0) | 2019.12.16 |
비정형 데이터 - LSA / pLSA (0) | 2019.12.16 |
댓글