* Weekly nlp 3, 4에 해당하는 내용

 

본문 링크: https://jiho-ml.com/weekly-nlp-3/

 

Week 3 - 지구용사 벡터맨? Vector 기초 잡기!

다양한 사람들을 만나다 보면 어떤 사람은 정말 나와 비슷하다고 (similar) 느낄 때가 있습니다. 반대로 어떤 사람은 정말 거리감 (distance) 이 느껴지지요. 이번주는 사람이 아닌 벡터 (vector)가 무엇

jiho-ml.com

 

Vector

Scalar (스칼라): 크기만 있는 숫자
Vector (벡터): 크기 & 방향; N차원 공간(a.k.a. Euclidean space)에 사는 존재

 

 

 

1차원 2차원 3차원 4차원
한 방향으로 전진 동서남북 (degree) 동서남북 + 고도(위아래) 위치 + 시간
(각 시간에 내가 어느 공간에 위치하냐를 계속 기록한다고 생각)

 

 

그럼 4차원 이상의 vector는 어떻게 이해해야 하나요?

  • 시각적으로 표현하는 것은 불가능
  • 하지만 사람의 특징을 벡터로 나열한다고 생각해보기 --> 한 사람이 10차원의 vector로 표현된 거라고 볼 수 있음

나이, 성별, 키, 몸무게, 외국 연차, 특징 6~10

 

 


본문 링크: https://jiho-ml.com/weekly-nlp-4/

 

Week 4 - <왕> minus <남자> plus <여자>= ?

<왕> - <남자> + <여자> = ?‌‌<마드리드> - <스페인> + <프랑스> = ? 다음 두 문제의 답은 무엇일까요? 이번 주에는 단어 간의 관계를 학습해 vector에 저장하는 word embedding이라는 아주 중요한 모델을

jiho-ml.com

 

 

<왕> - <남자> + <여자> = ?‌‌
<마드리드> - <스페인> + <프랑스> = ?
  • 단어 = vector로 표현 가능
  • 이전에 배운 one-hot vector는 단어 간의 관계를 고려하지 않기 때문에 이 문제를 풀기 적합하지 않음

--> 그래서 단어 간의 관계를 학습해 vector에 저장하는 word embedding이 필요

 

Distributional Hypothesis

--> 단어는 주변 단어들에 의해 정의 됨

 

The baby is crawling on the mat.
  • [baby --> TV] or [mat --> story] or [on --> with]
    • 말이 안 되는 문장
    • baby, on, mat은 타겟 단어(crawling)에 대해 많은 것을 알려줌
  • crawling이 등장하는 문장을 여러 개 찾아서 보면 여러 정보를 알 수 있음 --> unsupervised learning in ML (label not needed)

 

 

그럼 Distributional Hypothesis를 어떻게 ML 모델로 만들 수 있을까?

  1. GloVe (Stanford)
  2. Word2Vec (Google, NIPS)

 

Word Embedding

sparse one-hot vector --> dense word embedding

  • one-hot vectors는 단어를 Nx1 column vector로 표현함
    • 데이터가 클수록 단어의 개수가 몇천, 몇만까지 커질 수 있음
    • sparse (대부분이 0으로 채워져있음)
  • word2vec과 GloVe
    • 하나의 단어를 몇, 몇 차원이 아닌 몇, 몇 차원으로 낮추려는 게 목표
  • embed = 단단하게 박다 라는 뜻
    • 더 적은 숫자들로 하나의 단어에 대한 정보를 담으려는 word vector들을 embedding이라고도 표현함 (dense라고도 함)
    • word embedding의 모든 row는 0이 아닌 숫자로 채워지기 때문

 

 

GloVe: 간단한 counting

  • 직관적인 방식을 선택
    • 같은 문장에 한 단어가 어떤 근처 단어들과 몇 번 같이 나오는지 세보는 것 --> co-occurrence matrix 라고함
"I enjoy flying."
"I like NLP."
"I like deep learning."

* corpus = text data

 

co-occurence matrix 예시

  • 첫번 째 column에 "I"랑 같이 두번 나오는 "like"가 있는 row = 2
  • 반대로 "NLP"나 "flying"은 같이 나오지만 근처가 아니거나 아예 같이 나오지 않기에 = 0

 

전체 corpus에 4만개의 단어가 있다고 가정.

프로세스:

  1. 40,000 x 40,000 매트릭스를 만들고 0으로 전부 초기화
  2. vocabulary를 봤을 때 'crawling'의 index가 200이고 'baby'의 index가 150이라면 200행(column), 150열(row) & 150행, 200열의 숫자를 하나씩 증가시켜줌
  3. 전체 corpus를 계산

--> 200번째 열은 crawling이라는 단어와 vocabulary에 다른 단어들과의 빈도수 통계가 나옴

 

 

 

하지만 40,000 x 40,000 매트릭스는 너무 크고, 한번도 나오지 않는 단어도 많을 것이기 때문에 sparse matrix이기도 함 --> 비효율

이 비효율은 어떻게 해결할 수 있을까? --> dimensionality reduction 으로 해결 가능

 

 

Dimensionality reduction: 40,000 x 40,000를 300 x 40,000으로 압축시켜줄 수 있는 알고리즘 --> 흩어져있는 애들을 단단하게 모아주자는 취지

 

Dimensionality Reduction(차원 축소): low-dimensional representation(저차원 표현)이 고차원 원본 데이터의 의미 있는 특성을 이상적으로 원래의 차원에 가깝게 유지할 수 있도록 고차원 공간에서 저차원 공간으로 데이터를 변환하는 것을 말함 ( Wikipedia)
차원 축소를 하게 되면 일부 정보 손실 (information loss)이 발생하지만 overfitting을 방지하는데도 효과적임

 

 

 

 

그렇게 300 x 40,000 행열로 압축 되면 각 열(300 x 1)이 하나의 단어를 대표함 --> 각 단어가 dense한 vector로 압축 된 것

e.g. crawling이라는 단어를 300개의 숫자로 표현 할 수 있게 된 것!

 

 

 

Neural Network를 이용한 word2vec

  • word2vec은 continuous bag-of-words (CBOW) 또는 skipgram 알고리즘을 통해 학습시킬 수 있음
    • 주변 단어와 타깃 단어의 관계를 classification으로 바꾸어 버림
CBOW: 주변 단어들을 모두 합쳐서 본 후 타깃 단어를 맞추기
skipgram: 타깃 단어를 보고 주변 단어를 맞추기

 

https://becominghuman.ai/how-does-word2vecs-skip-gram-work-f92e0525def4

  • "fox"가 타겟이라면
    • CBOW: ["the", "quick", "brown", "jumps", "over"]을 가지고 "fox"를 예측 --> 좀 더 직관적
    • skipgram: "fox"를 가지고 ["the", "quick", "brown", "jumps", "over"]를 각각 예측 --> 하지만 skipgram으로 학습된 embedding이 효과가 더 좋음

 

  • 예측을 위한 classification model은 NN으로 구현이 되고, stochastic gradient descent (SGD)로 학습이 됨
  • input = Nx1 word embedding
  • 처음에는 무작위의 숫자로 embedding이 초기화되지만, 학습이 될수록 word embedding은 주변 단어들과의 관계에 대한 정보가 encoding됨

 

--> GloVe와 궁극적으로 같은 word embedding을 다른 방식으로 학습 시키는 것

 

 

 

<마드리드> - <스페인> + <프랑스> = <파리>!

  • word2vec이나 GloVe로 학습된 word embedding들은 단어를 N차원에 사는 vector로 바꿔준 것
    • 그래서 서로 더하거나 빼기 가능

--> 이 더하기 빼기를 통해 단어들의 의미적(semantic) 관계 & 문법적(syntatic) 관계를 알아낼 수 있음

 

 

 

 

city, country들을 2D word2vec으로 표현했을 때

위의 예시처럼

  • 단어의 성별 관계
  • 회사와 CEO 이름의 관계
  • 도시와 ZIP code의 관계
  • 형용사의 변형까지 (e.g. dark, darker, darkest)

벡터의 방향성에 encoding 되어있다는 걸 알 수 있음

 

 

이러한 word embedding들을 다른 NLP task의 input으로 사용했을 때 엄청난 성능 증가를 기대 할 수 있음

word embedding은 엄청난 양의 corpus로 학습돼서 각 단어에 대한 정보정확하고 깊게 담아낼 수 있기때문

 

 

 


내가 더 공부해야 할 부분들:

  1. SVD
  2. PCA
  3. SGD