fasttext用于训练词向量和文本分类。fasttext采用c-bow模型,融合了词的n-gram和subword信息,并采用了层序softmax和负采样进行加速。
fastText的核心思想就是:将整篇文档的词及n-gram向量叠加平均得到文档向量,然后使用文档向量做softmax多分类。这中间涉及到两个技巧:字符级n-gram特征的引入以及分层Softmax分类
1、模型输入输出:
输入:加入了ngram的一个词的序列(一段文本或是一句话),包括正常词,ngram,字符级别的ngram(subword,因为英文中由词根的概念),这些词是经过embedding的
隐藏层:多个向量的平均叠加
输出:这段文本属于不同类别的概率。
序列中的词和词组组成特征向量,特征向量通过线性变换映射到中间层,中间层再映射到标签。
fastText 在预测标签时使用了非线性激活函数,但在中间层不使用非线性激活函数。
2、模型架构:
包含简单的三层网络:输入层、隐含层、输出层(层序softmax)
3、训练任务:
有效文本分类(有监督学习),学习词向量表征(无监督)
4、loss:
5、tensor怎么flow的:
6、接口使用方法:
7、n-gram:
优点:
(1)可以更好的表示词向量
(2)可以解决oov(out of vocabulary)问题, 对于没有出现在训练语料库中的词,仍然可以根据ngram生成其词向量
(3)模型可以学习到局部的单词的顺序信息。
加入了ngram特征后,输入是原来的几倍甚至几十倍,可以通过hash桶解决
8、代码使用:
fastText有两个库:
gensim:from gensim.models.fasttext import FastText
fasttext :from fasttext import FastText
训练时需要输入样本的路径,文件可以是txt、csv格式
有监督的文本分类任务时,需要使用__label__XXX为样本做标注
在gensim的fasttext中查看词向量需要进入wv包,如FastText().wv["word"];而在fasttext中直接使用["word"]查询即可
model = fasttext.train_supervised(input=TRAIN_DATA, label='label', dim=100, lr=0.1, wordNgrams=2, epoch=20)