【简单总结】FastText的复习回顾

【简单总结】FastText的复习回顾

1.FastText简单介绍

FastText方法包含三部分:模型架构、层次 Softmax 和 N-gram 特征。

模型架构:fastText 模型输入一个词的序列(一段文本或者一句话),输出这个词序列属于不同类别的概率。序列中的词和词组组成特征向量,特征向量通过线性变换映射到中间层,中间层再映射到标签。fastText 在预测标签时使用了非线性激活函数,但在中间层不使用非线性激活函数。

层次softmax:在某些文本分类任务中类别很多,计算线性分类器的复杂度高。为了改善运行时间,fastText 模型使用了层次 Softmax 技巧。层次 Softmax 技巧建立在哈夫曼编码的基础上,对标签进行编码,能够极大地缩小模型预测目标的数量。

N-gram 特征:fastText 可以用于文本分类和句子分类。不管是文本分类还是句子分类,我们常用的特征是词袋模型。但词袋模型不能考虑词之间的顺序,因此 fastText 还加入了 N-gram 特征。

2.FastText模型架构

fastText的架构和word2vec中的CBOW的架构类似,因为它们的作者都是Facebook的科学家Tomas Mikolov,而且确实fastText也算是word2vec所衍生出来的。

  • CBOW的架构:输入的是w(t)w(t)的上下文2d2d个词,经过隐藏层后,输出的是w(t)w(t)。

 

word2vec将上下文关系转化为多分类任务,进而训练逻辑回归模型,这里的类别数量是 |V||V| 词库大小。通常的文本数据中,词库少则数万,多则百万,在训练中直接训练多分类逻辑回归并不现实。

word2vec中提供了两种针对大规模多分类问题的优化手段, negative sampling 和 hierarchical softmax。在优化中,negative sampling 只更新少量负面类,从而减轻了计算量。hierarchical softmax 将词库表示成前缀树,从树根到叶子的路径可以表示为一系列二分类器,一次多分类计算的复杂度从|V||V|降低到了树的高度。

  • fastText模型架构:
    其中x1,x2,...,xN−1,xNx1,x2,...,xN−1,xN表示一个文本中的n-gram向量,每个特征是词向量的平均值。这和前文中提到的cbow相似,cbow用上下文去预测中心词,而此处用全部的n-gram去预测指定类别。

 

2.2 层次SoftMax

对于有大量类别的数据集,fastText使用了一个分层分类器(而非扁平式架构)。不同的类别被整合进树形结构中(想象下二叉树而非 list)。在某些文本分类任务中类别很多,计算线性分类器的复杂度高。为了改善运行时间,fastText 模型使用了层次 Softmax 技巧。层次 Softmax 技巧建立在哈弗曼编码的基础上,对标签进行编码,能够极大地缩小模型预测目标的数量。

fastText 也利用了类别(class)不均衡这个事实(一些类别出现次数比其他的更多),通过使用 Huffman 算法建立用于表征类别的树形结构。因此,频繁出现类别的树形结构的深度要比不频繁出现类别的树形结构的深度要小,这也使得进一步的计算效率更高。

 

2.3 N-gram子词特征

fastText 可以用于文本分类和句子分类。不管是文本分类还是句子分类,我们常用的特征是词袋模型。但词袋模型不能考虑词之间的顺序,因此 fastText 还加入了 N-gram 特征。

3.FastText词向量与word2vec对比

图模型结构很像,都是采用embedding向量的形式,得到word的隐向量表达。

都采用很多相似的优化方法,比如使用Hierarchical softmax优化训练和预测中的打分速度。

FastText= word2vec中 cbow + h-softmax的灵活使用

模型的输出层:word2vec的输出层,对应的是每一个term,计算某term的概率最大;而fasttext的输出层对应的是
分类的label。不过不管输出层对应的是什么内容,起对应的vector都不会被保留和使用;

模型的输入层:word2vec的输入层,是 context window 内的term;而fasttext 对应的整个sentence的内容,包括term,也包括 n-gram的内容;

两者本质的不同,体现在 h-softmax的使用。Word2vec的目的是得到词向量,该词向量 最终是在输入层得到,输出层对应的 h-softmax 也会生成一系列的向量,但最终都被抛弃,不会使用。fasttext则充分利用了h-softmax的分类功能,遍历分类树的所有叶节点,找到概率最大的label(一个或者N个)。

### FastText 项目概述 FastText 是由 Facebook AI Research 开发的一个库,用于高效的文字表示和分类[^1]。此工具能够处理多种自然语言处理任务,包括但不限于文本分类、词向量生成以及语言识别。 #### 项目的目录结构及介绍 FastText 的典型安装包会包含如下几个主要部分: - `src` 文件夹:包含了编译所需的源代码文件。 - `examples` 文件夹:提供了一些简单的例子来展示如何使用 fastText 进行不同类型的 NLP 任务。 - `docs` 文件夹:存放官方文档和其他帮助资料。 - `tutorials` 文件夹:提供了详细的教程指导用户完成特定功能的学习过程。 #### 安装与配置说明 对于希望快速上手 fastText 用户来说,可以通过 pip 或者从 GitHub 上克隆仓库来进行本地部署。具体命令如下所示: ```bash pip install fasttext ``` 或者下载并解压 tarball 后,在终端执行以下指令进行构建: ```bash git clone https://github.com/facebookresearch/fasttext.git cd fastText make ``` 之后可以利用 Python API 接口调用该库的功能;而对于 C++ 版本,则可以直接运行可执行程序[^2]。 #### 参数解析及其应用实例 当涉及到实际操作时,一些常用的参数可以帮助更好地控制模型行为。例如,`--model_path` 和 `--input_text` 分别指定了已训练好模型的位置以及待预测的文本内容。下面给出了一段基于 TensorFlow 实现 fastText 模型的应用案例片段[^3]: ```python import tensorflow as tf from tensorflow.keras.preprocessing.text import Tokenizer from tensorflow.keras.preprocessing.sequence import pad_sequences tokenizer = Tokenizer(num_words=5000, oov_token="<OOV>") sequences = tokenizer.texts_to_sequences(["your input sentence here"]) padded_sequence = pad_sequences(sequences) loaded_model = tf.saved_model.load('path/to/saved/model') predictions = loaded_model(padded_sequence) print(predictions.numpy()) ``` 上述代码展示了加载保存下来的 fastText 模型并对新输入的数据做出推断的过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值