目录
1 目的和思想
fasttext 模型的目的:分类(额外产物:词向量)
fasttext 的整体思想:引入字符n-gram,利用词及n-gram来预测类别
模型出自:Bag of Tricks for Efficient Text Classification
2 模型原理
模型实现:
- 将整篇文档的词及n-gram向量叠加平均得到文档向量
- 使用文档向量做h-softmax,形成多分类
2.1 n-gram
比如:“apple” 和“apples”,两个单词都有公共字符,即它们的内部形态类似。在word2vec中,这种单词内部形态信息因为它们被转换成不同的id丢失了,fastText使用了字符级别的n-grams来表示一个单词。对于单词“apple”,假设n的取值为3,则它的trigram有
“<ap”, “app”, “ppl”, “ple”, “le>”
2.2 Hierarchical Softmax
分层softmax的作用和在CBOW中相似,利用树降低复杂度,从N降到logN,需要计算w的概率,是指从root结点开始随机走,走到w的概率
3 fasttext 总结
fasttext利用了CBOW来设计的,最大的特点是增加了字符级的n-gram。对于低频词生成的词向量,可以共现其他词的n-gram。可以通过叠加词向量来表示新词的词向量
3.1 fasttext和CBOW
3.1.1 相同点
- fastText模型有三层:输入层、隐含层、输出层(Hierarchical Softmax)
- 输入都是多个经向量表示的单词,输出都是一个特定的target,隐含层都是对多个词向量的叠加平均
3.1.2 不同点
- fasttext是通过词预测类别,CBOW是通过周围词预测中心词
- fastText输入是多个单词及其n-gram,这些特征用来表示单个文档,而CBOW的输入是目标单词的周围词
- fastText输入的是向量,CBOW输入的是onehot编码的词
4 相关知识
4.1 标准softmax
softmax函数常在神经网络输出层充当激活函数,目的就是将输出层的值归一化到0-1区间
5 fasttext 函数使用
fasttext包目前只能在linux和mac上使用,如下是gensim.models.FastText
5.1 输入
输入分好的词
sentences = [["我","是","谁"], ["我","是","中国人"]]
5.2 函数及参数
from gensim.models import FastText
model = FastText(sentences,
size=4, # 词向量维度
window=3, # 周围词的范围
min_count=1, # 去掉低词频
iter=10, # 迭代次数
min_n=3, # n-gram最小长度, fasttext特点
max_n=6, # n-gram最大长度
word_ngrams=1) # 0:word2vec, 1:增加n-gram
5.3 输出及应用
每个词对应的词向量