读FastText文章

    这篇博客主要针对Bag of Tricks for Efficient Text Classification文章的一些理解。主要是介绍FastText算法是速度多块,通过标签预测和情感分析两个任务来说明。

 

1. 模型的结构,文章中给出了这样的图

上图注解中提到,x1,x2,,xN都是一个词向量,那么hidden是对N个词的词向量求平均,那么具体怎么计算呢? 

这个图不是非常直观能看出如何计算的,文章中提到了结构和cbow很类似,于是找到了介绍word2vec的文章,见下图

这里说明几点:

  • V表示词典的大小,即一个词的embedding的长度
  • C表示词序列的长度
  • W对每个词是共享的,这点要注意

Hidden layer怎么算呢? 文章中也给出公式了

x1,x2,xC均为词向量, V*1 , W是V*N维,N表示隐藏层的神经元的个数,所以h的结构为N*V*V*1=N*1 

对于FastText算法而言,隐藏层的平均同这里是一致的;

 

2. 损失函数

  • 最小化损失函数
  • A就是input layer 到hidden layer的矩阵,也就是word2vec中的W
  • B就是hidden layer 到 output layer的矩阵,也就是word2vec中的W‘
  • 训练中采用SGD ,学习率是线性衰减的
  • 这里的xn表示的第n个document的特征集 ,N表示文档的数量,yn表示标签

 

3.层次SoftMax

如果要分的类是非常非常多的,比如cbow中,需要根据上下文的词预测中间词,中间词的类别是巨大的,等同于词典的数量,

所以word2vec中用到了softmax,那么fasttext中也用到该技术

  • 将所有的类别作为二叉树的叶子节点,共有V个类,那么二叉树的内部节点就有V-1个;(这种说法应该针对的是完全二叉树)
  • 对于每个叶子节点,都有唯一的从根节点到该叶子节点的路径
  • 叶子节点可以用路径来替代

目标函数转变为:

  • 要求的参数是,这个参数对于每个叶子节点也是共享的,其中n(w,j) 中 j表示到w叶子节点要走的第j步
  •  这个东西看上去很复杂,实际意思就是走左边的时候,取值为1,走右边,取值为-1
  • L(w) 就是走到w的长度,例如L(w2)为4,实际走了三步,所以目标函数中 L(w) 需要 -1  =>>> L(w)-1
  • 拿w2举例,目标函数为
  • 采用对数似然,那么目标函数就转变为
  • 经过一些列推导,得到参数的更新
  • 好处:训练的时候,对于每个文本的分类,复杂度从O(V) 降低到O(logV),参数量由V个变为V-1个

 

4. 一些实验的结果

基于情感分析8个数据集

  • 准确度上

fasttext 用了5个epoch,学习率的集合为 0.05,0.1,0.2,0.5,如果用bigram,那么准确率有1%-4%的提升,如果用trigrams,准确率可以达到97.1%

  • 训练时间上,下面是每个epoch的耗费的时间

 

参考:

https://arxiv.org/pdf/1607.01759.pdf  Bag of Tricks for Efficient Text Classification

https://arxiv.org/pdf/1411.2738.pdf word2vec Parameter Learning Explained

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章