Le modèle fastText est l'une des représentations vectorielles des mots les plus efficaces pour la langue russe. Cependant, son utilisation pratique souffre en raison de la taille impressionnante (plusieurs gigaoctets) du modèle. Dans cet article, nous montrons comment réduire le modèle fastText de 2,7 gigaoctets à 28 mégaoctets sans trop perdre en qualité (3-4%). Spoiler: la quantification et la sélection des fonctionnalités fonctionnent bien, mais pas les extensions de matrice. Nous publions également un package Python pour cette compression et des exemples de modèle compact pour les mots russes.

Pourquoi et de quoi s'agit-il
, fastText: fastText , . unsupervised — n-. navec — glove- . .
: ? , — , , (, 300-), - . , ( ). , , , , , . , , (, ) . , , "" .
— , ELMO BERT. , fastText. fastText' — ( , ) n- ( ) . , , , , . fastText , n- .
fastText Facebook AI Research. :
def embed(word, model):
if word in model.vocab:
result = model.vectors_vocab[word]
else:
result = zeros()
n = 1
for ngram in get_ngrams(word, model.min_n, model.max_n):
result += model.vectors_ngrams[hash(ngram)]
n += 1
return result / n
: — "" ( ), n-. , , ,
— -
,
,
, n-. , , , , .
fastText : fastText ( Python ), Gensim ( Python). , Gensim.
, Gensim , . model.vectors_vocab
model.vectors_ngrams
model.vectors
, "" , n-. model.vectors_vocab
, model.vectors_ngrams
.
FastText ( ) . : , n-, . n- , , fastText hashing trick: , n-, n-. , ( , ), . , ruscorpora_none_fasttextskipgram_300_2_2019 RusVectores 2 , 330 .
, — n- — fastText . 2 500 , . " + n- ", ; . , , . " ", . 16 2 , 94% , n-, ( gensim
).
, fastText, — " " , ( , ) . "" n- . (, , self-supervized) .
, . fasttext — 300. (SVD), n*300
n*k
k*300
. k
— . ( , , ), , ( 300 — ).
— "" , . 32- . 16-, , . float' Python , , . 8 256 . , 256 , , . ( ) , .
, 300 32- 300 8- . ? , , — ! , 300- 100 3- , 3- . , , 3- , 3- . product quantization, . , navec , glove- , 25 50 . , fasttext . - .
. ruscorpora_none_fasttextskipgram_300_2_2019 c 300- , 165K 2000K n- (n 3 5), . " " 2.7 . gensim, ( gensim==3.8.1
). , n- ( , ).
: , adjust_vectors
, n-. , . ruscorpora_none_fasttextskipgram_300_2_2019
gensim
, - , adjust_vectors
. : intrinsic evalution ( ) . . , , , , gensim
. : , , .
, sys.getsizeof
( , numpy
-), numpy.ndarray.nbytes
( , ), gc.get_referents
"" . , ( save
gensim
, , , pickle
) , , , .
, , . 80 , ( 10 ) . pymorphy2, , ; . , 54 fastText, 26 — . .
, . intrinsic evaluation: , . , : , , NER, .. , .. . .
intrinsic : hj
, ae
rt
RUSSE, simlex965
( sl
) — RusVectores ( ). hj
sl
, . ae
rt
, 2*ROC_AUC-1
, ROC AUC . , ae
rt
precision, . .
: vectors_vocab
( , ), vectors
vectors_ngrams
32 16 . , 2.7 1.28 . , . n- (1.14 ) (136 ).
: TruncatedSVD
scikit-learn
. : 8% . .
, , . navec
, ( ). : ( float int) 99.6% . , 96%. . : , , (!) , 256 . 12 ( 25 ), 94 , 75%. .
— n-, .. . , . , 128 (x10, 16- ) 95%, 25 — 82%. , .
n- ? . , . : - , n- ( ), . ( ) , "" 450 ( ). 45- 93.6% .
, : , fastText-, " " . (20 , 100 n-, 100- ), 28 ( 100 !), 96.15% . . , 36 .
. — , — . , : . , , , n-.

, "" : - .
( 36 15 -, ). , , .

!
RAM 80 . ?
, , . . , , n- . , (.. n-) , . , , , , , n- — , .

, , . .

, 80 . : . , , , — n-, , . .

, intrinsic evaluation. , . — n-. , OOV , -.

, intrinsic evaluation . , , . , , , intrinsic evaluation .

, , .
Fasttext — , , -, , . — — 100 , . 96% , 3% .
PyPI. 13, 28, 51 180- — ruscorpora_none_fasttextskipgram_300_2_2019 RusVectores.
. , -, ODS.