단어 임베딩¶
- 같은 데이터를 표현할 때 가능한 낮은 차원으로 표현할수록 쉽게 모델링하고 학습할 수 있으므로, 희소벡터보다는 Dense한 벡터로 표현하는게 좋음
1. 차원 축소¶
- 더 작은 차원으로 효율적으로 정보를 표현하는 차원 축소의 이유와 방법에 대해 알아보기
PCA(주성분 분석)¶
pass
매니폴드 가설¶
- 높은 차원에 존재하는 데이터들의 경우, 실제로는 해당 데이터들을 아우르는 낮은 차원의 다양체 역시 존재한다는 가설
- 저차원의 각 공간의 차원 축은 고차원에서 비선형적으로 표현될 것이며, 데이터의 특징을 각각 표현함
딥러닝이 잘 동작한 이유¶
- 대부분의 딥러닝이 문제를 풀기 위해 차원 축소를 수행하는 과정은, 데이터가 존재하는 고차원상에서 매니폴드를 찾는 과정
- PCA 등과 달리 선형적인 방식에 비해 딥러닝은 비선형적인 방식으로 차원 축소를 수행하며, 그 과정에서 문제를 잘 해결하기 위한 매니폴드를 자연스럽게 찾아내므로 딥러닝이 성공적으로 동작하는 이유일 것으로 예상함
오토인코더¶
- 인코더에서 고차원의 샘플 벡터를 입력으로 받아 매니폴드를 찾고, 저차원으로 축소하는 인코더를 거쳐 병목 구간에서의 숨겨진 벡터로 표현
- 디코더는 저차원의 벡터를 받아, 다시 원래 입력 샘플이 존재하던 고차원으로 데이터를 복원하는 작업을 수행. 복원된 데이터는 고차원 상의 매니폴드 위에 위치하게 될 것
- 고차원의 벡터를 저차원으로 압축한 후 다시 복원하는 과정에서, 오토인코더는 병목의 차원이 매우 낮기 때문에 복원에 필요한 정보만 남기고 필요 없는 정보는 버려야 함
- 따라서 이 구조의 모델을 훈련할 때는 복원된 데이터와 실제 입력 데이터 사이의 차이를 최소화 할 수 있도록 손실함수를 구성함
- 하지만 고차원에서 저차원으로 데이터를 표현하면 손실이 따를 수 있으므로, 훈련이 완료된 모델일지라도 복원된 데이터는 실제 입력과 차이가 있을 수 있음
- 오토인코더를 사용하여 이전 장에서 TF-IDF 등을 활용해 계산된 희소 단어 특징 벡터를 입력으로 넣고 같은 출력값을 갖도록 훈련했을 때, 오토인코더의 병목 계층 결괏값을 Dense Word Embedding 벡터로 사용할 수 있을 것
2. 흔한 오해1¶
- skip-gram 또는 GloVe를 사용하여 원핫 인코딩의 Sparse 벡터를 저차원의 Dense 벡터로 표현하는 방법을 다룸
- 여기서 많이 헷갈리는 부분이, 이렇게 훈련된 단어 임베딩 벡터를 추후 다룰 텍스트 분류, 언어 모델, 번역 등의 딥러닝 모델 입력으로 사용하리라 생각한다는 점
- 이 임베딩 벡터를 사전 훈련된 임베딩 벡터라고 부름.
- word2vec를 통해 얻은 단어 임베딩 벡터가 훌륭하게 단어의 특징을 잘 반영하고 있긴 하지만, 텍스트 분류나 언어 모델, 번역의 문제를 해결하는 최적의 벡터 임베딩이라고 볼 수 없음
- 다시 말하면, 텍스트 분류 또는 기계 번역을 위한 목적함수는 분명히 word2vec와는 다른 형태로 존재함
- 따라서, 다른 목적함수를 통해 훈련된 임베딩 벡터는 원래의 목적에 맞지 않을 가능성이 높음
- 예를 들어, 긍정/부정 감성 분류를 위한 텍스트 분류 문제의 경우 '행복'이라는 단어가 매우 중요한 특징이 될 테지만, 기계 번역 문제에서는 '행복'이라는 단어는 일반적인 단어에 지나지 않음. 이 둘의 임베딩 벡터 값은 문제에 따라 크게 달라짐. 따라서 문제 특징을 고려하지 않은 단어 임베딩 벡터는 좋은 방법이 아님
word2vec 없이 신경망 훈련하기¶
- word2vec을 사용하여 단어를 저차원의 임베딩 벡터로 변환하지 않아도, 문제에 특징에 맞는 단어 임베딩 벡터를 구성할 수 있음
- 파이토치를 비롯한 딥러닝 프레임워크는 임베딩 계층(Embedding Layer)라는 레이어 아키텍처를 제공함
- 이 계층은 bias가 없는 선형 계층과 같은 형태를 지님
- W는 d X |V| 크기의 2차원 행렬. 따라서 입력으로 원핫벡터가 주어지면, W의 특정 행만 반환함
- 따라서 최종적으로 모델로부터 구한 손실값에 따라 역전파 및 경사하강법을 시행하면, 자동적으로 임베딩 계층의 가중치인 W의 값을 구할 수 있음
- 실제 구현에서는 이렇게 큰 임베딩 계층 가중치와 원핫 인코딩 벡터를 곱하는 것은 비효율적이므로, 단순히 테이블에서 검색하는 작업을 수행함.
- 따라서 단어를 나타낼 때 (임베딩 계층의 입력으로) 원핫 벡터를 굳이 넘겨줄 필요 없이, 1이 존재하는 단어의 인덱스 정숫값만 입력으로 넘겨주면 임베딩 벡터를 얻을 수 있음.
- 또한 임베딩 게층과의 계산상의 효율성과는 별개로, 원핫인코딩 벡터를 표현할 때 1이 존재하는 단어의 인덱스 정숫값만 있으면 된다는 것이 자명함.
- 애초에 원핫 인코딩은 n개의 카테고리를 나타내기 위한 방법이기 때문임
- n차원의 원핫인코딩 벡터에서 1은 한 개이며, n-1개의 0으로 채워짐
- 추후 다룰 것에서 살펴보면, word2vec을 사용하여 단어를 임베딩 벡터로 변환한 후 신경망에 직접 넣는 대신, 앞서 언급한 것처럼 임베딩 계층을 사용하여 원핫인코딩 벡터를 입력으로 넣도록 구현했음을 알 수 있음
그래도 word2vec 적용하는 경우¶
- 준비된 코퍼스 양이 너무 적고, 외부로부터 많은 양의 말뭉치를 통해 미리 훈련한 단어 임베딩 벡터를 구한다는 특수한 경우
- 기본 정석대로 베이스라인 모델을 만든 후, 성능을 끌어 올리기 위한 여러가지 방법들을 시도 할 때 훈련된 단어 임베딩 벡터의 사용을 고려할 수도 있음
- 또는 전이학습에서 살펴볼 고도화된 언어 모델을 통해 사전 훈련하여 접근할 수 도 있음
3. word2vec¶
- word2vec은 단어를 임베딩하는 두 가지 방법으로 CBOW와 skip-gram을 제시함
- 두 방법 모두 함께 등장하는 단어가 비슷할수록 비슷한 벡터 값을 가질 것이라는 공통된 가정을 전제로 함
- 두 방법 모두 윈도우의 크기가 주어지면, 특정 단어를 기준으로 윈도우 내의 주변 단어들을 사용하여 단어 임베딩을 학습함.
- 다만, 윈도우 내에서의 위치는 고려하지 않음. 그렇다고 단어의 위치 정보를 무시하지는 않음. 윈도우 자체가 위치 정보를 내포하기 때문임
알고리즘 개요: CBOW 방식과 skip-gram 방식¶
- CBOW: 주변에 나타나는 단어들을 원핫 인코딩된 벡터로 입력받아 해당 단어를 예측하게 함
- skip-gram: 대상 단어를 원핫 인코딩된 벡터로 입력받아 주변에 나타나는 단어를 예측하는 네트워크를 구성해 단어 임베딩 벡터를 학습함.
- sip-gram이 CBOW보다 성능이 뛰어난 것으로 알려져 있으며 널리 쓰임
상세 훈련 방식¶
- MLE를 통해 argmax 내의 수식을 최대로 하는 파라미터를 찾음
- 네트워크 내부에 시그모이드와 같은 비선형 함수가 존재하지 않음
4. GloVE¶
알고리즘¶
- skip-gram이 대상 단어를 통해 주변 단어를 예측하도록 네트워크를 구성하여 단어 임베딩 벡터를 학습했다면, GloVe는 대상 단어에 대해서 코퍼스에 함께 나타난 단어별 출현 빈도를 예측하도록 함
- skip-gram을 위한 네트워크와 거의 유사함. 다만, 분류문제가 아닌 출현 빈도를 근사하는 회귀 문제가 되었으므로 MSE를 사용함
- 마찬가지로 원핫 인코딩 벡터 x를 입력으로 받아 한 개의 은닉층 W를 거쳐 출력층 W를 통해 출력베터를 반환함.
- 이 출력 벡터는 단어 x와 함께 코퍼스에 출현했던 모든 단어의 각 동시 출현 빈도들을 나타낸 벡터인 $C_x$를 근사함. 따라서 이 둘의 차잇값인 손실을 최소화하도록 역전파 및 경사하강법을 통해 학습할 수 있음
- 이때 단어 x 자체의 출현 빈도 또는 사전확률에 따라 MSE 손실함수의 값이 매우 달라질 것. C_x값 자체가 클수록 손실값은 커지기 때문
- 따라서, f(x)는 단어의 빈도에 따라 손실함수에 가중치를 부여함
- GloVe의 논문에서는 실험에 의해 thesis=100, a = 3/4일 때 가장 좋은 결과가 나온다고 언급함
장점¶
- 코퍼스 내에서 주변 단어를 예측하는 skip-gram과 달리, GloVe는 처음에 코퍼스를 통해 단어별 동시 출현 빈도를 조사하여 그에 대한 출현 빈도 행렬을 만들고, 이후엔 해당 행렬을 통해 동시 출현 빈도를 근사함
- 따라서 코퍼스 전체를 훑으며 대상 단어와 주변 단어를 가져와 학습하는 과정을 반복하는 skip-gram과 달리 학습이 훨씬 빠름
- 또한, 출현 빈도가 적은 단어들에 대해서도 어느정도 보완하여 학습함
In [ ]:
'자연어, 비전' 카테고리의 다른 글
카카오톡 대화 내용으로 개인별 워드클라우드(wordcloud) 그리기 (1) | 2022.06.22 |
---|---|
transformer 구현 및 설명 (0) | 2021.06.03 |
시퀀스 모델링 (0) | 2020.11.10 |
단어 유사도 정리 (0) | 2020.11.09 |
자연어 처리를 위한 전처리 과정 정리 (0) | 2020.11.06 |