본문 바로가기
  • 데이터에 가치를 더하다, 서영석입니다.
공부하는 습관을 들이자/Deep Learning (NLP,LLM)

[딥러닝 자연어처리] 10. (1) 워드 임베딩 ~ 7) 자모 단위 한국어 fast text 학습하기

by 꿀먹은데이터 2024. 1. 1.

딥러닝을 이용한 자연어처리 입문 #10. (1) 워드 임베딩 ~ 7) 자모 단위 한국어 fast text 학습하기

(1) 워드 임베딩

밀집 표현(Dense Representation)

  • 밀집 표현은 벡터의 차원을 단어 집합의 크기로 상정하지 않음
  • 사용자가 설정한 값으로 모든 단어의 벡터 표현의 차원을 맞춤

Ex) 강아지 = [ 0 0 0 0 1 0 0 0 0 0 0 0 ... 중략 ... 0]

밀집 표현을 사용하고, 사용자가 밀집 표현의 차원을 128로 설정한다면

강아지 = [0.2 1.8 1.1 -2.1 1.1 2.8 ... 중략 ...]

→ 벡터의 차원이 조밀해졌다고 해서 밀집 벡터

워드 임베딩(Word Embedding)

  • 단어를 밀집 벡터(dense vector)의 형태로 표현하는 방법을 워드 임베딩(word embedding)
  • 밀집 벡터를 워드 임베딩 과정을 통해 나온 결과라고 하여 임베딩 벡터(embedding vector)
  • ex) LSA, Word2Vec, FastText, Glove

워드투벡터(Word2Vec)

  • 원-핫 벡터는 단어 벡터 간 유의미한 유사도를 계산할 수 없다는 단점이 있음
  • 단어 벡터 간 유의미한 유사도를 반영할 수 있도록 단어의 의미를 수치화 할 수 있는 방법 → (Word2Vec)

희소 표현(Sparse Representation)

  • 벡터 또는 행렬의 값이 대부분이 0으로 표현되는 방법을 희소 표현(sparse representation)
  • 이러한 표현 방법은 각 단어 벡터간 유의미한 유사성을 표현할 수 없다는 단점이 있음
  • 안으로 단어의 의미를 다차원 공간에 벡터화하는 방법을 사용 → 분산 표현(distributed representation)

분산 표현(Distributed Representation)

  • 기본적으로 분포 가설(distributional hypothesis)이라는 가정 하에 만들어진 표현 방법입니다. 이 가정은 '비슷한 문맥에서 등장하는 단어들은 비슷한 의미를 가진다' 라는 가정입니다
  • 분산 표현은 분포 가설을 이용하여 텍스트를 학습하고, 단어의 의미를 벡터의 여러 차원에 분산하여 표현
  • 벡터의 차원이 단어 집합(vocabulary)의 크기일 필요가 없으므로, 벡터의 차원이 상대적으로 저차원으로 줄어듦
  • Ex) 강아지 = [ 0 0 0 0 4 0 0 0 0 0 0 0 ... 중략 ... 0]

텍스트 데이터에 단어가 10,000개 있고 인덱스는 0부터 시작하며 강아지란 단어의 인덱스는 4였다면 강아지란 단어를 표현

  • 강아지 = [0.2 0.3 0.5 0.7 0.2 ... 중략 ... 0.2]

강아지란 단어를 표현하기 위해 사용자가 설정한 차원의 수를 가지는 벡터가 되며 각 차원의 값은 실수값을 가짐

  • 희소 표현이 고차원에 각 차원이 분리된 표현 방법이었다면, 분산 표현은 저차원에 단어의 의미를 여러 차원에다가 분산 하여 표현
  • 단어 벡터 간 유의미한 유사도 계산가능

CBOW(Continuous Bag of Words)

Word2Vec에는 2가지 방법이 있음

  • CBOW는 주변에 있는 단어들을 입력으로 중간에 있는 단어들을 예측하는 방법
  • Skip-Gram은 중간에 있는 단어들을 입력으로 주변 단어들을 예측하는 방법
  • 예측해야하는 단어 → 중심 단어(center word)
  • 예측에 사용되는 단어 → 주변 단어(context word)
  • 중심 단어를 예측하기 위해서 앞, 뒤로 몇 개의 단어를 볼지를 결정해야 하는데 이 범위 → 윈도우(window)

윈도우 크기가 정해지면 윈도우를 옆으로 움직여서 주변 단어와 중심 단어의 선택을 변경해가며 학습을 위한 데이터 셋을 만드는데 이 방법을 슬라이딩 윈도우(sliding window)
Word2Vec은 은닉층이 다수인 딥 러닝(deep learning) 모델이 아니라 은닉층이 1개인 얕은 신경망(shallow neural network)

  • CBOW에서 투사층의 크기 M은 임베딩하고 난 벡터의 차원이 됨
  • 투사층의 크기는 M=5이므로 CBOW를 수행하고나서 얻는 각 단어의 임베딩 벡터의 차원은 5가 될 것

Skip-gram

  • CBOW에서는 주변 단어를 통해 중심 단어를 예측했다면, Skip-gram은 중심 단어에서 주변 단어를 예측

  • 중심 단어에 대해서 주변 단어를 예측하므로 투사층에서 벡터들의 평균을 구하는 과정은 없음
  • 여러 논문에서 성능 비교를 진행했을 때 전반적으로 Skip-gram이 CBOW보다 성능이 좋다

패스트텍스트(FastText)

  • 메커니즘 자체는 Word2Vec의 확장
  • FastText는 하나의 단어 안에도 여러 단어들이 존재하는 것으로 간주

내부 단어(subword)의 학습

  • FastText에서는 각 단어는 글자 단위 n-gram의 구성으로 취급
  • n을 몇으로 결정하는지에 따라서 단어들이 얼마나 분리되는지 결정

최소값 = 3, 최대값 = 6인 경우라면, 단어 apple에 대해서 FastText는 아래 내부 단어들을 벡터화

소값 = 3, 최대값 = 6인 경우라면, 단어 apple에 대해서 FastText는 아래 내부 단어들을 벡터화

내부 단어들의 벡터값을 얻었다면, 단어 apple의 벡터값은 저 위 벡터값들의 총 합으로 구성

 

모르는 단어(Out Of Vocabulary, OOV)에 대한 대응

  • 데이터 셋만 충분한다면 위와 같은 내부 단어(Subword)를 통해 모르는 단어에 대해서도 다른 단어와의 유사도를 계산할 수 있다

FAST TEXT VS Word2Vec

Word2Vec