본 내용은 '김기현의 자연어 처리 딥러닝 캠프(한빛미디어)'를 정리한 내용입니다.
"압축과 정보 추출을 용이하게 하는 "신경망을 통해 훨씬 더 정확하게 단어의 특징 벡터를 표현" 할 수 있다!"
* 학습 목표 : 신경망을 통해 특징 벡터를 표현하는 방법과 word2vec, GloVe 학습
1. 단어 임베딩과 차원 축소
1) 단어 임베딩 : 단어를 컴퓨터가 이해할 수 있는 형태(feature vector)로 변환하는 과정
- 앞서(5장) 코퍼스로부터 단어의 특징(출현 빈도 등)을 추출해 벡터로 만드는 과정을 봤지만,
여전히 고차원의 희소벡터라는 문제점이 있음
→ 차원 축소로 해결하자!
2) 차원 축소
방법 1. PCA(주성분분석)
- 대표적으로 PCA 방법을 통해 차원을 축소할 수 있음
- 데이터를 구성하는 핵심 축 방향으로 차원을 감소시키는 것
- 하지만, 주성분은 직선/평면으로 정보의 손실이 나타남
방법 2. 신경망(매니폴드 가설, 오토인코더)
- 매니폴드(다양체) 가설 : 높은 차원에 존재하는 데이터를 아우르는 낮은 차원의 다양체가 존재한다는 가설
- 적은 정보의 손실로 차원을 축소할 수 있음
→ 딥러닝도 매니폴드를 찾는 과정과 동일하고, 비선형적 방식으로 차원을 축소하기 때문에 효과적(정보의 손실 적음)
- 오토인코더 : 데이터에 대한 효율적인 압축을 신경망을 통해 자동으로 학습하는 모델
오토인코더의 인풋으로 TF-IDF 등을 활용해 계산한 희소 단어 특징 벡터를 넣고,
같은 출력값을 갖도록 훈련하여 오토인코더 병목 계층(z) 결괏값을 덴스 단어 임베딩 벡터로 사용
2. word2vec
1) 언제 사용할까?
- 준비된 코퍼스의 양이 너무 적고, 외부로부터 많은 양의 말뭉치를 통해 미리 훈련한 단어 임베딩 벡터를 구하는 경우
- 임베딩 계층을 사용해 word2vec을 사용하지 않아도 문제의 특징에 맞는 단어 임베딩 벡터를 구할 수 있음
→ 텍스트 분류, 언어 모델, 번역 등 문제의 특징을 고려해 단어 임베딩 벡터를 사용!
* 임베딩 계층 : 임베딩 계층의 가중치와 원핫인코딩 벡터를 곱해 임베딩 벡터 추출. 실제로는 곱하지 않고 검색해 사용
2) word2vec
- 가정 : 함께 등장하는 단어가 비슷할수록 비슷한 벡터 값을 가진다
- 특정 단어를 기준으로 주변 단어들을 사용해 단어 임베딩 학습
- 사전 확률이 낮은(출현 빈도가 적은) 단어의 학습 기회가 적다는 단점
2-1) CBOW
- 입력 : 주변 단어들의 원핫인코딩 벡터 / 출력 : 대상 단어
- 가중치(W_in, W_out)가 단어 분산 표현
ㅇ W_in, W_out 모두 단어 분산 표현이 될 수 있지만, 주로 입력층의 가중치를 이용하는 경우가 많음(특히 skip-gram)
ㅇ GloVe에서는 두 가중치를 더했을 때 좋은 결과
2-2) skip-gram
- 입력 : 대상 단어의 원핫인코딩 벡터 / 출력 : 주변 단어
- 단어 분산 표현의 정밀도 면에서 skip-gram이 CBOW보다 좋은 경우 많음
특히 말뭉치가 커질수록 저빈도 단어나 유추 문제 성능면에서 skip-gram이 더 뛰어난 경향
하지만, 학습 속도 면에서는 CBOW 모델이 더 빠름
3) 예제
- 단어 임베딩 벡터 훈련 기능 제공 공개 라이브러리
ㅇ Gensim : 공개 연혁이 오래되어 학습 속도 느림
ㅇ Fasttext : 빠른 속도
3. GloVe
- 추론 기반 기법과 통계 기반 기법을 융합한 모델
- 말뭉치 전체의 통계 정보를 손실 함수에 도입해 학습
- 대상 단어가 코퍼스에 함께 나타난 단어별 출현 빈도를 예측하게 함
ㅇ 분류 문제가 아닌 출현 빈도를 근사하는 회귀 문제가 되어 평균오차제곱(MSE) 사용
ㅇ 출력 벡터가 Cx(단어 x와 함께 코퍼스에 출현했던 모든 단어의 동시 출현 빈도를 나타낸 벡터)를 근사하도록 해 둘의 차잇값인 손실을 최소화하도록 역전파 및 경사하강법을 통해 학습
- 코퍼스 전체에서 대상 단어와 주변 단어를 가져와 학습하는 과정을 반복하는 skip-gram과 달리, 처음 코퍼스를 통해 단어별 동시 출현 빈도를 조사해 출현 빈도 행렬을 만들고, 이후에는 해당 행렬을 통해 동시 출현 빈도를 근사하기 때문에 학습 속도가 훨씬 빠름
* 통계 기반 기법 : 주변 단어의 빈도를 기초로 단어 표현. 말뭉치 전체 통계로 1회 학습해 분산 표현을 얻음
* 추론 기반 기법 : 말뭉치 일부를 여러 번 보며 학습(미니배치 학습). 통계 기반 기법이 주로 단어의 유사성을 인코딩하는 것에서 나아가 한층 복잡한 단어 사이의 패턴까지도 인코딩 할 수 있음(king-man+woman=queen 가능)
4. 정리
- 신경망은 비선형적인 차원 축소를 통해 단어의 특징을 효율적으로 추출할 수 있음
- 하지만, 딥러닝 비선형 축소는 계산비용이 비싸고 최적화가 어려움. word2vec은 비선형적인 방법 없이도 매우 좋은 단어 임베딩을 구현했고, GloVe는 더 빠르고 정화한 단어 임베딩 방법을 제시함
- 단, 텍스트 분류/자연어 생성 등 기법에서는 단어 임베딩 알고리즘보다 단순 임베딩 계층을 사용하는 편이 더 정확, 효율적. 해결하고자 하는 문제의 특성에 맞는 단어 임베딩 방법을 사용할 것!
'데이터 > NLP' 카테고리의 다른 글
14. NMT 시스템 구축[김기현의 자연어 처리 딥러닝 캠프] (0) | 2020.09.06 |
---|---|
11. 신경망 기계번역 심화 주제[김기현의 자연어 처리 딥러닝 캠프] (0) | 2020.07.24 |
9. 언어 모델링[김기현의 자연어 처리 딥러닝 캠프] (0) | 2020.06.28 |