FastText

FastText是facebook开源的一个词向量与文本分类工具 ,其最大的优点就是快,同时不失精度。 此算法有两个主要应用场景:

  • 文本分类
  • 词向量训练

FastText原理简介

  • 模型简单,其结构有点类似word2vector中的CBOW架构,如下图所示。FastText将句子特征通过一层全连接层映射到向量空间后,直接将词向量平均处理一下,就去做预测。
  • 使用了n-gram的特征,使得句子的表达更充分。笔者会在实战中详细介绍这部分的操作。
  • 使用 Huffman算法建立用于表征类别的树形结构。这部分可以加速运算,同时减缓一些样本不均衡的问题。

实战

  • n-gram特征增广:使用了unigram和bigram的特征

  • 数据预处理:将句子特征padding成300维的向量,同时对label进行onehot编码。

  • 定义模型:

    • 使用了一个简单的Embedding层(其实本质上就是一个Dense层),
    • 然后接一个GlobalAveragePooling1D层对句子中每个词的输出向量求平均得到句子向量,
    • 之后句子向量通过全连接层后,得到的输出和label计算损失值。

这下面是模型结构的的可视化输出,我们可以看到,只用了unigram和bigram的特征词典的维度已经到了5百多万(样本取得少)。
FastText- 模型训练
FastText

  • 词向量

其中Embedding层的weight的形式和下图中间的 W矩阵一样,每行对应着一个词的词向量。通过简单的index索引就可以得到训练好的词向量。
FastText

相关文章: