mayabot / mynlp

一个生产级、高性能、模块化、可扩展的中文NLP工具包。(中文分词、平均感知机、fastText、拼音、新词发现、分词纠错、BM25、人名识别、命名实体、自定义词典)
https://mynlp.mayabot.com/
Apache License 2.0
678 stars 89 forks source link

压缩模型是否会导致指标变差? #25

Closed codelast closed 4 years ago

codelast commented 4 years ago

FastText qmodel = model.quantize(2, false, false);

我试了一下,Precision 和 Recall 比不压缩的模型都差了一点。 另外,我没有观察过,这样压缩大概能减小百分之几十的内存占用呢?

jimichan commented 4 years ago

你压缩完成后,再保存为一个新的模型文件,模型文件大小规模你可以看的出来。 压缩肯定会有一点点损失的,不过可以忽略

codelast commented 4 years ago

@jimichan 感谢回复。 如果单从模型文件大小来看的话,我试了一个,压缩前:862 MB,压缩后:112 MB。 就是压缩花的时间有点长,3分多钟。

codelast commented 4 years ago

@jimichan 另外还有个问题, quantize(2, false, false) 这里面,参数怎么设置,有文档说明吗,对不同的模型,2是否合适?

jimichan commented 4 years ago

参照官方原版 dsub: Int = 2, qnorm: Boolean = false, qout: Boolean = false

-qnorm quantizing the norm separately [0] -qout quantizing the classifier [0] -dsub size of each sub-vector [2]

影响最大是dsub,表示子空间的维度,越大压缩模型越小,误差越大 ,如果你模型的维度是100,那么dsub一定要被100整除才行。

你可以测试一下你的模型在dsub增加到多少是,p和r开始严重下降。

另外压缩后,你把模型另存。生成环境直接使用压缩模型即可,所以压缩时间长度无所谓。 另外压缩操作需要消耗大的内存

codelast commented 4 years ago

@jimichan 感谢回复