2015년 8월 11일 화요일

word embedding 관련 정리

[language model]

A Neural Probabilistic Language Model (2003, Bengio)
- LM에 distributional representation을 적용한 대표 논문
- 계산복잡도 높음

Recurrent Neural Network based Language Model (2010, Mikolov)
Linguistic Regularities in Continuous Space Word Representations (2013, Mikolov)
- RNN을 이용한 LM

[word2vec]

Efficient Estimation of Word Representations in Vector Space (2013, Mikolov)
- word2vec 방법론 초기 논문
- 준수한 성능에 계산복잡도 감소
- CBOW, Skip-gram

-- hidden layer에서 non-linearity 제거
-- word간 projection layer 공유
- 대체적으로 semantic accuracy는 skip-gram이 낫고 syntactic accuracy는 cbow가 높은 것으로 보임
* 성능 수치 차이 및 전반적으로 봤을 때 skip-gram이 낫다고 보임 --> 이후 다른 논문들에서도 비슷한 양상 보임


Distributed Representations of Words and Phrases and their Compositionality (2013, Mikolov)
- word2vec 튜닝기법 추가된 버전
- 소스 공개
- 기존 skip-gram 공식에서의 softmax function 분모계산시간이 문제 --> 2가지 훈련방법 제시
1) Hierarchical Softmax
 - word를 노드로 하는 bianry tree 구성 후, word로 진행하는 경로 각 노드에 대해 0 또는 1 label 부여해서 최적화
 -  계산 시간 감소: |V| --> log|V|
 * 문제: 별 관계없는 단어들끼리 같은 경로 공유시 같은 파라미터로 훈련되는 게 논리적으로 이상해 보임. 차라리 트리 구성시에 명사/형용사/동사 등으로 간단하게라도 클러스터링해서 묶으면 좀 더 나을 듯
2) Negative Sampling
 - 현재 훈련하고자 하는 word와 그에 대한 context words가 있을 때, target word를 현재 context와 관계없는 임의의 word로 바꾸어 negative example들 k개 생성해서 훈련.
 - 작은 훈련셋에서는 k = 5-20, 큰 훈련셋에서는 k = 2-5 가 적절하다고 함
- 대체적으로 NS가 HS보다 성능 높음
- 빈도 수에 따라 subsampling 수행
-- 많은 빈도수 단어에 대해 subsampling (a, the, in 등등)
 * in 같은 단어는 중요할 수 있음
 * 미리 사람이 뽑은 stopword 제거하는 방식이 더 좋을 수 있음
- 논문에 언급 없지만, context window를 c라고 했을 때 word2vec 코드에서 실제로 2c개의 context를 이용하지 않음; 실제로는 context window를 1-c 사이에서 랜덤으로 정해 훈련함
 * 이렇게 하면 target word와 가까운 context word에 대한 훈련 빈도수가 상대적으로 커져서 word order를 고려해 주는 효과가 있음
 * 하지만 임의로 context word를 빼기 때문에 target word와 거리가 멀지만 중요할 수 있는 context에 대해 훈련이 부족할 수 있음
- Phrase를 고려한 실험 추가
-- Vietnam + capital = Hanoi, Ho Chi Minh City 등

* word2vec 관련 참고링크:
http://alexminnaar.com/word2vec-tutorial-part-i-the-skip-gram-model.html
source: https://code.google.com/p/word2vec/source/browse/trunk/word2vec.c?spec=svn42&r=42#482
http://www.slideshare.net/lewuathe/drawing-word2vec
http://www.slideshare.net/ssuser9cc1bd/piji-li-dltm
한글: http://www.slideshare.net/JungkyuLee1/from-a-neural-probalistic-language-model-to-word2vec

[dependency-based context]

Dependency-Based Word Embeddings (2014, Levy and Goldberg)
- dependency parser를 이용해 context를 확장
- 단순히 target word의 앞뒤 word가 아니라, 의존관계에 따라 앞뒤 context를 추출
- 기존 방법 이용시 context window가 2라면, telescope는 discovers의 context에서 제외되고, Australian은 포함됨

- 실험 비교는 word2vec에서 cbow에만 수행함 (skip-gram 빠짐)

- WordSim353, Chiarello dataset을 이용해 related one을 찾는 실험에서 우위
* related one을 찾는 task에서만 우위, similar one과 다를 수 있음, analogy task에서는 성능에서 매우 열세라고 함
* 의존 파서를 이용한 context 활용은 충분히 고려할 만 하지만, 정확한 예상 효과, 부작용 등 파악해야 함 (task에 따라 최적의 context가 달라질 수 있음)
* context 선정 방법, objective function, 성능 비교 실험 등에서 추가 작업 여지 있음

Looking for Hyponyms in Vector Space (2014 CoNLL, Rei and Briscoe)
- hyponym: 하의어
- dependency-based vector space를 이용한 하의어 찾기
- target task - hyponym generation: 주어진 하나의 단어에 대해 하의어 리스트 출력
- 실험:
- dependency-based vector space가 topical하고 단어간 functional similarity를 고려하는 task에 대해 우위를 보임

- 상하의어 특성을 고려한 weighted cosine 이용시 가장 좋은 성능
- word2vec + dependency-based (Combined)에서 압도적 성능
-- word2vec: useful information about topic, semantics
-- dependency-based: grammatical roles and directional containment
-- 양측 방법에서 score 구한 뒤 geometric average 이용

[other word embedding methods, evaluation]

GLoVe: Global Vectors for Word Representation (2014, Pennington)
- co-occurance 기반 방법론

- word2vec과의 비교 성능 평가

* 논문 전반적으로 GLoVe가 word2vec에 대해 확실한 성능 우세를 보인다고 주장
* 하지만 파라미터 세팅의 세밀함 등등 실험 평가에 대해서는 절대적으로 판단하기 어려움
(GLoVe vs word2vec 비교: http://rare-technologies.com/making-sense-of-word2vec/)
* word analogy task에 있어서 둘간 성능은 거의 동등 (67.1% vs 68.3%), 훈련 시 시간과 메모리 사용량에서 tradeoff 있음 (4h12m, 9414mb vs 8h38m, 628mb)
* 이 논문에서도 word2vec의 cbow보다 skip-gram 성능이 전반적으로 높음을 확인할 수 있음

Learning Word Representations with Hierarchical Sparse Coding (2015, Yogatama, ICML)
- hierarchical regularization을 이용한 새로운 word representation 방법론 제시
* 자세한 방법론은 이후 추가 정리

* 실험 결과를 전적으로 믿을 수는 없지만, 생각해 볼만한 부분이 많음 (특히 제시한 방법론 외에 cbow, skip-gram, GLoVe 간 성능 비교)
* skip-gram은 cbow에 비교해서 모든 성능이 높음
* GLoVe는 skip-gram과 비교해 (M=520, Syntactic analogies), (Word similarity)에서 열세, (Semantic analogies)에서 우세, 나머지에서는 비등한 성능
* 논문에서 제시한 방법론(FOREST)은 (Word similarity), (Sentence completion), (Sentiment analysis)에서 우세 성능을 주장

- 훈련 시간 관련

Improving Distributional Similarity with Lessons Learned from Word Embeddings (2015, TACL, Levy)
- 지금까지 제안된 다양한 word representation 방법론간의 심도 있는 비교 보고서
- 결론적으로, 방법론간의 명백한 우열은 존재하지 않으며 (심지어 구세대 방법론으로 여겨지는 count-based 방법론들조차도 최신 방법론들에 뒤쳐지지 않음), 오히려 각 방법론에서의 hyperparameter optimization이 성능에 있어서 가장 중요한 요소로 보인다는 내용
* 방법론 설계 및 훈련 세팅에 대해서 상당히 객관적이고 다양한 시도를 하였고 실제 실험 설계에 있어서도 많은 참고가 될 수 있는 논문

대표 방법론:
1. PPMI (Positive Pairwise Mutual Information)
- PMI를 이용한 Explicit Representation 방법론 (PMI 음수값은 0으로 치환해서 사용)
2. SVD (Singular Value Decomposition)
- 대표적인 dimension reduction 방법론
3. SGNS (Skip-Grams with Negative Sampling)
- word2vec 최적 세팅
- 본 논문 저자들은 기존 논문에서 SGNS가 shifted PMI, implicitly factorizing a word-context matrix임을 보인 적이 있음
4. GLoVe (Global Vectors)
- 위 논문 참고

- word2vec과 GLoVe에서는 성능을 높히기 위한 몇 가지 기법들을 사용하고 있는데, 이것들은 각자의 방법론에만 적용 가능한 것이 아니라 모두 적용이 가능하므로 이에 대해 실험 진행함

대표 hyperparamer setting:
1. pre-processing hyperparameters (affect the algorithms' input data)
 1.1 Dynamic Context Window (dyn)
 - from word2vec
 - 훈련시 각 iteration마다 context window를 1 ~ c 중 랜덤넘버로 설정
 - word order를 고려하는 효과
 1.2 Subsampling (sub)
 - from word2vec
 - 고빈도수 word에 대해 subsampling
 1.3 Deleting Rare Words (del)
 - from word2vec
 - 적용하는 것이 성능에 도움이 된다는 것을 확인

2. association metric hyperparameters (how word-context interactions are calculated)
 2.1 Shifed PMI (neg)
 - from word2vec
 - the # of negative examples
 2.2 Context Distribution Smoothing (cds)
 - from word2vec
 - context 반영시 smoothing 적용

3. post-processing hyperparameters (modify the resulting word vectors)
 3.1 Adding Context Vectors (w+c)
 - from GLoVe
 - word representation 이용시 target word vector에 context vector를 더해서 이용
 3.2 Eigenvalue Weighting (eig)
 - eigenvalue matrix tuning이 성능에 상당한 효과가 있다는 기존 보고에서 착안한 듯
 - SVD에서 eigenvalue matrix 연산을 제거해서 결과 계산
 - 이론적으로 명확히 증명되지는 않았지만, 이렇게 했을 때 semantic task에 대해 성능이 확연히 올라감을 확인
 3.3 Vector Normalization (nrm)
 - row 정규화, column 정규화, 둘 다 적용 비교시 기존과 같은 row 정규화가 가장 좋은 성능을 보임을 확인

- analogy test 수행시, 3CosAdd, 3CosMul 2가지 추정방법 이용: 결과적으로 3CosMul이 좋은 성능을 보임 (i.e. 3CosMul이 state-of-the-art in analogy recovery)

* 실험 부분 생략

- 기존 지식들 내지는 편견 재평가행
1. embedding이 기존의 count-based 방법론에 우세한가
- 단정적으로 말할 수 없다
* 하지만 전체적인 경향을 봤을 때 SGNS가 가장 안정적으로 보임

2. GLoVe vs SGNS
- SGNS가 우세

3. 3CosMul vs 3CosAdd
- 3CosMul 우세

* 다양한 parameter setting을 고려해서 SGNS를 쓰는 것이 성능 및 훈련 효율 면에서 가장 좋아 보임

- 결론: 방법론간 우열은 단순하게 판단할 문제가 아니며, parameter에 따라 상당히 뒤바뀔 수 있다

 

댓글 3개: