CS224N - 01.Introduction and Word Vectors
- CS224N의 1주차 강의, Introduction and Word Vectors를 보고 정리한 글입니다.
1. Human language and word meaning
2. Word2vec introduction
3. Word2vec objective function gradients
4. Optimization basics
Human language and word meaning
- ‘Word’의 의미(Meaning)는 어떻게 나타내어 지는가?
- Meaning이라는 것에 대한 일반론적인 정의
- Signifier(Symbol)이 있고, 그 Signified(Symbol)은 Idea를 내포한다.
= Denotational Semantics (표시적 의미론)
- ‘전통적인’ NLP에서는 단어를 Discrete symbol로 간주 (~2012년)
- 단어를 one-hot vector로 만들어서 해당하는 단어의 component에만 1을 대응시키는 식으로 진행함.
- 예
motel = [0 0 0 0 0 0 0 0 0 0 1 0 0 0 0]
hotel = [0 0 0 0 0 0 0 1 0 0 0 0 0 0 0] Vector Dimension: Vocabulary 내의 단어들의 개수
- 단점1: 그럼 단어가 예를 들어 500000만개면, 벡터 차원을 500000으로 설정한다고?
- 단점2: hotel과 motel 사이에는 의미론적인 유사성이 있는데, 위와 같이 표시해버리면 둘은 orthogonal 하기 때문에 similarity를 표시할 수 없게 됨
-> 이에 대해 ‘벡터 그 자체에 similarity를 encode할 수 있도록 학습해보자!’라는 사고를 하게 됨
- Distributional semantics: “단어의 Meaning이라는 것은 그 단어 근처에서 자주 나타나는 단어에 의해 결정되는 것이다.” ( context )
Word2vec introduction
Word Vectors (= Word Embeddings = Word Representations)
- Distributed representation!
- 이전처럼 이상한 localist representation 대신 distributed representation으로 나타내보면 어떨까?’ 라는 사고
- Sparse Vector가 아닌 Dense Vector!
- 이 Dense Vector는 유사한 context에서 나타나는 단어들의 벡터와 유사할 것
Word2vec
Word Vector를 학습하기 위한 프레임워크
Idea
- Large corpus of text! (NLP하는 사람들은 corpus를 large pile of text를 corpus라 부르더라 - 말뭉치)
- 고정된 vocabulary에서 모든 단어들은 벡터의 형태로 나타난다.
- 각 text의 position t를 지나며, center word c와 context words o를 지님
- c,o에 대해 word vector들 간의 유사성을 사용해서, c가 주어졌을 때 o의 (혹은 그 반대로) 확률을 계산
이 확률을 최대화 하기 위해서 word vector들을 계속 adjust해줘.
Word2vec objective function gradients
- Word2vec의 목적함수
- t=1, …, T까지의 각 position에서, 고정된 window size m 내에서 center word w_j가 주어졌을 때 context words를 예측
- 위 식을 아래와 같이 변형하면, 위 식을 maximize하는 문제는 아래의 식을 minimize하는 문제와 똑같은 문제가 됨
- 더불어 이와 같은 변형은, Product를 Summation의 문제로 바꾸기 때문에 연산의 관점에서 훨씬 효과적
- t=1, …, T까지의 각 position에서, 고정된 window size m 내에서 center word w_j가 주어졌을 때 context words를 예측
이제 Word2vec의 목적함수를 아래 식이라고 머리에 못 박고, 결국 목표는 아래 식을 최소화하는 것이라고 한다면
여기서는 또 어떻게 찾지?
- 해결책
- 단어(w) 하나 당 두 개의 벡터를 사용할 것
- v_w (w가 center word인 경우)
- u_w (w가 context word인 경우)
- 이때, center word c와 context word o에 대해 P(o|c)를 다음과 같이 정의할 수 있음.
- 단어(w) 하나 당 두 개의 벡터를 사용할 것
- P(o|c)에 대한 설명
- 분자의 사각형은 단어들 사이의 similarity를 직접적으로 계산해준다.
분모는 전체 vocabulary에 대한 값들의 합을 통해 normalize
exponential dist’n: +값이든 -값이든, exp를 통과할 때 모든 값들을 +로 만들어준다는 멋진 성질을 갖고 있음.
- 이 식은 softmax 함수의 한 예시
- 해결책
Optimization basics
- 이제 Loss function을 minimize하는 방향으로 parameter optimization!
- ‘모든’ vector gradient를계산해야.
Optimization 사고
- 결국 expected context word와 actual context word 사이의 diffrence에 대한 문제!
- 왜 두 벡터를 쓰나?
- Optimization이 더 쉽기 때문.
- Word2Vec의 두 가지 variants
- Skip-gram
- CBOW