본문 바로가기
Deep Learning Specialization

Word Embeddings [Deep Learning Specialization #13]

by ALTERww 2022. 8. 18.
320x100

Coursera의 Deep Learning Specialization - Week 5의 강의를 수강하면서 필기한 내용을 바탕으로 정리한 글입니다.

 

지난 시간에는 RNN, LSTM, GRU 등에 대해 배웠습니다.

이번 시간에는 Word Embeddings와 NLP(Natural Language Processing) - 자연어 처리에 대한 아이디어를 살펴 보겠습니다.

 

Word Representation

지난 시간에 시퀀스 모델에서 단어 하나를 one-hot vector로 표현한다고 배웠습니다.

하지만 one-hot 표현은 다른 단어들과의 유사성, 상관관계를 추론할 수 없다는 점이 큰 단점입니다.

예를 들어, orange 다음의 빈 칸에 "juice"가 오도록 학습된 모델이 apple을 봤을 때, 

one-hot vector는 orange와 apple이 같은 과일이라는 유사성을 추론할 수 없기 때문에 다음 빈 칸에 juice를 도출할 수 없습니다.

 

 

Word Embedding

위의 단점을 해소하기 위해서 각 Feature별 Value를 부여하여 학습하도록 하는 Word Embedding을 이용합니다.

Row에는 Feature가 오고, Column에는 Word가 옵니다.

각 Word마다 Feature별 Value를 가지게 됩니다. Man의 경우 남성을 의미하므로 Gender에서 -1의 값을 가집니다.

반면 나이, 음식 등의 Feature에는 0에 가까운 값을 가집니다.

Woman의 경우 Gender에서 1의 값을 가집니다. 이는 Man과 반대되는 뜻을 가지기 때문입니다.

 

 

Visualizing Word Embeddings ( t-SNE )

Word Embeddings를 아래와 같이 시각화할 수 있습니다. t-SNE 알고리즘을 사용하였습니다.

약 300개의 Feature를 2차원으로 Mapping하여 유사한 단어들끼리 더 가까이 있는 것을 확인할 수 있습니다. 

 

 

 

Example of Named entity recognition

Word Embeddings를 활용한, 이름 인식 예제를 살펴 보겠습니다.

주어진 두 문장에서, "Sally Johnson"이 사람 이름에 해당하는 지를 판단하려면 "orange farmer"가 사람임을 학습해야 합니다.

orange는 과일, farmer는 직업이라는 것을 학습하여 "과일 + 직업"이 사람임을 학습하면, "apple farmer"라는 단어를 봤을 때도 orange와 apple이 같은 과일임을 Word Embeddings를 통해 알고 있으므로, "Robert Lin"이 사람 이름임을 도출할 수 있게 됩니다.

training set에서 자주 볼 수 없는 단어인 "durian cultivator"를 봤을 때에도, Word Embeddings에서 durian이 과일이고, cultivator가 직업임을 학습한다면 마찬가지로 사람 이름을 인식할 수 있게 됩니다.

 

이러한 도출을 가능하게 하는 Word Embeddings의 큰 특징은 Word Embeddings의 학습 알고리즘이 아주아주 큰 단어 묶음을 이용하여 학습하기 때문입니다.

 

 

Transfer learning & Word embeddings

위와 같이, Word Embeddings는 아주 큰 텍스트 세트를 이용하므로 사전에 훌륭하게 학습된 모델로부터 [전이 학습]을 이용하기에 용이합니다.

거대한 모델로부터 자신이 학습하고 싶은 작은 모델로의 전이 학습을 적용할 때 매우 효과적입니다.

 

Relation to face encoding

Word Embeddings는 얼굴 인식의 Face Encoding과 매우 비슷합니다.

Face Encoding은 여러 입력 이미지에 대해서 동일한 파라미터를 이용합니다. Word Embeddings 또한 마찬가지로 고정된 단어들을 이용한다는 점에서 비슷하다고 볼 수 있습니다.

 

 

Analogies

단어들 사이의 관계를 추론할 수 있다는 점은 Word Embeddings의 큰 장점입니다. 

단어 Man에 해당하는 Embedding Vector e_man에서 e_woman을 빼고, e_king에서 e_queen을 빼면 둘이 비슷한 벡터 결과를 가지는 것을 볼 수 있습니다. 이것은 "Man과 Woman"의 관계와, "King과 Queen"의 관계가 매우 비슷하다는 것을 의미합니다. 

 

 

Analogies using word vectors

위 사실을 그림으로 살펴보면 아래와 같이 두 단어 간의 벡터를 확인할 수 있습니다. 이 벡터는 2D 상에서 그려진 것이 아니라, 300D 차원에서 그려진 벡터입니다.

따라서 man과 woman의 관계에서 king과 가장 흡사한 단어를 찾는 문제를 푸는 것과 같습니다.

이를 푸는 방정식은 아래와 같습니다. sim 함수는 유사성을 구하는 함수입니다.

더보기

argmax sim(e_w, e_king - e_man + e_woman)

 

 

 

Cosine similarity

유사성 함수로는 대표적으로 Cosine similarity를 이용합니다.

u와 v의 유사성을 계산한다고 할 때, u의 전치와 v를 곱한 뒤 u와 v의 길이로 나눈 값입니다.

두 벡터 사이의 각의 cosine 값에 해당합니다.

 

 

Embedding Matrix

Word Embeddings을 통해서, Embedding Matrix를 학습하게 됩니다. 1만 개의 단어를 사용하고 300개의 Feature를 사용한다면, 300 x 10000의 Embedding Matrix E를 학습합니다.

이 행렬에 각 단어에 해당하는 one-hot vector를 곱하여 Embedding vector를 얻을 수 있습니다.

하지만 이 방법은 one-hot vector가 차지하는 공간이 꽤 크기 때문에 메모리와 연산량 측면에서 비효율적입니다.

실제로는 one-hot vector를 곱하지 않고 특화 함수를 이용합니다.

 

 

다음으로 Word Embeddings를 실제 모델에 적용하는 아이디어를 살펴 보겠습니다.

Neural Language Model

I want a glass of orange _______.에서 빈 칸의 단어를 도출한다고 가정합니다.

각 단어의 one-hot vector를 Embedding Matrix E에 곱하여, Embedding Vector를 얻을 수 있습니다. 이 벡터들이 신경망의 입력으로 사용되어, Softmax를 이용하여 각 단어 별 확률을 예측하는 구조입니다.

 

여기서 중요한 점은, 빈 칸으로부터 앞의 4개 단어만 살펴 보는 방법을 사용한다는 것입니다. (Fixed Historical Window)

Embedding Matrix E를 학습한다는 점이 중요합니다.

 

 

Other pairs

앞의 마지막 4개 단어 말고도, 마지막 한 단어를 살펴 보거나 좌우로 4개 단어를 살펴 보거나, 뜻을 가진 단어 1개를 선택할 수도 있습니다.

 

 

Skip-grams

Skip-grams는 단어(Word)를 벡터(Vector)로 바꾸어주는 알고리즘 중 하나입니다.

무작위로 중심 단어를 선택한 뒤, 주변 단어를 예측하는 방법을 이용합니다.

 

 

Model of Skip-grams

Skip-grams의 모델입니다.

Content "orange"에서 Target "juice"를 예측하는 모델을 학습해야 합니다.

모델의 형태는 전에 말한 것처럼, one-hot vector를 E에 곱한 것을 신경망의 입력으로 넣고 Softmax를 통해 각 단어별 확률을 예측합니다.

Loss 함수는 예측값에 negative log를 취하여 누적하여 더하도록 합니다.

 

 

Problems with softmax classification

Softmax 분류의 문제점은 연산 속도입니다.

분모를 살펴 보면 10000개의 단어에 대해 계산을 해야 하는데, 이 단어 수가 증가하게 되면 매우 느려집니다.

 

이에 대한 해결책으로 Hierarchical Softmax가 있습니다.

빈도수가 큰 단어를 상위 노드에 배치하여 비교적으로 좋은 성능을 보장하도록 합니다.

 

context c를 샘플링할 때, Target t는 c 근처에서 샘플링됩니다. 이 Context c를 선택하는 방법은, 균일하게 선택하도록 하는 것입니다. 하지만 이 방식의 단점은 문맥과 크게 상관없지만 빈번히 등장하는 a, the, of, an 등의 단어들이 많이 선택된다는 것입니다. 이러한 점 때문에 다른 방식인 Negative Sampling을 이용합니다.

 

 

Negative Sampling

Softmax 분류의 연산 속도가 느린 단점을 보완한, Negative Sampling을 살펴 보겠습니다.

이 방식은 새로운 학습 문제를 정의합니다.

orange-juice 같은 positive sampling이 있다면, 무작위로 K개의 negative sampling을 진행합니다.

orange-king, orange-book, orange-the 등이 되겠습니다.

우연히 orange-of를 선택할 수도 있는데, 일단은 negative로 처리합니다.

 

 

Model of Negative Sampling

다음은 모델입니다.

모든 one-hot vector를 끌어와 사용하지 않고, 이전에 무작위로 선택한 negative sampling set가 포함된, training set를 이용한다는 점에서 차이가 있습니다. 그리고 Softmax 대신, Logical Regression Model을 이용한 Binary Classification으로 변환되었습니다. 따라서 연산량 측면에서 매우 효율적입니다.

 

 

Selecting negative examples

negative examples를 선택하는 방법은 정해져 있지 않습니다. 빈도수에 따라 정한다면 문맥상 중요하지 않은 단어가 많이 선택되고, 무작위로 선택하면 문장 위 단어 분포를 고려하지 않기 때문입니다. 여러 논문에서는 경험상 가장 좋은 방법을 선택한다고 합니다.

 

 

GloVe(global vectors for word representation)

GloVe 알고리즘은 context와 target 간 몇 번 등장하는지를 계산합니다.

 

 

Model of GloVe

GloVe 모델의 역할은 아래 식을 최소화 하는 것입니다.

f(Xij) 항은 Weighting Term으로써 등장하지 않는 쌍은 0으로 하여 더하지 않고, 빈도수가 너무 크거나 작은 단어들에 대해 값을 제어하는 역할을 합니다.

 

 

Sentiment classification problem

감정 분류 문제에 대해 살펴 보겠습니다.

주어진 문장 x에 대해서, 어떤 점수를 의미하는지를 도출하는 문제에 해당합니다.

NLP에 있어 아주 중요한 문제로, Word Embeddings를 통해 좋은 분류기를 만들 수 있습니다.

 

 

Simple sentiment classification model

간단한 감정 분류 모델을 살펴 봅니다.

문장 속 단어들을 embedding vector로 변환하고, 평균을 구하여 Softmax를 통해 1점부터 5점 사이의 값을 예측합니다.

하지만 단어 순서를 완전히 무시하기 때문에, 그다지 좋은 모델은 아닙니다. 실제 문장의 뜻은 혹평을 가지고 있지만, 단지 "good"이 많다는 이유로 좋은 점수를 예측하기 쉽습니다. 

 

 

RNN for sentiment classification

문맥을 고려하기 위해 감정 분류 문제에 RNN을 사용할 수 있습니다. 실제로 좋은 성능을 보여 주고, Word Embeddings를 이용하면 처음 보는 "absent"라는 단어를 보았을 때도 잘 일반화되어 좋은 결과를 얻을 수 있습니다.

 

 

Problem of bias in Word embeddings

Word Embeddings에서 Bias를 없애는 과정은 매우 중요합니다. 성별, 인종, 나이 등등이 모델의 학습에 영향을 끼치게 되면 의도와는 다른 결과를 도출하기 때문입니다.

 

 

Addressing bias in word embeddings

Word Embeddings에서 bias를 없애는 과정입니다.

  • Bias Direction을 구합니다.
    두 단어의 Embedding Vector를 계산하여 구하는데, 유사 관계를 가진 단어 쌍들을 모두 계산한 뒤 평균을 취할 수도 있습니다.
  • Neutralize : 중성화합니다.
    Bias를 제거하기 위해 Non_bias Direction에 투영시킵니다.
  • Equalize : 평등화합니다.
    Boy - Girl, Grandfather - Grandmother처럼 대칭 관계가 있는 단어들에 대해 동일한 거리를 가지도록 Non-bias Direction 기준으로 같은 거리에 있도록 위치시킵니다.

자세한 알고리즘은 논문을 참고.

 

댓글