FastText理解

背景

fastText与word2vec相类似,该模型可用于训练词嵌入和文本分类。其中模型输入为文本的所有的单词以及n-gram特征,通过输入词矩阵进行加权,取均值,到达投影层,之后采用输出词矩阵,到达输出层(输出的是该文本属于不同类别的概率)。一般情况下会做如下两点的优化:

  1. 在训练得到n-gram的词嵌入后,一般由于数量巨大,采用Hash桶的方式进行存储;

  2. 在投影层之后,可以类似于word2vec的优化,采用层次softmax算法或负采样算法减少计算量。

      此篇文章通过介绍哈希函数、n-gram特征、层次softmax算法,最后介绍fastText算法。
    

哈希函数

我们通常使用数组或者链表来存储元素,一旦存储的内容数量特别多,需要占用很大的空间,而且在查找某个元素是否存在的过程中,数组和链表都需要挨个循环比较,而通过哈希计算,可以大大减少比较次数。

比如如果书存放时不分类直接摆到书架上(数组存储),找某本书时可能需要脑袋从左往右从上往下转好几圈才能发现;如果存放时按照类别分开放,技术书、小说、文学等等分开(按照某种哈希函数计算),找书时只要从它对应的分类里找,自然省事多了。(具体可博客查找)

N-gram特征

首先重复一下N-gram。根据马尔科夫假设,认为词T只受到前N个词的影响(而不是受整个句子中单词影响)。例如生成句子,则对于2-gram:

在这里插入图片描述

还有其他一些应用,例如中文词性标注、中文分词等(具体原理可借鉴其他人博客)。

    对于中文数据来说,基本思想是将文本内容按照子节顺序进行大小为N的窗口滑动操作,最终形成窗口为N的字节片段序列。而且需要额外注意一点是n-gram可以根据粒度不同有不同的含义,有字粒度的n-gram和词粒度的n-gram,下面分别给出了字粒度和词粒度的例子:

在这里插入图片描述

(具体作用:“我 爱 她” 这句话中的词袋模型特征是 “我”,“爱”, “她”。这些特征和句子
“她 爱 我” 的特征是一样的。如果加入 2-Ngram,第一句话的特征还有 “我-爱” 和 “爱-她”,这两句话 “我 爱 她” 和 “她 爱 我” 就能区别开来了。)

对于英文数据来说,n-gram也可以在字符级别工作,例如对单个单词matter来说,假设采用3-gram特征,那么matter可以表示成图中五个3-gram特征,这五个特征都有各自的词向量,五个特征的词向量和即为matter这个词的向其中“<”和“>”是作为边界符号被添加,来将一个单词的n-grams与单词本身区分开来:

在这里插入图片描述

从上面来看,使用n-gram有如下优点

1、为罕见的单词生成更好的单词向量:根据上面的字符级别的n-gram来说,即是这个单词出现的次数很少,但是组成单词的字符和其他单词有共享的部分,因此这一点可以优化生成的单词向量

2、在词汇单词中,即使单词没有出现在训练语料库中,仍然可以从字符级n-gram中构造单词的词向量

3、n-gram可以让模型学习到局部单词顺序的部分信息, 如果不考虑n-gram则便是取每个单词,这样无法考虑到词序所包含的信息,即也可理解为上下文信息,因此通过n-gram的方式关联相邻的几个词,这样会让模型在训练的时候保持词序信息

层次softmax算法

首先以单词的频率为权重,构造哈夫曼树,其中每一个非叶子节点对应一个向量。假如以‘喜欢观看巴西足球世界杯’为例,

其哈夫曼树如下:
在这里插入图片描述

l 其中所用到的参数表达

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

FastText算法

fastText算法主要有两个功能,一个是训练词向量,另一个是文本分类。

  1. 该模型输入中含有单词,并且添加了n-gram特征(此处添加该特征可以考虑次序问题),则在输入词矩阵需要添加n-gram特征的词向量(具体形式如下图)

在这里插入图片描述

其中对于n-gram特征的词向量存储采用Hash桶的方式,把所有的n-gram都哈希到buckets个桶中,哈希到同一个桶的所有n-gram共享一个embedding vector。

  1. 模型结构如下图:

在这里插入图片描述

其中输入为整个文本的单词,及其n-gram特征;通过输入词矩阵(加权),求均值,到投影层;最后通过输出词矩阵,输出所属类别的概率。

3.计算复杂度优化

在投影层之后,一般采用类似于word2vec的优化办法(即层次softmax算法或者负采样算法),这里只介绍层次softmax算法。

需要注意的是,其哈夫曼树的构造问题。其中叶子节点的权值是该类别出现的频数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值