fastText模型是俄语单词最有效的矢量表示之一。但是,由于该模型令人印象深刻(几GB)的大小,其实际使用受到了影响。在本文中,我们展示了如何在不损失质量过多(3-4%)的情况下将fastText模型从2.7 GB减少到28 MB。剧透:量化和特征选择效果很好,但是矩阵扩展却不行。我们还发布了用于此压缩的 Python 程序包,以及用于俄语单词的紧凑模型的示例。

为什么和那是什么
, 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.