임베딩

정현준·2022년 11월 17일
0

정의

  • 사람이 쓰는 자연어를 기계가 이해할 수 있는 숫자의 나열인 벡터로 바꾼 결과 혹은 그 과정 전체

목적

  • 단어 및 문장 간 관련도 계산
  • 의미적 및 문법적 정보 함축

Word2Vec (CBoW & Skip-gram)

“… 어머님 나 는 별 하나 에 아름다운 말 한마디 씩 불러 봅니다 …”

CBoW 를 사용하면 표시된 단어 정보를 바탕으로 아래의 [ ---- ] 에 들어갈 단어를 예측하는 과정으로 학습이 진행됩니다.

“… 나 는 [ -- ] 하나 에 … “

“… 는 별 [ ---- ] 에 아름다운 …”

“… 별 하나 [ -- ] 아름다운 말 …”

“… 하나 에 [ -------- ] 말 한마디 …”

Skip-gram 을 사용하면 표시된 단어 정보를 바탕으로 다음의 [ ---- ] 에 들어갈 단어를 예측하는 과정으로 학습이 진행됩니다.

“… [ -- ][ -- ] 별 [ ---- ][ -- ] …”

“… [ -- ][ -- ] 하나 [ -- ][ -------- ] …”

“… [ -- ][ ---- ] 에 [ -------- ][ -- ] …”

“… [ ---- ][ -- ] 아름다운 [ -- ][ ------ ] …”

Skip-gram이 CBoW보다 역전파과정에서 학습량이 많아서 일반적으로 성능이 더 좋음

Word2Vec의 단점

  1. 단어의 형태학적 특성을 반영하지 못함
    • teach, teacher, teachers 각각 개별단어로 처리하여 모두 벡터값이 다름
  2. 분포가설을 기반으로 하여 단어 빈도수의 영향을 많이 받아, 희소한 단어를 임베딩하기 어려움
  3. OOV(Out-of-Vocabulary)의 처리가 어려움
    • 새로운 단어가 등장하면 데이터 전체를 다시 학습시켜야함

Sub-sampling

  • 'a', 'the'와 같이 많이 등장하는 단어일수록 제거될 확률이 높음(쓸데없는 단어)

Negative-sampling

  • 새로운 단어를 학습할 때, 전체 데이터를 업데이트하면 비효율적이므로, 관련이 큰 단어들(positive)과 관련없는 몇 가지만의 단어들(negative)을 이용하여 학습해서 학습량을 획기적으로 줄임

Word2Vec 관련 함수 및 특성

import gensim

# 데이터 불러오기
import gensim.downloader as api

wv = api.load('word2vec-google-news-300')

# 인덱스에 위치한 단어 정보
wv.index_to_key

# 유사도 측정
wv.similarity(word1, word2)

# 가장 유사한 단어(5순위)
wv.most_similar(positive=['word1', 'word2'], topn=5)

# 단어들 중 가장 관계 없는 단어
wv.doesnt_match(['word1', 'word2', 'word3'])

0개의 댓글