Fasttext 总结

Fasttext是继word2vec词向量模型提出之后提出的模型(或者说算法),因为训练速度非常快而比较受工业界关注。Fastext本身也和word2vec模型有很多相似之处,这篇博文将会简单梳理一下fasttext相关知识,关于word2vec那部分就不细讲了。

Fasttext涉及两篇论文,也分别代表了它的两个应用方向

  1. Bag of Tricks for Efficient Text Classification(201607) - 文本分类
  2. Enriching Word Vectors with Subword Information(201607)- 训练词向量

正如其名,两个方向的目标都是快,而且不损失太多质量。

Fasttext-文本分类

Fasttext应用到文本分类中,使用的CBOW的变种,和CBOW有如下区别:

  1. 使用类别标签替换中心词做预测
  2. 使用句子中所有单词作为输出,而不是滑动窗口

这两个改变都是为了做分类,第一个不需要解释,第二个做文本分类只需要考虑一次整个句子的特征就行,所以不使用滑动窗口,这也是为了降低计算复杂度。

使用霍夫曼树作为输出层(即Hierarcial Softmax),非叶子节点上的向量为二分类提供计算,叶子节点对应的是所有类别(而不是词汇表所有词的向量)。

模型开始训练时,词向量(参数)随机初始化,结束后保存起来用于预测就行,我们目的是分类,而不是词向量。

Fasttext模型的输入不仅仅是针对每个单词,并且加入了词序信息,词序信息通过n-gram的形式加入。n-gram对应的单位是word,而不是char。

Fasttext-获取词向量

使用负采样的skip-gram,将每个中心词看作子词的集合,并学习这些子词的词向量。

子词(subword)是论文核心,以中心词为where为例,设定子词大小为3,那么子词集合分为两部分,整词和子词。

整词即<where>
子词<wh, whe, her,ere,re>
最终<wh, whe, her,ere,re, where>

背景词则直接使用整词。

输入层使用子词(子词+整词),输出层使用整词。

如果OOV,则使用子词的向量和表示该词,这也是subword的一个优势所在。

fasttext在做文本分类的时候,一般使用CBOW;在训练词向量的时候,一般使用skip-gram

posted @ 2020-09-10 17:04  从流域到海域  阅读(163)  评论(0编辑  收藏  举报