[딥러닝 자연어처리] 10. (1) 워드 임베딩 ~ 7) 자모 단위 한국어 fast text 학습하기
딥러닝을 이용한 자연어처리 입문 #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)
- 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는 아래 내부 단어들을 벡터화
내부 단어들의 벡터값을 얻었다면, 단어 apple의 벡터값은 저 위 벡터값들의 총 합으로 구성
모르는 단어(Out Of Vocabulary, OOV)에 대한 대응
- 데이터 셋만 충분한다면 위와 같은 내부 단어(Subword)를 통해 모르는 단어에 대해서도 다른 단어와의 유사도를 계산할 수 있다
FAST TEXT VS Word2Vec
Word2Vec