FastText 논문 : https://arxiv.org/abs/1607.04606
기존 모델(word2vec)은 단어마다 다른 벡터를 할당하여 단어의 형태를 무시하게 된다. 이는 큰 어휘들과 많은 드물게 사용되는 단어들에서 한계가 있다.
본 논문에서는 skipgram을 기반으로 각 단어가 문자 n-grams 벡터의 조합으로 표현하여 위의 문제를 해결한다. 벡터 표현은 각 문자 n-gram과 연관되어 있으며, 단어들은 이러한 표현의 합을 표현된다. 이 방법은 큰 말뭉치에서도 속도가 빠르고 train 데이터에 등장하지 않은 단어들도 표현 가능하다.
9개의 언어들에 대해 단어 유사도와 추론 태스크를 통해 단어 표현을 평가했고 논문의 모델이 현재 최고 수준의 성능을 달성했다.
Neural Network community에서 Collobert and Weston(2008)은 feed-forward neural network를 이용해 word embedding을 학습시키는 것을 제안했다.
기존 모델은 파라미터를 공유하지 않고 구별되는 벡터로 단어를 표현했다. 이런 모델은 내부구조를 무시하여 형태학적으로 복잡한 언어는 제대로 표현하지 못한다.(ex.Turkish or Finnish)
많은 단어 형성이 규칙을 따르기 때문에 문자 수준 정보를 사용하여 형태학적으로 풍부한 언어에 대한 벡터 표현을 개선해볼 수 있다.
본 논문에서는 기존 skip-gram으로 학습한 벡터에 문자 단위 n-gram 벡터의 합을 더해주어 모델을 확장한다.
Character level features for NLP -
1) Recurrent neural networks
Mikolov et al., 2012; Sutskever et al., 2011; Graves, 2013; Bojanowski et al., 2015 : language modeling
Chrupała, 2014 : text normalization
Ling et al., 2015 : part-of-speech tagging
Ballesteros etal., 2015 : parsing
2) Another family of models are convolutional neural networks trained on characters
dos Santos and Zadrozny, 2014 : part-of-speech tagging
dos Santos and Gatti, 2014 : sentiment analysis
Zhang et al., 2015 : text classification
Kim et al.,2016). Sperr et al. (2013) : language modeling
3) Recent works in machine translation
Sennrich et al., 2016; Luong and Manning, 2016
형태학을 고려하여 단어 표현을 학습하는 모델을 제안한다.
General model = word2vec model
총 W개의 단어가 있을 때, 각 단어들에 대해 벡터를 할당해주고 주변에 어떤 단어가 올 지 잘 예측할 수 있는 방향으로 학습을 진행
= 총 T개의 단어들이 있고 w_t(하나의 단어)가 주어졌을 때 w_c(주변의 문맥단어)에 어떤 단어가 와야 확률값이 가장 높은지를 최적화하는 방향으로 진행
u_w_c, u_w_t : w_c와 w_t의 고유 벡터
위의 두 벡터를 가지고 확률값을 가지는 방법 = softmax 함수
= w_t가 주어졌을 때 실제 정답인 w_c가 올 확률 / w_t가 주어졌을 때 다른 모든 단어들이 등장할 확률의 합
그러나 softmax 함수는 w_t에 대해 w_c 하나에 대해서는 잘 맞출 수 있지만 주위 다른 단어들은 잘 예측하지 못함.
그래서 word2vec에서는 softmax 대신 negative sampling을 사용!
*s : scoring function
= 앞쪽 log 부분:w_t가 주어졌을 때 w_c가 정답이면 이 두 벡터의 유사도를 높게 만듬 , 뒤쪽 log 부분 : 실제 정답이 아닌 n에 대해서는 두 단어의 유사도가 낮도록 만듬도록 만듬
각 단어에 구별되는 벡터 표현을 사용하여 skipgram model은 단어의 내부 구조를 무시한다.
단어의 양 끝에 <,>를 더하여 접두사와 접미사를 구별할 수 있도록 한다. 또한, 자신의 n-gram set에 자기 자신(즉 단어)도 포함한다.
Ex) where
→ <wh ,whe, her, ere, re> 그리고 < where>
단어를 n-gram 벡터의 합으로 나타낸다.
g : 모든 n-gram 딕셔너리 사이즈
g_w : 단어 w에서 나올 수 있는 모든 n-gram 경우의 세트
z_g : n-gram의 모든 각각의 벡터 표현
=> 한 단어에서 나올 수 있는 모든 n-gram을 추출한 다음 각각의 벡터들을 다 더해서 새로운 score를 만드는 것 = subword model
단어 간의 표현을 공유가 가능하므로 희귀 단어도 의미 있는 표현을 학습할 수 있다.
n-gram은 메모리 문제가 있어서 hash-function으로 문제를 해결했다.
본 논문의 모델을 Word2Vec 패키지에 있는 skipgram 모델, cbow 모델과 비교
SGD를 negative log likelihood에 적용하여 최적화 문제를 해결한다.
skipgram model에서는 선형적으로 감소하는 step size를 사용한다.
본 논문의 모델과 word2vec 모두 동일한 파라미터를 사용한다.(300차원의 단어 벡터)
본 논문의 모델이 n-gram보다 1.5배 정도 느리다.
위키피디아 자료를 사용해 학습한다.(9개 언어)
Matt Mahoney의 전처리 스크립트 사용하여 위키피디아의 데이터를 정규화한다.
데이터셋은 무작위로 섞여있다.
다섯가지 실험을 통해 모델을 평가했다.
human judgement와 cosine similarity의 spearman's rank 상관계수를 구함으로써 평가한다.
Baseline model : sg, cbow
sisg(subword information skip gram) : n-gram 벡터의 합으로 표현(n-gram으로 subword information을 사용한 모델)
sisg- : OOV(out-of-vector)에 대해 null vector로 표현
→ 단어 추론과 관련된 것에서는 semantic(의미적) 추론보다 syntactic(구조적)인 추론에서 기존 모델에 비해 성능 향상이 뛰어난 것을 볼 수 있다.
단어 유사성 작업에서 subword information을 단어 벡터에 포함하는 단어 벡터에 대한 이전 연구와 본논문의 접근 방식을 비교
단어 간의 문자 수준 유사성을 활용하기 때문에 자주 사용하지 않는 단어도 잘 모델링할 수 있다. 따라서 사용하는 훈련 데이터의 크기에도 더욱 견고해야 한다.
이를 평가하기 위해 위키백과 말뭉치에서 전체 데이터의 1, 2, 5, 10, 20 및 50%만큼 학습하여 spearman 상관계수로 나타낸다(위 그림).
(train set의 모든 단어가 위키백과의 말뭉치에 포함되지 않음)
데이터 세트가 축소됨에 따라 어휘 부족률이 증가하고 있으므로 sisg- 및 cbow의 성능은 저하되지만 sisg은 이전에 보이지 않았던 단어에 사소한 벡터를 할당한다.
지금까진 임의적으로 3~6자 범위의 n-gram을 사용했다. n으로 어떤 숫자가 적절할 지 실험해 본다.
위 그림을 보면 영어와 독일어 모두 임의의 선택이었던 3~6에서 좋은 성능을 보인다. 최적의 길이 범위 선택은 작업 및 언어에 따라 달라지며 적절하게 조정되어야 한다.
합성어가 많은 독일어 같은 경우 larger n-grams를 사용했을 때 성능이 높은 것을 볼 수 있다.
2-gram은 하나의 적절한 문자와 하나의 위치적인 문자로 구성되기 때문에, 결합이나 축약에 해당하는 접미사를 적절하게 캡처하기에 충분하지 않아 어떤 경우보다 성능이 떨어진다.
→ Syntatic task에서는 n을 작게 할 때 성능이 좋고
→ Semantic task에서는 n을 크게 할 때 성능이 좋다.
sisg가 모든 언어에서 다른 모델(LSTM, sg)보다 좋은 성능을 보이는 것을 볼 수 있다.
사전 훈련된 단어 표현으로 언어 모델의 lookup table을 초기화하면 기준 LSTM에 대해 test perplexity가 개선된다.
특히 형태학적으로 풍부한 슬라브어족 언어(Cs(체코어), Ru(러시아어))에서 perplexity가 더 작은 것을 볼 수 있다.
→ 언어 모델링 태스크에 subword 정보의 중요성을 보여주고 형태학적으로 풍부한 언어에 이 논문의 모델의 벡터가 유용하다는 것을 보여준다.
코사인 유사도를 사용하여 주어진 단어와 가장 유사한 단어 2개를 뽑아낸 결과.
Skip-gram(sg)만 사용했을 때보다 subword information(sisg)을 사용하면 구조적으로 유사한 단어를 잘 찾는다.
한 단어에서 가장 중요한 n-gram이 형태소와 일치하는지 여부를 정성적으로 평가한다.
위의 표를 보면, 합성 명사를 많이 가지는 German같은 경우 가장 중요한 n-gram이 유용한 형태소에 잘 맞는 것을 볼 수 있다.
또한, 접두사와 접미사도 잘 표현한다.
Ex) starfish = star + fish
politeness = polite + ness>
transform = <trans + form
X축 : OOV(등장하지 않은 단어)
Y축 : 학습 데이터 셋 내 단어
X, Y축 사이의 character n-gram 유사도를 나타낸다.
빨간색 = 양의 상관관계, 파란색 = 음의 상관관계
위의 사진을 보면 ,
"ity>" - "ness>" : 명사형 접미사
"pav-" - "-sphal" : (아스팔트) 포장
"nnect, onnect" - "link" : 연결
을 알 수 있다.
본 논문에선 subword 정보를 통해 단어 표현을 학습하는 방법에 대해 알아보았다.
기존 skip-gram 기반의 단어 표현에 character n-gram의 subword 정보를 고려하였다. 이 모델은 단순하기 때문에 빠르게 훈련하며 사전 처리나 감독이 필요하지 않다.
결론적으로, 성능이 좋고 형태적 분석에 의존한 방법임을 알 수 있다.
참고 영상
https://www.youtube.com/watch?v=-F_37Kaks6g&t=1s
https://www.youtube.com/watch?v=7pDB9zqwxhs&feature=emb_logo