728x90
Learning word embeddings : Word2vec & GloVe |
1. Learning word embeddings |
2. Word2vec |
3. Negative Sampling |
4. GloVe word vectors |
1. Learning word embeddings
초기에 알고리즘들은 매우 복잡한 경향이 있었으나, 단순화된 구조의 알고리즘도 좋은 결과를 낸다는 연구결과들이 나왔다.
본 강의는 복잡한 알고리즘을 소개하고 이를 단순화하면서도 좋은 결과를 내는 알고리즘들에 대해 알려줄 것이다.
- Language model을 만든다고 할 때, 배운 바와 같이 위와 같은 구조가 될 것이며 각각의 단어는 300차원 짜리 word vector로 바뀐다.
- 그리고 이것을 신경망에 넣고 softmax를 돌려 다음 단어가 무엇일지 예측할 수 있다.
- 참고로 신경망에 넣기 전 input vector의 크기는 위의 그림에서 1800차원이 되며 사용자의 판단에 따라 직전 4개의 단어만 본다고 할 경우 1200차원으로 정할 수 있다.
- 또한 matrix E는 모든 단어에 적용되는 공통적인 parameter 행렬로서 학습된다.
- 앞서 어떤 단어들을 고려할지에 따라 context를 정할 수 있다고 언급했는데, 위와 같이 context를 정하는 여러 방법이 있다.
- 직전 4개 단어를 선택하는 것은 language model을 만들 때 좋은 성능을 보여주나, 단지 word embedding을 학습하고자 하는 목적이라면 여기있는 모두가 좋은 성능을 발휘한다.
- Language model은 정의자체가 '다음' 단어를 예측하기 위한 모델이기 때문이다.
- 생각해보면 당연하다. 꼭 몇개의 단어를 고려할 필요는 없지.
2. Word2vec
- word2vec은 word embedding을 학습하는 알고리즘의 하나로 가장 자주 쓰이는 알고리즘이다.
- word2vec에도 2가지 방식이 있는데, 강의에서 소개한 skip-gram 모델과 CBOW 모델이다.
- 전자는 하나의 단어로 주변(사용자가 정하는 범위 : window) 의 단어를 예측하는 것이고, 후자는 주변 단어들을 바탕으로 단어를 예측하는 방식이다.
- 강의만 보고는 잘 이해가 안되서 아래에 걸어놓은 링크들을 참조하면 너무너무 좋을 것. word2vec에 대한 전반적인 것을 알려준다.
1) Skip-grams 모델
- context word를 orange라고 하고 window size = 5 라고 하면 orange를 기준으로 앞뒤 5개의 단어들이 target이 될 수 있다. 저 각각이 training set으로서 기능하는 것.
- randomly initialization한 행렬 E와 theta를 바탕으로 word embedding 벡터를 구하고 softmax를 적용하여 y_hat 을 도출한다.
- 그리고 cross-entropy 손실함수를 이용하여 E와 theta를 경사하강법을 적용하여 update하면 된다.
2) Softmax 의 문제점
- 좀 전까지 설명한 방식은 잘 작동하지만 softmax 의 특성상, 그리고 word2vec 알고리즘의 특성상 vocab의 수만큼 연산이 엄청나게 늘어난다.
- 이를 보완하기 위해 Hierarchical Softmax라는 테크닉을 활용한다.
- 제대로 이해되는 것 같지는 않지만, 결론은 cross-entropy는 y=1인 경우만 연산한다는 점과 tree의 구조적 특징을 이용하여 연산량을 대폭 줄인 방식이라는 것.
- 그리고 이 tree를 생성할 때 자주 쓰이는 단어를 윗계층에 배치하고 자주 쓰이지 않는 단어를 깊이 묻어둔다. 자주 쓰는걸 빨리 찾으면 좋으니 당연한 것.
Word2vec가 처음에 잘 이해가 안돼서 찾은 좋은 글이다.
dreamgonfly.github.io/blog/word2vec-explained/
word2vec에 관한 전반적인 용어 및 이론들을 체계적으로 정리한 곳.
shuuki4.wordpress.com/2016/01/27/word2vec-%EA%B4%80%EB%A0%A8-%EC%9D%B4%EB%A1%A0-%EC%A0%95%EB%A6%AC/
word2vec에 대한 직관을 키우기 좋은 시각화 사이트이다.
# Cross - entropy
Cross-entropy에 대한 심오한 고민에 빠진 와중 좋은 글을 읽었다.
theeluwin.postype.com/post/6080524
이건 좀 더 간략하게 설명한 것.
melonicedlatte.com/machinelearning/2019/12/20/204900.html
- 요약하자면, 두 변수의 분포(실제값 분포, 예측값 분포)가 얼마나 유사하느냐를 측정할 때 크로스엔트로피를 사용하는 것.
- RMSE, Logistic Loss 등 여러 방법이 있지만 크로스엔트로피를 사용하면 두 확률변수의 분포(실제값, 예측값)가 같을 을 확률의 하한선을 알 수 있고 이를 손실함수로 활용하는 것.
- 다른 손실함수에 비해 softmax의 특성을 더 잘 반영한다고 이해하면 될 것 같다.
3. Negative Sampling
- Hierarchical softmax의 대체제로서 Negatice Sampling이 활용될 수 있다.
- 헷갈릴까봐 말하지만 위 두 방식은 기본적으로 word2vec 를 조금 수정한 것들임.
- Negative Sampling에서는 이름그대로 negatice sample을 이용하여 새로운 training set을 정의한다. 내용은 다음과 같다.
- 앞서 살펴보았듯이 우리는 skip-grams방식을 취하므로 context word를 하나 정하고 window 상에서 하나의 단어를 선택해 positive example을 만든다.
- 마찬가지로 같은 context word를 정하고 vocab에서 랜덤하게 단어를 하나 골라 negative example을 만든다.
- 참고로 랜덤하게 고른 단어가 설령 window 안에 포함되는 positive의 예라고 하더라도 그냥 진행한다.
- 아마 vocab의 수가 엄청시레 많으면 성능에 큰 영향이 없어석 그런듯.
- 이렇게 만든 5개의 훈련셋으로 Multivariate Logistic Classification 문제를 만들고 parameter 행렬을 업데이트함.
- 이 방식의 장점은 적은 연산량에 있다. 기존 softmax 방식은 output이 원핫벡터 방식이었기에 vocab의 수만큼 연산을 했어야했지만, Negative Sampling 방식은 (k+1)만큼만 하면 된다.
- 참고로 small data set일때는 k = 5~20, big data set에서는 k = 2~5 를 추천한다.
- 그런데 어떤 기준으로 negatice example을 만들어야 하나? 즉, vocab에서 어떤 단어를 뽑아야하는가!
- 2가지 방법이 있다.
- 아예 전체 vocab에서 1/v 확률로 동등하게 뽑거나,
- 실생활 혹은 내가 가진 word corpus(단어뭉치)에서 단어들이 쓰이는 빈도수를 기준으로 뽑는 것.
- 뭐가 좋은지는 모르지만 경험적으로 둘을 절충하여 위와 같은 분포를 만들고 뽑는게 성능이 좋단다.
- 저건 그냥 확률분포라고 이해하면 될 듯하다. p(w1) = ... , p(w2) = ..., 이렇게 정의해놓고 확률적으로 뽑는 것.
4. GloVe word vectors
이전 모델만큼 자주 쓰지는 않지만 단순해서 매니아층이 있다.
- GloVe에서는 위와 같이 X 행렬을 정의하는데, 만약 context를 정할 때, target을 기준으로 양옆의 n개의 단어를 선택하는 방법을 선택한다면 대칭행렬이 될 것이다.
- 그러나 만약 직전단어를 context로 한다면 대칭적이지 않겠지. 당연한 얘기이다.
- 그런데 GloVe 알고리즘을 정의하기 위해 전자의 방법으로 context를 선택하기로 한다.
- 최소화하고자 목적함수는 위와 같다.
- 나는 개인적으로 이해안되었던 부분이 i 와 j에 관한 부분이었다. 원래는 문장에서 context와 target word를 선택하는 것이 아니었나~ 생각했지만,
- GloVe에서 thetha_i * e_j 는 theta_t * e_j 와 다른 의미로서 두 벡터의 내적이 logXij 에 가까워 지도록 목적함수를 설정한 것.
GloVe에 대한 자세한 내용은 다음 블로그를 참조바란다.
ratsgo.github.io/from%20frequency%20to%20semantics/2017/04/09/glove/
질문과 비판은 언제나 환영입니다. 많이 꾸짖어주세요.
728x90
'DeepLearning Specialization(Andrew Ng) > Sequence Models' 카테고리의 다른 글
[코세라] [Week 2] Quiz & Programming Assignments (0) | 2020.12.20 |
---|---|
[코세라] [Week 2_NLP & Word Embedding] 3. Applications Using Word Embeddings (0) | 2020.12.19 |
[코세라] [Week 2_NLP & Word Embedding] 1. Introduction to Word Embedding (0) | 2020.12.16 |
[Week 1] Quiz & Programming Assignments (0) | 2020.12.14 |
[코세라] [Week 1] 1. Recurrent Neural Networks (0) | 2020.12.05 |