Processing math: 100%
본문 바로가기

Data Science

FastText

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라는 단어가 등장하지 않았더라도, birthplace가 있다면 birthplace의 embedding vector를 구할 수 있다.

 

◎ 등장 빈도 수가 적은 단어(= rare word)에 대한 대응

→ 다른 단어와 subword가 겹치는 경우, 보다 정확한 embedding vector를 얻을 수 있다.

 

◎ 오타에 대한 대응

ex) appleappple로 표기하는 오타가 발생했을 때, appleappple은 공통의 subword들을 많이 갖고 있다.

→ 따라서 서로 유사한 embedding vector 값을 얻을 수 있다.

 

 

 


 

< References >

 

※ arxiv, Enriching Word Vectors with Subword Information

 

※ wikidocs, FastText

 

 

'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