자연어처리를 위한 FastText

아래 내용은 yandexdataschool-nlp_course 2019 week01_embeddings을 참조하였습니다.
관련 논문은 Enriching Word Vectors with Subword Information을 참고하세요

FastText는 단어를 표현하는 벡터를 sub-word 단위로 학습해서 단어의 의미를 표현하는 방법입니다.
(참고 자연어처리를 위한 Word2Vec )


1. FastText

FastText(Bojanowski et al. 2017 Facebook)는 Word2Vec의 학습방법을 sub-word 단위로 학습하도록 확장한 것입니다.

학습을 위한 idea는 다음과 같습니다.

  • 단어벡터를 학습할 때 sub-word를 이용해서 학습한다.
  • Sub-word를 이용해서 OOV(Out of Vocabulary) 문제를 개선한다.
1.1. Char n-gram

'where'라는 단어들 FastText로 표현해보겠습니다.

where: [<wh, whe, her, ere, re>, <where>]

위 내용은 'where'라는 단어를 FastText의 char n-gram으로 표현한 것입니다.

fasttext-01.png

위 그림과 같이 Word2Vec은 'where'라는 단어를 하나의 벡터를 사용해서 표현합니다.
반면 FastText는 sub-word [<wh, whe, her, ere, re>, <where>] 벡터들의 합을 사용해서 표현합니다.

1.2. OOV(Out of Vocabulary) 문제 개선

단어를 학습할 때 'book'과 'shelf'는 학습을 했는데 'bookshelf'라는 단어를 학습하지 못했다고 가정해 보겠습니다.

Word2Vec에서는 'bookshelf'는 학습이 안된 단어이므로 OOV로 처리합니다.

book: [<bo, boo, ook, ok>, <book>]
shelf: [<sh, she, hel, elf, lf>, <shelf>]

FastText에서는 위와 같이 'book'과 'shelf'를 sub-word 단위로 학습했습니다.

bookshelf: [<bo, boo, ook, oks, ksh, she, hel, elf, lf>, <bookshelf>]

FastText는 위와 같이 'bookshelf'를 sub-word 단위로 단어벡터를 찾으려고 합니다.

  • [oks, ksh, <bookshelf>]: 없는 단어이므로 OOV 처리가 될 것 입니다.
  • [<bo, boo, ook, she, hel, elf, lf>]: 'book' 과 'shelf'의 sub-word 단어벡터를 이용합니다.

이와 같이 하면 'bookshelf'의 벡터는 'book'과 'shelf'의 중간쯤의 의미를 가지게 될 것입니다.
즉 Word2Vec 보다 개선된 단어벡터를 얻을 수 있습니다.