Model fastText adalah salah satu representasi vektor kata yang paling efektif untuk bahasa Rusia. Namun, penggunaan praktisnya menderita karena ukuran model yang mengesankan (beberapa gigabyte). Pada artikel ini kami menunjukkan bagaimana Anda dapat mengurangi model fastText dari 2,7 gigabita menjadi 28 megabita tanpa kehilangan terlalu banyak dalam kualitasnya (3-4%). Spoiler: kuantisasi dan pemilihan fitur berfungsi dengan baik, tetapi ekspansi matriks tidak. Kami juga menerbitkan paket Python untuk kompresi ini dan contoh-contoh model ringkas untuk kata-kata Rusia.

Mengapa dan tentang apa itu?
, 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.