728x90
Stanford 에서 진행하는 CS224N : NLP with Deep Learning 을 듣고 정리한 내용입니다.
- 과거에는 Human language 를 통해 지식을 전달했다.
- 상대적을 slow network를 형성한다. (bandwidth 가 작다.)
- 그러므로 내용을 축약해서 전달한다. : 대화하는 사람이 어느정도의 배경 지식을 보유하고 있다고 가정하고 대화를 한다. 그러므로 짧은 단어만 이용해서 더 많이 이해할 수 있다.
- 상대적을 slow network를 형성한다. (bandwidth 가 작다.)
- 우리가 이번 과정을 통해서 하고 싶은 것 : represent the meaning of words
- common solution : WordNet
- 단어의 synonym 과 hypernyms 를 사용해서 dictionary 를 구성한다.
- human labor를 통해서 구성된 hand-built resources이다.
- 단어에 대한 어느정도의 의미를 제공할 수 있다.
- 문제점
- 다양한 nuance를 놓친다.
- 새로운 단어, slang 등에 취약하다. 해당 단어들에 대한 정보를 제공하지 못할 수 있다.
- 단어들 사이의 similarity, relation을 제공할 수 없다.
- 예를들어, good 와 marvelous, 두 단어는 서로 synset에 포함되어 있지 않지만, 어느 정도 서로의 의미를 포함하고 있다. WordNet을 사용하면 이러한 단어들 사이의 관계를 나타내기 힘들다.
One-hot vector
- 과거(2012년 이전) NLP 에서 사용하던 word representation 방식
- 각 단어에 대해 지정된 자리가 있다.
- 해당 단어를 나타내기 위해서는 해당 단어의 지정된 자리만 1로 나타내고 나머지는 모두 0으로 나타낸다.
- 문제점
- 단어가 많아지면 벡터의 크기가 매우 커진다. 단어가 100만개 있다면, 벡터의 크기 또한 100만이 된다.
- WordNet과 유사하게 단어들 사이의 관계를 나타내지 못한다.
- 예를들어, motel을 검색하는 경우, hotel 이라는 연관된 단어를 제공하고 싶은데, one-hot 방식으로는 두 단어 사이의 관계를 인지할 수 없다.
- 위 문제점들의 해결 방안으로 big table of word similarity를 사용할 수 있지만, $ N $ 개의 단어를 사용하는 경우, $ N^2 $ 크기의 테이블을 유지해야 하기 때문에 매우 비효율적이다.
Word vectors
- word embedding 또는 word representation 이라고도 부른다.
- 단어가 나타나는 context를 보고 해당 단어의 뜻을 예측한다.
- one-hot 방식과는 달리, distributed representation을 사용한다.
- 단어의 의미를 dense-vector로 표현한다. (모든 숫자가 0이 아닌 숫자로 구성된다.)
- one-hot vector의 경우, 해당 단어를 나타내는 자리 하나만 1이고, 나머지는 모두 0으로 나타낸다.
- 단어의 의미가 distributed over the dimensions
- 단어의 의미를 dense-vector로 표현한다. (모든 숫자가 0이 아닌 숫자로 구성된다.)
- 모든 단어를 위치시킬 수 있는 vector space에 대해 생각해보자.
- N 차원의 word vector를 우리가 보기 쉽게 시각화하기에는 한계가 있다.
- 그러므로, 2차원 공간에 해단 벡터들을 투영해서 시각화한다.
- 이러한 과정에서 일부 특징들이 사라졌을 수 있다.
- 하지만, 단어들을 2차원 공간에 시각화하는 방식으로, 단어들 사이의 유사도를 시각적으로 볼 수 있다.
Word2Vec algorithm
- simple, scalable way of learning vector representations
- corpus(big pile of text)를 기반으로 생성한다.
- 초반에는 모두 random vector 로 초기화한다.
- 문장의 가장 첫 단어에서부터, 단어를 제공하면 단어 주변의 단어들을 예측하는 과정을 반복한다. (skip-gram 방식)
- 이러한 과정을 계속해서 반복하다 보면, 해당 단어의 representation 을 생성해낼 수 있다.
- 가운데 단어가 주어졌을 때, 인접한 단어가 나타날 확률을 계산한다.
$$ L(\Theta ) = \prod_{t=1}^{T} \prod_{-m\leq j \leq m}p(w_{t+j|w_t;\theta})) $$
- $ P(w_t|w_{t+j}) $ : 가운데 단어 $ w_t $ 가 주어진 경우, 주변 단어 $ w_{t+j} $ 가 주어질 확률
- $ m $ : window size
- 전체 계산은 $ \Theta $ 에 의존적이다.
- $ \Theta $ 는 vector representation for words = parameter
- Objective function(손실 함수)는 다음과 같이 정의한다.
$$ J(\theta) = -\frac{1}{T} log{J(\Theta)} $$
- 손식함수 $ J $ 가 작아지면, 다른 단어를 예측하는 성능이 좋아진다.
- 학습 과정에서 한 단어에 2개의 vector 를 사용한다.
- center word 일 때의 vector = $ v_w $
- context word 일 때의 vector = $ u_w $
- 최종적으로 두 벡터의 평균을 해당 단어의 word vector로 사용한다.
- 위의 손실함수에서 $ P(o|c) $ 를 계산하는 방법은 위와 같다.
- categorical 문제에서 자주 사용하는 softmax distribution 을 사용한다.
- $ exp() $ 내의 값이 크다면 결과값이 매우 커질 수 있도록(max) 한다.
- 분자의 두 벡터 $ u^T_o, v_c $ 의 dot product는 두 벡터가 유사한(가깝게 위치하는) 경우 더 크게 나타난다.
- similarity measure
- $ exp() $ 는 최종적으로 probability 를 구해야 하기 때문에, 무조건 양수로 나올 수 있도록 한다.
- 분모는 전체 vocab에 대해서 합을 구한다.
- 그러므로, 최종적으로 모든 단어의 확률의 합은 1이 될 수 있도록 한다.
- categorical 문제에서 자주 사용하는 softmax distribution 을 사용한다.
- Optimization : 어떻게 해야지 $ J(\theta) $ 의 값을 최소화할 수 있을까
- parameter 값 ( $ \theta $ )을 변경해서, 기울기 반대 방향으로 이동하도록 한다.
- 기울기 반대 방향으로 이동하면 결국 최소점으로 이동할 수 있다.
- parameter 값 ( $ \theta $ )을 변경해서, 기울기 반대 방향으로 이동하도록 한다.
728x90
'대학원 이야기 > CS224N : NLP with Deep Learning' 카테고리의 다른 글
[CS224N] Lecture 7 - Vanishing Gradients, Fancy RNNs (1) | 2020.08.23 |
---|---|
[CS224N] Lecture 6 - Language Models and RNNs (0) | 2020.08.23 |
[CS224N] Lecture 5 - Dependency Parsing (0) | 2020.08.14 |
[CS224N] Lecture 3 - Neural Networks (0) | 2020.08.12 |
[CS224N] Lecture 2 - Word Vectors and Word Senses (0) | 2020.08.11 |
댓글