如何将fastText模型压缩100次

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:
        #       
        # return model.vectors[word]
        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.


All Articles