fasttext源码学习(2)–模型压缩
前言
fasttext模型压缩的很明显,精度却降低不多,其网站上提供的语种识别模型,压缩前后的对比就是例证,压缩前126M,压缩后917K。太震惊了,必须学习一下。看文档介绍用到权重量化(weight quantization)和特征选择(feature selection),下面结合代码学习下。
说明:文章中代码皆为简化版,为突出重点,简化了逻辑,原版代码需到官方网页下载。
一 特征选择
一开始以为fasttext会用到比较复杂的特征选择算法,直到看到代码才差点闪了腰。。。fasttext用的就是kbest,剩下的全砍掉,就是这么简单直接。
void FastText::quantize(const Args& qargs, const TrainCallback& callback) {
if (qargs.cutoff > 0 && qargs.cutoff < input->size(0)) {
auto idx = selectEmbeddings(qargs.cutoff);
dict_->prune(idx); // 剪枝(词典重新计算)
if (qargs.retrain) { // 重新训练
startThreads(callback);
}
}
}
std::vector<int32_t> FastText::selectEmbeddings(int32_t cutoff) const {
std::shared_ptr<DenseMatrix> input =
std::dynamic_pointer_cast<DenseMatrix>(input_);
Vector norms(input->size(0));
input->l2NormRow(norms); //


9862

被折叠的 条评论
为什么被折叠?



