FastText

FastText 具有 2 个用途,一是训练词向量,二是实现对文本的分类。两个用途都是基于基于 CBOW 的方式完成,即首先将输入的词向量或者 n-gram
相加,然后输入神经网络训练

什么是 FastText ?

  • FastText 具有 2 个用途,一是训练词向量,二是实现对文本的分类。两个用途都是基于基于 CBOW 的方式完成,即首先将输入的词向量或者 n-gram 相加,然后输入神经网络训练

FastText 如何训练词向量?

  • 相对与 word2vec 来说增加了 subwords 特性。subwords 其实就是一个词的字符级的 n-gram。例如单词 "hello",长度至少为 3 的 char-level 的 ngram 有”hel”,”ell”,”llo”,”hell”,”ello” 以及本身”hello”。每个 n-gram 都可以用一个 dense 的向量 zg 表示,于是整个单词”hello” 就可以表示表示

Vhello=gϕzgTvcV_{hello}=\sum_{g\in\phi}z_g^Tv_c

  • 拆成若干个 char-level 的 ngram 表示有什么好处呢?答案是:丰富了词表示的层次。例如:”english-born” 和”china-born”,从单词层面上看,是两个不同的单词,但是如果用 char-level 的 n-gram 来表示,都有相同的后缀”born”。因此这种表示方法可以学习到当两个词有相同的词缀时,其语义也具有一定的相似性。这种方法对英语等西方语言来说可能是奏效的。因为英语中很多相同前缀和后缀的单词,语义上确实有所相近。但对于中文来说,这种方法可能会有些问题。比如说,” 原来” 和” 原则”,虽有相同前缀,但意义相去甚远。可能对中文来说,按照偏旁部首等字形的方式拆解可能会更有意义一些

FastText 如何实现文本分类?

  • W1 到 Wn 表示 document 中每个词的 word embedding 表示。文章则可以用所有词的 embedding 累加后的均值表

hdoc=1ni=1nwih_{doc}=\frac1n\sum_{i=1}^nw_i

  • 对比 word2vec 中的图 2 中的 CBOW 模型,两个模型之前非常的相似。不同之处在于,fasttext 模型最后预测的是文章的类别 label,而 CBOW 模型预测的是窗口中间的词 w (t),Fasttext 是有监督的学习,CBOW 是无监督的学习。另外,CBOW 模型中输入层只包括当前窗口内除中心词外的所有上下词汇,而 fasttext 模型中输入层是文章中的所有词

FastText 的训练?

  • 当类别数较少时,直接套用 softmax 层并没有效率问题,但是当类别很多时,softmax 层的计算就比较费时。为了加快训练过程,Fasttext 同样也采用了和 word2vec 类似的方法。一种方法是使用 hierarchical softmax,当类别数为 K,word embedding 的维度大小为 d 时,计算复杂度可以从 O (Kd) 降到 O (dlog (K))
  • 层 softmax 的基本思想:使用树的层级结构替代扁平化的标准 softmax,使得在计算 P (y=j) 时,只需要计算一路路径上的所有节点的概率值即可,不需在意其他的节点。树的结构是根据类别的频数构造的霍夫曼树。K 个不同的类别组成所有的叶子节点,K-1 个内部节点作为内部参数,从根节点到某个叶子节点和边构成一条路径,路径的长度表示为 L (yj)

参考:

  1. Bag of Tricks for Efficient Text Classification 论文阅读及实战 - 简书