Search
Login
🅰️

Fasttext : Enriching Word Vectors with Subword Information

Created
2022/02/06
Editor
Tags
NLP
논문 : Fasttext : Enriching Word Vectors with Subword Information 저자 : Piotr Bojanowski, Edouard Grave, Armand Joulin, Tomas Mikolov

논문 선정 이유

본 논문은 Word2Vec에서 제시했던 skip-gram을 확장시켜, 하위단어를 문자 n-gram으로 표현한 후 이를 sum하여 형태소를 보존하는 방식인 Fasttext를 제시합니다. 이전에 공부했던 Word2Vec의 경우, 각 단어를 하나의 벡터로 표현하여 단어의 morphology(형태소)를 고려하지 않는다는 단점이 존재합니다. 이에, Fasttext에서는 word2vec의 어떻게 확장시켜 내부 구조 정보를 담아 내려 했는지 알아보고자 본 논문을 선택하였습니다.

Abstract

유명한 기존 모델들의 경우 각 단어마다 다른 벡터를 할당 하여, 단어의 형태를 무시합니다. 이러한 문제점을 해결하기 위해 해당 논문에서는 Skip-gram을 기반으로 하여 각 단어를 character n-gram 벡터의 조합으로 표현하였습니다.
해당 방식은 큰 corpora(단어 말뭉치)에 대해서도 학습 속도가 빠르고, 학습 데이터에 등장하지 않은 단어도 표현이 가능해졌습니다. 또한, 9개 언어에 대해 유사도 및 추론 task를 통해 평가하였더니, SOTA를 달성하였습니다.

Introduction

마디없이 단어를 표현하는 representation는 전형적으로 동시발생확률을 이용하여, 라벨이 없는 큰 corpora에서 파생됩니다. 분포의미학에서는 이러한 방식의 특징을 공부해오고 있습니다. neural network 커뮤니티에서는, 순방향 신경망을 이용한 word embedding 방식(좌우 각각 2개의 단어들에 근거함)을 제안했습니다. 더 최근에는, 매우 큰 corpora에 대하여 효율적으로 학습하기 위해 간단한 log-bilinear 모델을 제시하였습니다.
위와 같은 기술들은 대부분 vocabulary 내 각 단어를 parameter를 공유하지 않고 분리된 vector로 표현합니다. 특히, 단어들의 내부 구조를 무시하는데, 이는 Turkish나 Finnish와 같이 형태학적으로 풍부한 단어들에게 굉장히 큰 한계점이 됩니다. 예를 들어, French나 Spanish에는 동사에 40개 이상의 다른 형태를 가지고 있고, Finnish는 15개의 명사 형태가 존재합니다. 이러한 언어들은 학습에 쓰이는 corpus에는 거의 나타나지 않는 단어 형태들을 가지고 있어, 좋은 representation을 학습하기가 어렵습니다. 많은 단어의 형태가 규칙을 따르고 있기 때문에, 문자 수준의 정보를 활용하면 벡터 표현을 개선시켜 형태학적으로 풍부한 단어를 표현하는 것이 가능해집니다.
해당 논문에서는, character n-gram을 통해 representation을 학습하고, n-gram vector의 합으로 단어를 표현합니다. 우리는 skip-gram 모델의 확장을 소개하고, 하위 단어의 정보를 고려합니다. 다른 형태를 띄는 9개의 언어에 대해 모델을 평가하고, 장점을 소개합니다.

Model

‘형태’를 고려하면서 word representation을 학습하는 모델을 제안합니다. 하위단어 unit을 고려하면서 형태를 만들고, 이러한 character(알파벳) n-gram의 합으로 단어를 표현합니다. 단어 vector를 학습하는데 사용하는 프레임워크와 하위단어 모델을 살명하고, character n-gramdml dictionary를 어떻게 활용하는지 설명하겠습니다.

1. General model (= word2vec)

먼저, skip-gram을 짚고 가야합니다.
사이즈가 W인 vocabulary가 주어졌을때, 각 단어 w의 index는 {1,...,W{{1,...,W}}} 이고, 해당 모델의 목표는 각 단어 w의 벡터 표현을 학습하는 것입니다. word representation은 해당 문맥에서 나타나는 단어들을 잘 예측하기 위해 학습됩니다.
공식으로 표현하면, skip-gram의 목표는 단어 wtw_t가 주어졌을 때 문맥 단어 wcw_c에 어떤 단어가 와야지 확률이 가장 높아지는 지 최적화하는 것입니다.
t=1TcCtlogp(wcwt)\sum^T_{t=1} \sum_{c \in C_t} log p(w_c | w_t)
CtC_t: wtw_t를 둘러싸고 있는 단어들의 index set(중심 단어가 아닌 문맥 단어)
TT: corpus 내 단어 수
context 단어를 가지고 확률을 표현하는 방법 중 하나는 softmax 함수를 이용하는 것입니다.
p(wcwt)=es(wt,wc)j=1Wes(wt,j)p(w_c | w_t) = {e^{s(w_t, w_c)} \over \sum ^W _{j=1} e^{s(w_t, j)}}
s : (word,context)쌍을 매핑하는 scoring function
분자 : wtw_t가 주어졌을 때 실제 정답인 wcw_c가 나올 확률
분모 : wtw_t가 주어졌을 때 다른 모든 단어들이 등장할 확률의 합
그러나, softmax함수는 wtw_t가 주어졌을 때 wcw_c 하나에 대해서만 예측하기 때문에, wcw_c 하나를 예측하기 위해 모든 단어를 고려하여 계산 효율이 떨어진다는 단점이 있어 본 논문의 케이스와 잘 맞지 않습니다. 따라서, softmax 대신 negative sampling을 사용합니다.
context words를 예측하는 multi label classification 문제를 독립적으로 context words 인지, 아닌지를 예측하는 binary classification task로 바꿀 수 있습니다. tt 위치에 있는 단어에 대해 모든 context words를 positive example로 고려하고, dictionary로부터 랜덤하게 negative example을 추출합니다. cc 위치에 있는 context에 대하여, binary logistic loss를 이용하여 다음과 같은 negative log-likelihood를 계산할 수 있습니다.
log(1+es(wt,wc))+nNt,clog(1+es(wt,n))log(1+e^{-s(w_t, w_c)}) + \sum _{n \in \mathcal{N}_{t,c}}log(1+e^{s(w_t, n)})
Nt,cN_{t,c} : vocabulary에서 추출된 negative samples
좌측: wtw_t가 주어졌을 때, wcw_c가 정답이라면 두 벡터의 유사도를 높이고, 합이 최대화 된다.
우측: wtw_t가 주어졌을 때, 실제 정답이 아닌 n에 대해서는 두 벡터의 유사도를 낮추고, -1이 곱해져 있어 합이 최소화 된다.
:xlog(1+ex)ℓ : x \mapsto log(1 + e^{-x})
위와 같은 형식을 이용하여 다시 표현하면 아래와 같습니다.
t=1T[cCt(s(wt,wc))+nNt,c(s(wt,n))]\sum ^{T} _{t=1} \Bigg[ \sum _{c \in C_t} ℓ(s(w_t, w_c)) + \sum _{n \in \mathcal{N}_{t,c}} ℓ(-s(w_t, n))\Bigg]

2. Subword model

각 단어가 분리된 벡터 표현을 사용하면서, skip-gram 모델은 단어의 내부 구조를 무시합니다. 우리는 내부 정보를 고려하기 위해 다른 scoring function s를 제시합니다.
각 단어 w는 문자 n-gram의 집합으로 표현됩니다. 단어 처음과 끝에 <,>를 추가하여 접두사와 접미사를 다른 문자 sequence와 구분하기로 합니다. 또한, 우리는 n-grams 집합에 단어 w 자신도 추가시킵니다.
e.g. where라는 단어에서 n = 3 일 때, 단어 n-gram :
<wh, whe, her, ere, re>
special sequence :
<where>
단어 her에서 나온 <her>과 where에서 나온 <her>은 다릅니다
Gw{1,...,G}\mathcal{G}_w \subset \{1, ..., G\}
단어는 해당 단어에 대한 n-gram의 합으로 표현할 수 있고, scoring function은 아래와 같습니다.
s(w,c)=gGwzgvcs(w, c) = \sum _{g \in \mathcal{G}_w}z_g^\top v_c
zgz_g : 각 n-gram g에 대한 벡터 표현
gwg_w : 단어 w에서 나올 수 있는 모든 n-gram 집합
vcv_c : 문맥 단어 wcw_c 의 벡터
단어들끼리 representation의 공유도 가능해지고, 이로써 생소한 단어에 대해서도 믿을만한 representation을 학습할 수 있게 되었습니다. 예를 들어, eats, eating과 같이 eat이라는 원래 단어에서 파생된 단어들의 표현을 공유하고 학습시켰다고 할 수 있습니다.
gg를 만드는 것은 데이터의 크기를 크게 만드는 일이긴 합니다. 저자는 메모리 사용량을 줄이고 계산을 효율적으로 하기 위해, n-gram들을 1부터 K까지의 정수로 매핑하는 해싱함수를 사용하였습니다. Fowler-Noll-Vo 해싱함수를 사용하였고, K를 2.1062.10^6 이하로 설정하였습니다. 궁극적으로, 단어는 word dictionary에서 자신의 Index와 그 단어가 가지고 있는 hashed n-gram의 집합으로 표현됩니다.

Experiments

Baseline

본 논문의 모델을 word2vec 패키지의 skip-gram, CBOW(Continuous Bag-Of-Words)과 비교합니다.

Optimization

앞에서는 negative log likelihood에 SGD(stochastic gradient descent)를 적용시켜 최적화문제를 해결합니다. 베이스라인인 skip-gram에서는, 선형 감소하는 step size를 사용합니다.T개의 단어가 포함된 training set과, data 전반에 대해 통과하는 수가 P와 동일하다고 주어졌을 때, 시간 t에서의 step size는 다음과 같습니다.
γ0(1tTP)\gamma_0(1 - {t\over TP})
γ0\gamma_0 : fixed parameter
최적화를 병렬적으로 수행하기 위해, Hogwild를 사용합니다. 모든 쓰레드는 파라미터를 공유하고, 비동기적인 방식으로 벡터를 업데이트 합니다.

Implementation details

word vector의 차원은 300입니다. positive example에 대해, uni-gram(n=1)의 빈도에 대해 제곱근한 값과 비례하는 확률로 랜덤하게 5개의 negatives를 샘플링하였습니다. context window size의 경우 c로 설정하였는데, c의 값은 1과 5 사이에서 균일하게 샘플링하였습니다. 가장 빈번한 단어들을 일부만 취하기 위해, 우리는 rejection threshold10410^{-4}로 설정하였습니다. word dictionary를 만들 때, 단어가 training set에 적어도 5번 이상은 나타나도록 하였습니다. step size의 γ0\gamma_0skip-gram은 0.025, 논문에서 제시한 모델과 CBOW는 0.05로 설정하였습니다. 이는 word2vec 패키지의 디폴트 값이고 해당 모델에도 잘 적용됩니다.
English 데이터에 대해 세팅할 때, 본 논문의 모델은 약 1.5배 느리게 학습됩니다. 우리의 모델은 C++에서 실행되고, 공공으로 사용가능합니다.

Datasets

Wikipedia 데이터에 대해 모델을 학습하였습니다. 총 9개의 언어(Arabic, Czech, German, English, Spanish, French, Italian, Romanian, Russian)로 구성되어 있습니다.
Matt Mahoney의 전처리 스크립트를 이용하여 위키피디아 데이터를 정규화하였습니다. 모든 데이터는 무작위로 섞여있고, 5개씩 패스하면서 학습을 시켰습니다.

Results

5개의 experiments를 통해 모델을 평가했습니다. 본 논문의 모델은 sisg(Subword Information Skip Gram)로 나타냈습니다.

1. 사람의 유사도 평가와 단어 벡터 유사도의 correlation 비교

cbow와 skipgram(cbow and sg)은 학습데이터에 나타나지 않은 단어에 대해서 단어 벡터를 도출할 수 없기 때문에 이 단어에 대해서는 null vector(sisg-)를 만들었습니다. 본 논문의 모델 sisg(Subword Information Skip Gram)은 subword 정보를 사용하기 때문에 모르는 단어(OOV)에 대해서도 타당한 단어벡터를 나타낼 수 있습니다.
English WS353을 제외하고 모든 데이터에서 baseline보다 sisg가 성능이 좋은 것으로 나타났습니다. 또 모르는 단어를 단어 벡터로 나타낸 sisg가 null로 나타낸 sisg-보다 같거나 더 좋은 성능을 보여줘 subword 정보의 장점을 증명해줍니다.
Arabic, German 그리고 Russian이 다른 언어보다 더 효과적인 것으로 나타났습니다. German은 4가지 Russian은 6가지 문법적 어형변화를 보이고 Russian은 합성어가 많기 때문에 형태론적 정보가 중요하기 때문인 것으로 보입니다.
English에서 Rare Words dataset (RW)는 좋은 성능을 보이지만 WS353에서는 낮게 나타나냈습니다. 이 데이터 셋은 자주 등장하는 단어로 구성되어있어 subword 정보가 중요하지 않았기 때문입니다.

2. 유추 문제 Word Analogy

A : B = C : D의 관계 에서 모델을 통해 D를 예측하는 것이 목표입니다. 학습데이터에 나타나지 않은 단어가 포함된 questions은 제외했습니다.
syntactic information에서 뚜렷한 성능 개선을 보여줍니다. 대조적으로 semantic에서는 성능 개선이 나타나지 않았습니다. 그러나 이후에 나올 실험(5)에서 보여주듯이 character n-gram의 길이 조정을 통해서 semantic에서도 성능을 개선할 수 있었습니다. 형태론적 정보가 풍부한 Czech(CS) 그리고 German(DE)에서 우수한 성능을 보였습니다.

3. Comparison with Morphological Representations

RNN, cbow, morphological transformation of Soricut and Och, log-bilinear language 모델을 본 논문에서 제시한 모델 sisg와 유사성 task에 대해 비교했습니다. 형태론적 정보에 기반한 모델로 우수한 성능을 가지고 있습니다.
형태론적 변환을 사용한 Soricut and Och(2015)보다도 좋은 성능을 보여줍니다. Soricut and Och(2015)에서는 noun compounding을 하지 않았기 때문에 특히 German에서 큰 개선을 보여줍니다.

4. Effect of the Size of the Training Data

우리는 단어간의 character-level 유사성을 이용하기 때문에 자주 등장하지 않는 단어에 대해서도 잘 학습시킬 수 있습니다. 따라서 학습데이터의 사이즈에 robust 해야합니다. OOV의 비율은 데이터셋이 줄어들수록 증가할 것입니다. 따라서 sisg-와 cbow는 성능이 상대적으로 낮을 것 입니다. 단어 사이즈에 의존하는지 평가하기 위해 cbow 모델과 비교했습니다.
결과, 모든 데이터셋에서, 모든 사이즈에서 sisg가 높은 성능을 보입니다. cbow 모델은 데이터 사이즈가 증가할 수록 좋은 성능을 보이는 반면에 sisg는 데이터 사이즈의 증가가 항상 성능 증가를 불러오지는 않았습니다. 
아주 작은 학습데이터셋에도 sisg는 높은 성능을 보였습니다. German GUR350에서 sisg가 데이터셋의 5%만 사용했을 때 성능은 66으로 cbow로 전체 데이터셋에서 학습한 성능 62보다 높았습니다. 또한 English RW에서 sisg가 데이터셋의 1%만 사용했을 때 성능은 45으로 cbow로 전체 데이터셋에서 학습한 성능 43보다 높았습니다. 따라서 제한된 사이즈의 데이터 셋에서도 단어벡터가 학습될 수 있고 이전에 등장하지 않은 단어에 대해서도 여전히 잘 학습된다는 것을 의미합니다. 일반적으로 활용에 필요한 relevent task-specific data는 양이 많지 않은데, 이 모델을 통해 적은 학습데이터로 학습할 수 있다는 것은 큰 장점입니다.

5. Effect of the Size of N-grams

앞서 모델에서 설명했듯이 n-gram의 기본 size을 3-6으로 설정했습니다. n size가 어떤 영향을 주는지 알아보기 위해 실험을 진행한 결과 다음과 같습니다.
English 그리고 German에서 3-6은 합리적인 선택이었음을 보여줍니다. 범위의 길이는 task와 language에 따라 임의적으로 조정해야합니다. 열5, 6에서 가장 좋은 결과가 나타났습니다. long n-gram을 포함하는 것이 중요하다는 것을 보여줍니다. 유추 task에서 longer n-grams가 semantic 유추를 도와줍니다.
n-gram을 사용할 때, 기호 <, >를 사용했기 때문에 n = 2로 하면 하나는 proper character이고 다른 하나는 positional one인 것이 생기기 때문에 2보다는 커야한다는 것을 알 수 있습니다.

6. Language Modeling

without using pre-trained word vectors (LSTM), with pre-trained word vectors without subword information(sg), 그리고 논문에서 제시한 모델(sisg)을 비교했습니다.
pre-trained word vectors일 때 test perplexit가 개선되었습니다. subword를 사용했을 때, plain skipgram model보다 더 낮은 test perplexit을 보여줍니다.

Qualitative analysis

1. 자주 등장하지 않는 단어에 대한 Nearest Neighbors

코사인 유사도를 통해 자주 등장하지 않은 단어에 대한 Nearest neighbors는 다음과 같습니다. 베이스라인인 skipgram보다 본 모델(sisg)이 더 합리적으로 주변 단어가 나타났습니다.

2. Character N-grams and Morophemes

각 단어의 중요한 n-gram을 찾고자 합니다. w은 단어의 n-grams의 합이고 각 n-gram g에 대해서 restricted representation을 정의합니다.
u_w와 u_w/g간의 코사인 값의 오름차순으로 n-gram을 순위를 정합니다. ranked n-grams는 다음 표로 보여줍니다.
예를 들어 Autofahrer (car driver)의 중요한 n-grams는 Auto (car) 그리고 Fahrer (driver)로 합리적인 결과입니다. 또한 starfish은 star과 fish, lifetime은 life와 time이 도출되었습니다.

3. Word Similarity for OOV Words

본 논문의 모델은 OOV에 대한 단어 벡터를 만드는 것이 가능합니다. OOV 단어의 n-grams 평균으로 vector representation을 구합니다. 이 단어 벡터가 단어의 의미를 잘 나타내는지 평가하기 위해 하나의 OOV 단어와 학습데이터 내의 단어를 pair로 두 단어간의 코사인 유사도를 구했습니다.
다음 그림에서 x축이 OOV 단어입니다. 빨간색은 양의 코사인, 파란색은 음의 코사인을 의미합니다.
단어 rarity와 scarceness에서 -ness와 -ity가 높은 유사도를 보입니다. 또한 단어 preadolescent는 -adolesc-라는 subword 덕분에 단어 young과 잘 매치됩니다. 따라서 OOV 단어도 의미를 잘 나타내는 단어벡터를 만들 수 있습니다.

Conclusion

Fasttext는 character n-grams과 skipgram을 결합한 모델입니다. subword 정보를 통해 단어벡터를 나타냅니다. 이 모델은 학습을 빠르게 하고 사전처리나 감독이 필요하지 않다는 장점이 있습니다. 이전에 학습되지 않은 단어에 대해서도 좋은 결과를 보여줍니다. 결론적으로 다양한 task에서 베이스라인을 뛰어넘는 성능을 보여주고 형태론적 정보를 포함하는 모델입니다.

References

Enriching Word Vectors with Subword Information (Piotr BojanowskiEdouard GraveArmand JoulinTomas Mikolov) https://arxiv.org/abs/1607.04606
Efficient Estimation of Word Representations in Vector Space (Tomas Mikolov, Kai Chen, Greg Corrado, Jeffrey Dean) https://arxiv.org/abs/1301.3781
Distributed Representations of Words and Phrases and their Compositionality (Tomas MikolovIlya SutskeverKai ChenGreg CorradoJeffrey Dean) https://arxiv.org/abs/1310.4546
[자연어처리][paper review] FastText: Enriching Word Vectors with Subword Information https://supkoon.tistory.com/15

이전 글 읽기