自然语言处理之____Fasttext

1,fasttext架构

fasttext的模型类似于word2vec中的cbow模型,cbow是预测中间的词,而fasttext是用整个文本的特征去预测文本的类型

自然语言处理之____Fasttext_第1张图片

fasttex使用了层次softmax,层次softmax技巧是建立在哈夫曼编码的基础上,fasttext利用了类别不均衡这个事实,对标签构建树型结构,出现次数越少的标签在越后面,层次越深,这样能够极大的提高计算效率

自然语言处理之____Fasttext_第2张图片

2,fasttext的词向量表征

fasttext中加入了n-gram特征 ,比如加入了2-Ngram,就能区别出,“我是”和“是我”的区别 ,而普通的词袋模型没有语序区别则无法区分出来,同时用fasttext训练词向量特别快,非常实用于大型数据加上高速的训练

且fasttext专注于文本分类

在作者的paper中讲到,当类别的数量巨大时,计算线性分类器的计算量相当高,更准确的说,计算复杂度是 O(kh)k 是类别的数量,h 是文本特征的维度数。基于 Huffman 树的 hierarchical softmax,可以将计算复杂度降到 O(hlog2(k))

建立Huffman树结合优先队列,计算复杂度可以是 O(hlog2(k))
在用n个训练样本进行训练时,根据每个类别出现的次数作为权重来建Huffman树,出现次数多的类别的样本,路径就短,出现次数少的类别的样本,路径就长。经过计算,单个样本在经过训练时所需的时间复杂度应该是 hlog2(k)

但fastText在预测时,计算复杂度仍然是O(kh),因为预测时计算量确实很小,所以这可能也不是fastText的初衷所在。


3,fasttext使用

fasttext的使用很简单,fasttext提供了pytho 接口

pip install fasttext 就能直接安装

fasttext对训练数据有格式要求

import fasttext

classifier = fasttext.supervised('train_data.txt', 'classifier.model', label_prefix='__label__')

label_prefix: 这里就是设置文本前缀,默认是__label__

文本格式: __label__+标签+“,”+“ ”+分词后的文本

这样处理好后就能丢进去训练了




你可能感兴趣的:(first)