fasttext工作原理

fastText:是Facebook于2016年开源的一个词向量计算和文本分类工具,在文本分类任务中,fastText(浅层网络)往往能取得和深度网络相媲美的精度,却在训练时间上比深度网络快许多数量级,在标准的多核CPU上, 能够训练10亿词级别语料库的词向量在10分钟之内,能够分类有着30万多类别的50多万句子在1分钟之内

fasttext 组成 :第一部分为词嵌入,也就是无监督学习词向量。另一部分是分类,是有监督学习

fastText 模型运行过程:输入一个词的序列,输出这个词序列属于不同类别的概率。序列中的词和词组组成特征向量,特征向量通过线性变换映射到中间层,中间层再映射到标签。fastText 在预测标签时使用了非线性激活函数,但在中间层不使用非线性激活函数。fastText 模型架构和 Word2Vec 中的 CBOW 模型很类似。不同之处在于,fastText 预测标签,而 CBOW 模型预测中间词。

fasttext实际工作中的使用
fasttext是一个被用于对词向量和句子分类进行高效学习训练的工具库,采用c++编写,并支持训练过程中的多进程处理。你可以使用这个工具在监督和非监督情况下训练单词和句子的向量表示。这些训练出来的词向量,可以应用于许多处理数据压缩的应用程序,或者其他模型的特征选择,或者迁移学习的初始化

fasttext的优势是 :效果好,速速快,核心原因是使用了词内n-gram(sub-word,n-gram),第二是用了Hierararchical softmax,介绍如下:

Model architecture
在这里插入图片描述
fastText模型也只有三层:输入层、隐含层、输出层(Hierarchical Softmax),输入都是多个经向量表示的单词,输出都是一个特定的target,隐含层对多个词向量的叠加平均(其中x1,x2,…,xN−1,xN表示一个文本中的n-gram向量,每个特征是词向量的平均值)

Hierararchical softmax
背景:当类别的数量巨大时,计算线性分类器的计算量相当大,计算的复杂度是O(kh)k表示类别的数量,h表示文本特征的维度,基于Huffman树的Hierararchical softmax 可以将计算复杂度降为O(hlog(k)),在用n个训练样本进行训练时,根据每个类别出现的次数作为权重来构建Huffman树,出现次数多的类别样本,路径就短,出现次数少的来别样本,经过计算,单个样本在训练时所需要的时间复杂度是hlog(k),但fasttext在预测时,计算复杂度还是O(kh),只是预测时的计算量减小了

Fasttext是根据标签(label)和频率建立霍夫曼树;(label出现的频率越高,Huffman树的路径越短),Huffman树中每一叶子结点代表一个label

Hierararchical softmax的思想实际是将一个全局的多分类问题,转化成若干个二分类的问题,从而将计算的复杂度从O(v)蒋到O(log(v))每个二元分类问题,由一个基本的逻辑回归单元实现,如下图所示,从根节点开始,每一个中间结点(标记成灰色)都是一个逻辑回归单元,根据它的输出来选择下一步是向左还是向右走,下图示例中实际上走了一条“左一左一右一”的路线,从而找到单词w2,而最终输出单词w2的概率,等于中间若干逻辑回归单元输出概率的连乘积
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

N-gram features
在这里插入图片描述
fastText 可以用于文本分类和句子分类。不管是文本分类还是句子分类,我们常用的特征是词袋模型。但词袋模型不能考虑词之间的顺序,因此 fastText 还加入了 N-gram 特征,对于输入的上下文的每一个词都进行基于词的n-gram,之后将所有的n-gram和原词相加,来代表上下文信息,这样的好处是可以有前缀或者后缀等语言形态上的相似性,建立词与词之间的联系
sub-word:将一个单词打散到字符级别,然后利用字符的n-gram信息捕获字符之间的顺序关系,希望以此丰富单词内部更细微的语义

示例
对于单词“google”为了表达单词前后边界,我们加入<>两个字符,即变形为“”假设我们希望抽取所有的tri-gram信息,可以得到如下集合G={<go,goo,oog,ogl,gle,le},实践中,我们往往会同时提取单词的多种n-gram信息,2/3-gram,这样原始的单词googl就被一个字符级别的n-gram的集合所表达,在训练过程中,每一个n-gram都会对应训练一个向量,而原来完整单词的词向量就由它对应的所有n-gram向量求和得到,所有的单词向量以及字符级别的n-gram向量会同时相加求平均作为训练模型的输入

CBOW与fasttext对比
在这里插入图片描述

CBOW的输入是目标单词的上下文,fasttext的输入是多个单词及其n-gram特征,CBOW的输入单词被one-hot编码过,fasttext的输入它特征是被embedding过,CBOW的输出是目标的词汇,fasttext的输出是预测的标签
fasttext的输入时,将单词的字符级别n-gram作为额外的特征,输出时fasttext采用了分层softmax 大大降低了模型的训练时间

fasttext的安装

yum install git -y
git clone https://github.com/facebookresearch/fastText.git
cd fastText
# 使用pip安装python中的fasttext工具包
pip install .

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值