본 내용은 '김기현의 자연어 처리 딥러닝 캠프(한빛미디어)'를 정리한 내용입니다.

 

"압축과 정보 추출을 용이하게 하는 "신경망을 통해 훨씬 더 정확하게 단어의 특징 벡터를 표현" 할 수 있다!"

 

* 학습 목표 : 신경망을 통해 특징 벡터를 표현하는 방법과 word2vec, GloVe 학습

 


1. 단어 임베딩과 차원 축소

1) 단어 임베딩 : 단어를 컴퓨터가 이해할 수 있는 형태(feature vector)로 변환하는 과정

- 앞서(5장) 코퍼스로부터 단어의 특징(출현 빈도 등)을 추출해 벡터로 만드는 과정을 봤지만,

  여전히 고차원의 희소벡터라는 문제점이 있음

  → 차원 축소로 해결하자!

 

2) 차원 축소

방법 1. PCA(주성분분석)

- 대표적으로 PCA 방법을 통해 차원을 축소할 수 있음

- 데이터를 구성하는 핵심 축 방향으로 차원을 감소시키는 것

- 하지만, 주성분은 직선/평면으로 정보의 손실이 나타남

 

방법 2. 신경망(매니폴드 가설, 오토인코더)

- 매니폴드(다양체) 가설 : 높은 차원에 존재하는 데이터를 아우르는 낮은 차원의 다양체가 존재한다는 가설

- 적은 정보의 손실로 차원을 축소할 수 있음

  → 딥러닝도 매니폴드를 찾는 과정과 동일하고, 비선형적 방식으로 차원을 축소하기 때문에 효과적(정보의 손실 적음)

http://kh-kim.gitbook.io/natural-language-processing-with-pytorch/00-cover-5/02-dimension-reduction

 

- 오토인코더 : 데이터에 대한 효율적인 압축을 신경망을 통해 자동으로 학습하는 모델

  오토인코더의 인풋으로 TF-IDF 등을 활용해 계산한 희소 단어 특징 벡터를 넣고,

  같은 출력값을 갖도록 훈련하여 오토인코더 병목 계층(z) 결괏값을 덴스 단어 임베딩 벡터로 사용

http://kh-kim.gitbook.io/natural-language-processing-with-pytorch/00-cover-5/02-dimension-reduction

2. word2vec

1) 언제 사용할까?

- 준비된 코퍼스의 양이 너무 적고, 외부로부터 많은 양의 말뭉치를 통해 미리 훈련한 단어 임베딩 벡터를 구하는 경우

- 임베딩 계층을 사용해 word2vec을 사용하지 않아도 문제의 특징에 맞는 단어 임베딩 벡터를 구할 수 있음

   → 텍스트 분류, 언어 모델, 번역 등 문제의 특징을 고려해 단어 임베딩 벡터를 사용!

* 임베딩 계층 : 임베딩 계층의 가중치와 원핫인코딩 벡터를 곱해 임베딩 벡터 추출. 실제로는 곱하지 않고 검색해 사용

http://kh-kim.gitbook.io/natural-language-processing-with-pytorch/00-cover-5/03-myth

 

2) word2vec

- 가정 : 함께 등장하는 단어가 비슷할수록 비슷한 벡터 값을 가진다

- 특정 단어를 기준으로 주변 단어들을 사용해 단어 임베딩 학습

- 사전 확률이 낮은(출현 빈도가 적은) 단어의 학습 기회가 적다는 단점 

 

2-1) CBOW

- 입력 : 주변 단어들의 원핫인코딩 벡터 / 출력 : 대상 단어

- 가중치(W_in, W_out)가 단어 분산 표현

  ㅇ W_in, W_out 모두 단어 분산 표현이 될 수 있지만, 주로 입력층의 가중치를 이용하는 경우가 많음(특히 skip-gram)

  ㅇ GloVe에서는 두 가중치를 더했을 때 좋은 결과

 

출처 : 밑바닥부터 배우는 딥러닝 2

2-2) skip-gram

- 입력 : 대상 단어의 원핫인코딩 벡터 / 출력 : 주변 단어

- 단어 분산 표현의 정밀도 면에서 skip-gram이 CBOW보다 좋은 경우 많음

  특히 말뭉치가 커질수록 저빈도 단어나 유추 문제 성능면에서 skip-gram이 더 뛰어난 경향

  하지만, 학습 속도 면에서는 CBOW 모델이 더 빠름

출처 : 밑바닥부터 배우는 딥러닝 2

 

 

 

3) 예제

- 단어 임베딩 벡터 훈련 기능 제공 공개 라이브러리

  ㅇ Gensim : 공개 연혁이 오래되어 학습 속도 느림

  ㅇ Fasttext : 빠른 속도

 

3. GloVe

- 추론 기반 기법과 통계 기반 기법을 융합한 모델

- 말뭉치 전체의 통계 정보를 손실 함수에 도입해 학습

- 대상 단어가 코퍼스에 함께 나타난 단어별 출현 빈도를 예측하게 함

  ㅇ 분류 문제가 아닌 출현 빈도를 근사하는 회귀 문제가 되어 평균오차제곱(MSE) 사용

  ㅇ 출력 벡터가 Cx(단어 x와 함께 코퍼스에 출현했던 모든 단어의 동시 출현 빈도를 나타낸 벡터)를 근사하도록 해            둘의 차잇값인 손실을 최소화하도록 역전파 및 경사하강법을 통해 학습

 

- 코퍼스 전체에서 대상 단어와 주변 단어를 가져와 학습하는 과정을 반복하는 skip-gram과 달리, 처음 코퍼스를 통해 단어별 동시 출현 빈도를 조사해 출현 빈도 행렬을 만들고, 이후에는 해당 행렬을 통해 동시 출현 빈도를 근사하기 때문에 학습 속도가 훨씬 빠름

 

* 통계 기반 기법 : 주변 단어의 빈도를 기초로 단어 표현. 말뭉치 전체 통계로 1회 학습해 분산 표현을 얻음

* 추론 기반 기법 : 말뭉치 일부를 여러 번 보며 학습(미니배치 학습). 통계 기반 기법이 주로 단어의 유사성을 인코딩하는 것에서 나아가 한층 복잡한 단어 사이의 패턴까지도 인코딩 할 수 있음(king-man+woman=queen 가능)

 

 

4. 정리

- 신경망은 비선형적인 차원 축소를 통해 단어의 특징을 효율적으로 추출할 수 있음

- 하지만, 딥러닝 비선형 축소는 계산비용이 비싸고 최적화가 어려움. word2vec은 비선형적인 방법 없이도 매우 좋은        단어 임베딩을 구현했고, GloVe는 더 빠르고 정화한 단어 임베딩 방법을 제시함

- 단, 텍스트 분류/자연어 생성 등 기법에서는 단어 임베딩 알고리즘보다 단순 임베딩 계층을 사용하는 편이 더 정확,        효율적. 해결하고자 하는 문제의 특성에 맞는 단어 임베딩 방법을 사용할 것!

 

+ Recent posts