Note
FastText (패스트텍스트) 본문
단어를 벡터화 하는 방법 중 하나인 페이스북에서 개발한 FastText.
Word2Vec의 확장 매커니즘이라고 볼 수 있다. 그러나 두 방법의 가장 큰 차이는 Word2Vec은 단어를 쪼개질 수 없는 단위로 생각하는 반면, FastText는 하나의 단어안에서도 여러 단어들이 존재하는 것으로 간주한다.
이처럼 단어 안의 여러 단어를 내부 단어 (subword)라고 한다.
FastText에서는 각 단어는 글자 단위 n-gram의 구성으로 취급합니다.
n을 몇으로 결정하는지에 따라서 단어들이 얼마나 분리되는지 결정됩니다.
예를 들어서 n을 3으로 잡은 트라이그램(tri-gram)의 경우, apple은 app, ppl, ple로 분리하고 이들을 벡터로 만듭니다.
시작과 끝을 의미하는 <, >를 도입하여 아래의 5개 내부 단어(subword) 토큰을 벡터로 만듭니다.
apple (n = 3) 벡터 값 예시
apple = <ap, app, ppl, ple, le>, <apple>
Word2Vec에서는 얻을 수 없었던 강점을 가질 수 있다.
장점은 데이터 셋만 충분한다면 내부 단어를 통해 모르는 단어(Out Of Vocabulary, OOV)에 대해서도 다른 단어와의 유사도 계산이 가능하다는 점이다.
모르는 단어에 대한 대처 능력이 비교적으로 덜한 Word2Vec, GloVe와 차이점이다.
Word2Vec은 빈도 수가 적은 단어에 대해서 임베딩의 정확도가 높지 않다는 단점이 있다.
FastText는 단어의 빈도수가 매우 적은 단어라도,
해당 단어의 n-gram이 다른 단어 n-gram과 겹치는 경우에 Word2Vec 보다 비교적 높은 임베딩 벡터값을 얻을 수 있다.
FastText는 노이즈가 많은 코퍼스에서 강점을 가지는 것도 위와 같이 빈도 수가 적은 단어에 대한 대처가 좋기 때문입니다.
실제 비정형 데이터에 많은 오타가 존재합니다. 오타가 섞인 단어는 당연히 등장 빈도수가 매우 적은 단어가 됩니다.
이와 같은 단어들은 Word2Vec에서는 오타가 섞인 단어는 임베딩이 제대로 되지 않지만 FastText는 일정 수준의 성능을 보입니다.
'Deep Learning > NLP' 카테고리의 다른 글
Py-Hanspell (0) | 2022.05.15 |
---|---|
PyKoSpacing (0) | 2022.05.11 |
다층 퍼셉트론(MLP)을 사용하여 텍스트 분류 (0) | 2022.05.07 |
20개 뉴스 그룹 데이터 (0) | 2022.05.06 |
케라스의 texts_to_matrix() (0) | 2022.05.05 |