Skip-gram(⊂ Word2Vec) 의 한계
◎ 단어 집한 내 빈도가 적은 단어들은 학습이 잘 안됨
→ 단어 사전에서 딱 한 번 등장했다고 하면, n epochs 학습 시 딱 n 번만 학습됨
ex) '다스플레토사우루스', ' supercalifragilisticexpialidocious'
◎ OOV(=Out Of Vocabulary)에 대한 대처가 어려움
FastText
◎ Facebook(※ 현 Meta)에서 개발
◎ subword를 활용해 Skip-gram의 한계를 극복
→ 단어(word) 내부의 subword로 분리해서 학습
Subword 분리
◎ n=3일 때, apple 이라는 단어는 아래와 같이 subword들로 분리된다.
먼저 단어의 앞 뒤에 <,> 를 붙여준다.
이후 n개씩 잘라서 분리시키고, 단어의 앞 뒤에 <,>를 붙인 토큰도 추가시켜준다.
분리 전 : <apple>
분리 후 : <ap, app, ppl, ple, le>, <apple>
◎ 그리고 n의 범위를 정해줄 수 있다.
3<=n<=6 이라면,
분리 전 : <apple>
분리 후 : <ap, app, ppl, ple, le>, <app, appl, pple, ple>, <appl, ..., <apple>
위와 같이 3~6 길이의 subwords가 모두 포함된다.
embedding vector (임베딩 벡터)
◎ 위에서 만든 subwords의 단어 집합을 통해, 기존 단어들의 embedding vector들을 학습한다.
→ 기존 Skip-gram의 입력 : [0,0,1,...,0,0] 형태의 one-hot vector
→ FastText의 입력 : 현재 단어를 구성하는 subwords들의 값이 1인, [1,0,1,1,0,0,...,0,1,0] 형태의 vector
◎ apple의 embedding vector는, apple의 모든 subwords의 embedding vectors를 더한 값이 된다.
wapple=w<ap+wapp+wppl+wple+wle>+w<app+wappl+...+w<apple>
FastText의 강점
◎ 모르는 단어(=OOV)에 대한 대응
ex) birthplace라는 단어가 등장하지 않았더라도, birth와 place가 있다면 birthplace의 embedding vector를 구할 수 있다.
◎ 등장 빈도 수가 적은 단어(= rare word)에 대한 대응
→ 다른 단어와 subword가 겹치는 경우, 보다 정확한 embedding vector를 얻을 수 있다.
◎ 오타에 대한 대응
ex) apple을 appple로 표기하는 오타가 발생했을 때, apple과 appple은 공통의 subword들을 많이 갖고 있다.
→ 따라서 서로 유사한 embedding vector 값을 얻을 수 있다.
< References >
※ arxiv, Enriching Word Vectors with Subword Information
'Data Science' 카테고리의 다른 글
CRM 마케팅 이해하기 (인프런) (0) | 2024.01.20 |
---|---|
RNN (0) | 2023.10.09 |
GloVe (0) | 2023.10.07 |
Word2Vec (0) | 2023.10.06 |
TF-IDF (0) | 2023.10.02 |