Press "Enter" to skip to content

FastText 的模型压缩

最近又重新回去读 Fasttext 的代码,对模型压缩的部分比较感兴趣,仔细看了下

 

在 Fasttext 中分类模型是把 句子中每个词的 word embedding 求平均再做 Softmax 分类 , 所以参数模型的参数有两部分,

 

一部分是 Word Embedding , 另一部分是 Softmax 分类器中的权重,FastText 的压缩主要有两部分组成,第一部分是对 vocab 进行剪枝,另一部分是 Product Quantizers.

 

vocab 剪枝

 

在训练训练分类去的时候 FastText 为了解决 OOV 的问题加入了字符的 ngram, 由于通常词典本身就很大,加上 ngram 可能几十万的词表,但是很多词并不会对分类任务贡献太多信息,所以有必要进行筛选,这一步就相当于特征选择,选择那些对分类贡献更多的词 同时为了不损失性能选择的词要能覆盖到尽量多的文档,换句话说文档中没有词被选中情况尽量少出现。

 

Product Quanntizers

 

Product Quanntizers 用来模型压缩和近似搜索。假如给定一个向量需要找到1百万向量中和当前向量距离最小的那个,遍历计算可能是耗时的,为了做到快速有很多方法, Product Quanntizers 就可以用来最近邻搜索。其想法就是把原始向量分成多个子空间,然后对每个子空间进行量化。具体的最法就是对每个子空间做 Kmeans 选出 K 个中心点,然后其他向量就可以编码成子空间中心点组合。

 

下面的图来自 博客

 

先把每个向量分成 8 个子空间,1024 维的向量分成 8个 128 维子向量

 

然后在子向量空间做 kmeans 然后权重矩阵就编码成这些子向量空间中心点的组合。

 

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注