Fasttext 总结
Fasttext是继word2vec词向量模型提出之后提出的模型(或者说算法),因为训练速度非常快而比较受工业界关注。Fastext本身也和word2vec模型有很多相似之处,这篇博文将会简单梳理一下fasttext相关知识,关于word2vec那部分就不细讲了。
Fasttext涉及两篇论文,也分别代表了它的两个应用方向
- Bag of Tricks for Efficient Text Classification(201607) - 文本分类
- Enriching Word Vectors with Subword Information(201607)- 训练词向量
正如其名,两个方向的目标都是快,而且不损失太多质量。
Fasttext-文本分类
Fasttext应用到文本分类中,使用的CBOW的变种,和CBOW有如下区别:
- 使用类别标签替换中心词做预测
- 使用句子中所有单词作为输出,而不是滑动窗口
这两个改变都是为了做分类,第一个不需要解释,第二个做文本分类只需要考虑一次整个句子的特征就行,所以不使用滑动窗口,这也是为了降低计算复杂度。
使用霍夫曼树作为输出层(即Hierarcial Softmax),非叶子节点上的向量为二分类提供计算,叶子节点对应的是所有类别(而不是词汇表所有词的向量)。
模型开始训练时,词向量(参数)随机初始化,结束后保存起来用于预测就行,我们目的是分类,而不是词向量。
Fasttext模型的输入不仅仅是针对每个单词,并且加入了词序信息,词序信息通过n-gram的形式加入。n-gram对应的单位是word,而不是char。
Fasttext-获取词向量
使用负采样的skip-gram,将每个中心词看作子词的集合,并学习这些子词的词向量。
子词(subword)是论文核心,以中心词为where为例,设定子词大小为3,那么子词集合分为两部分,整词和子词。
整词即<where
>
子词<wh
, whe
, her
,ere
,re
>
最终<wh
, whe
, her
,ere
,re
, where
>
背景词则直接使用整词。
输入层使用子词(子词+整词),输出层使用整词。
如果OOV,则使用子词的向量和表示该词,这也是subword的一个优势所在。
fasttext在做文本分类的时候,一般使用CBOW;在训练词向量的时候,一般使用skip-gram。
- 使用Docker 1.12.x构建多容器Web应用程序
- 基于 vue2 + vuex 构建一个具有 45 个页面的大型单页面应用
- 深度解剖dubbo源码
- .NET Core采用的全新配置系统[6]: 深入了解三种针对文件(JSON、XML与INI)的配置源
- 基于 vue2 构建和后台真实交互的 管理系统
- ASP.NET MVC的Model元数据与Model模板:模板的获取与执行策略
- python3.6抓取100知乎用户头像详解(四)
- 从运营商小广告到HTTPS
- .NET Core采用的全新配置系统[5]: 聊聊默认支持的各种配置源[内存变量,环境变量和命令行参数]
- 区块链:为什么它不仅仅是比特币?
- Java Mail(二):JavaMail介绍及发送一封简单邮件
- ASP.NET MVC Controller激活系统详解:总体设计
- .NET Core采用的全新配置系统[7]: 将配置保存在数据库中
- Selenium3+Python3环境部署
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 什么是JavaScript 的闭包???
- es集群+elk搭建+kafka搭建分布式日志收集系统
- 设计模式(2)[JS版]---JavaScript如何实现单例模式?
- 算法基础:分治
- 黑客帝国中代码雨如何实现?用 canvas 轻松实现代码雨炫酷效果!
- 设计模式(3)[JS版]-JavaScript中的构造函数模式是什么?
- 基于docker 安装elasticsearch + kibana + ik分词器(6.7.2版本)
- 算法基础:排序
- 算法基础:动态规划
- 什么是 “并查集” ?
- Sentinel + SpringBoot 基于本地文件模式实现规则持久化
- 1.5 Arduino的第一个程序
- 2.1 Arduino语言和结构
- TKE 实践亲和性与反亲和性
- 从HotSpot虚拟机源码了解Java的访问控制修饰符