提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 目标
  • 一、fastText的模型架构
    • 1. N-gram的理解
      • 1.1 bag of word
    • 2. fastTex模型中层次化的softmax
      • 2.1 哈夫曼树和哈夫曼编码
        • 2.1.1 哈夫曼树的定义
        • 2.1.2 哈夫曼树的相关概念
        • 2.1.3 哈夫曼树的构造算法
        • 2.1.3 哈夫曼树编码
        • 2.1.4 梯度计算
    • 3. 负采样

目标

1. 能够说出fastText的架构
2. 能够说出fastText速度快的原因
3. 能够说出fastText中层次化的softmax是如何实现的


提示:以下是本篇文章正文内容,下面案例可供参考

一、fastText的模型架构

fastText的结构非常简单,有三层:输入层、隐藏层、输出层(softmax)
**输入层:**是对文档embedding之后的向量,包含N-gram特征
**隐藏层:**是对输入数据的求和平均
**输出层:**是文档对应标签
如图所示:

1. N-gram的理解

1.1 bag of word


bag of word 又称为词袋,是一种只统计词频的手段,在fastText的输入层,不仅有分词之后的词语,还有包含有N-gram的组合词语一起作为输入。在机器学习中countVectorizer和TfidfVectorizer都可以理解为一种bow模型。

2. fastTex模型中层次化的softmax

为了提高效率,在fastText中计算分类标签概率的时候,不再使用传统的softmax来进行多分类的计算,而是使用哈夫曼树,使用层次化的softmax来进行概率的计算。

2.1 哈夫曼树和哈夫曼编码

2.1.1 哈夫曼树的定义

哈夫曼树概念:给定n个权值作为n个叶子节点,构造一个二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树。哈夫曼树是带权路径长度最短的树,权值较大的节点离根较近。

2.1.2 哈夫曼树的相关概念

**二叉树:**每个节点最多有2个子树的有序树,两个子树分别称为左子树、右子树。有序的意思是:树有左右之分,不能颠倒。
**叶子节点:**一棵树当中没有子节点的节点称为叶子节点。
**路径和路径长度:**在一棵树中,从一个节点往下可以到达孩子或孙子节点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定跟接地那的层数为1,则从跟接地那到第L层节点的路径长度为L-1。
**节点的权及带权路径长度:**若将树中节点赋予一个有某种含义的数值,则这个数值称为该节点的权,节点的带权路径长度为:从根节点到该节点之间的路径长度与该节点的权的乘积。
**树的带权路径长度:**树的带权路径长度规定为所有叶子节点的带权路径长度之和。
**树的高度:**树中节点的最大层次。包含n个节点的二叉树的高度至少为log2(n+1)log_2(n+1)log2(n+1)

2.1.3 哈夫曼树的构造算法

  1. W1,W2,W3....Wn{W1,W2,W3....Wn}W1W2W3....Wn看成n棵树的森林
  2. 在森林中选择两个根节点权值最小的树进行合并,作为一颗新树的左右子树,新树的根节点权值为左右子树的和
  3. 删除之前选择出的子树,把新树加入森林
  4. 重复2-3步骤,直到森林只有一颗树为止,该树就是所求的哈夫曼树。

    可见:
  • 权重越大,距离根节点越近
  • 叶子的个数为n,构造哈夫曼树中新增的节点的个数为n-1

2.1.3 哈夫曼树编码

为了提高数据传送的效率,同时为了保证在任一字符的编码都不是另一个字符编码的前缀,这种编码称为前缀编码,可以使用哈夫曼树生成哈夫曼编码解决问题。
可用字符集中的每个字符作为叶子节点生成一颗编码二叉树,为了获得传送保温的最短长度,可将每个字符的出现频率作为字符节点的权值赋予该节点上,显然字使用频率越小权值越小,权值越小叶子就越靠下,于是频率小编码常,频率高编码短,这样就保证了此树的最小带权路径长度效果上就是传送保温的最短长度。

2.1.4 梯度计算




层次化的softmax的好处:传统的softmax的时间复杂度为L(labels的数量),但是使用层次化softmax之后时间复杂度的log(L)(二叉树的高度和宽度的近似),从而在多分类的场景提高了效率。

3. 负采样

negative sampling,即每次从除当前label外的其他label中选择几个作为负样本,作为出现负样本的概率加到损失函数中。


好处:

  1. 提高训练速度,选择了部分数据进行计算损失,同时整个对没一个label而言都是一个二分类,损失时计算更加简单,只需要让当前label的值的概率尽可能大,其他label的都为反例,概率尽可能小。
  2. 改进效果,增加部分负样本,能够模拟真实场景下的噪声情况,能够让模型的稳健性更强

例如:
假设句子1对应的类别有Label1,Label2,Label3,Label4,Label5总共5个类别,假设句子1属于label2,那么我们的目标就是让P(Label2|句子1)这个概率最大,但是我们需要同时计算其他四类的概率,并再利用反向传播进行优化的时候需要对词向量都进行更新。这样计算量很大。
但是我们换个方式考虑:使用负采样的时候,把Label2认为是正样本,其他认为是负样本,那么只需要计算P(D=1|句子1,Label2)和P(D=0|句子1,Label2)们只需要计算之前的2/5倍的参数,那么负采样每次让一个训练样本仅仅更新一部分的权重,这样就会降低梯度下降过程中的计算量。

对softmax优化的方法有:

  1. 层次化的softmax
  2. 负采样

fastText模型相关推荐

  1. 自然语言处理--加载使用facebook的预训练 fastText 模型wiki-news-300d-1M.vec

    fastText,与 Word2vec 中预测周围词不同,该算法预测周围的 n 个字符.例如,"whisper"将生成以下两字符的 gram 和 3 字符的 gram: wh, w ...

  2. FastText模型简解+THUCNews新闻快速分类实战

    文章目录 模型架构: 两个特色: 核心思想: 为什么fasttext会快? 与Word2Vec比较: 实战: 1-数据预处理 2-模型训练 3-评估模型 4-自定义模型评估方法: 参考: 模型架构: ...

  3. 【nlp自然语言处理实战】案例---FastText模型文本分类

    目录 1.案例简介 2 代码 2.1 load_data.py 2.2 load_data_iter.py 2.3 FastText.py 2.4 train.py 2.5 predict.py 2. ...

  4. NLP-分类模型-2016-文本分类:FastText【使用CBOW的模型结构;作用:①文本分类、②训练词向量、③词向量模型迁移(直接拿FastText官方已训练好的词向量来使用)】【基于子词训练】

    <原始论文:Bag of Tricks for Efficient Text Classification> <原始论文:Enriching Word Vectors with Su ...

  5. fasttext源码学习(2)--模型压缩

    fasttext源码学习(2)–模型压缩 前言 fasttext模型压缩的很明显,精度却降低不多,其网站上提供的语种识别模型,压缩前后的对比就是例证,压缩前126M,压缩后917K.太震惊了,必须学习 ...

  6. 自然语言处理(NLP)之求近义词和类比词<MXNet中GloVe和FastText的模型使用>

    这节主要就是熟悉MXNet框架中的两种模型:GloVe和FastText的模型(词嵌入名称),每个模型下面有很多不同的词向量,这些基本都来自wiki维基百科和twitter推特这些子集预训练得到的. ...

  7. fastText实现文本分类

    fastText实现文本分类 1. fastText的介绍  [用来获取词向量,进行文本分类的工具:分类的效率,得到词向量的效率高] 文档地址:https://fasttext.cc/docs/en/ ...

  8. 使用Gensim来实现Word2Vec和FastText

    2019-12-01 19:35:16 作者:Steeve Huang 编译:ronghuaiyang 导读 嵌入是NLP的基础,这篇文章教你使用Gensim来实现Word2Vec和FastText, ...

  9. 基于深度学习的文本数据特征提取方法之Glove和FastText

    2019-12-03 20:49:51 作者:Dipanjan (DJ) Sarkar 编译:ronghuaiyang 导读 今天接着昨天的内容,给大家介绍Glove模型和FastText模型,以及得 ...

最新文章

  1. (转)如何成为顶级生物信息学家?
  2. 解决Win10 Virtualbox5.2.18桥接不能联网小记
  3. sinaapp mysql连接_手把手教你在新浪云上免费部署自己的网站--连接数据库
  4. 剑指Offer - 面试题5. 替换空格(字符串)
  5. C/C++的思索 C++之父访谈录
  6. 高精度加减乘法小程序
  7. C++ ifstream 读取文件大小和读取所有内容
  8. python手动绘图案例_python绘图案例——递归绘制分形树
  9. [BZOJ1088] [SCOI2005] 扫雷Mine
  10. Atitit 信息检索 之音乐检索实践 艾提拉注 目录 1. 常规检索 歌手 歌名 1 1.1. 年代检索 1 1.2. 歌词检索(可以依靠web 1 1.3. 哼唱检索 原曲检索(可以使用酷
  11. matlab数理统计工具箱,Matlab数理统计工具箱应用简介
  12. Hello, CTF WP
  13. 金融应用,计算酬金 Exercise06_11
  14. PAC(期间平均成本)
  15. 淘宝新店被人举报盗图要扣分处理办法
  16. 有哪些适合大学生投稿的普刊(社科类)?
  17. pyinstaller打包使用
  18. 总结非结构化数据分析「十步走」
  19. “心脏出血”漏洞可导致密码泄露
  20. Visual Studio 2005 Express Edition 正式版(英文版、中文版)

热门文章

  1. Bezier曲线曲面绘制
  2. CSS 去除文本上下多余间距
  3. 谈Incompatible JVM问题的原因与解决方法
  4. 通则ZLT X21 CPE使用指南
  5. 曾国藩《挺经》卷五坚忍
  6. 数据库系统教程(第3版) 施伯乐等著
  7. 2023-05-25 关于不将重点放在问题解决反而放在维护自尊上-反思
  8. 使用Nginx搭建下载服务器
  9. 文明重启为什么会服务器修复,文明重启为什么会触发建筑上限保护 上限保护解决方法...
  10. C语言解决读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字。