官方使用指南:https://fasttext.cc/docs/en/unsupervised-tutorial.html
除了word2vec之外,fastText是谷歌开源的另一款计算词向量的工具。性能比肩深度网络且训练速度更快,处理计算词向量之外,它还支持文本分类,引入了子词(subword)概念,对训练样本中未见过的词也能有很好的预测结果。(对于英文来说,前缀或者是后缀相同的词往往有着相近的意思,对于中文lai'sh)
一.文本分类
训练: ./fasttext supervised -input cooking.train -output model_cooking
预测:./fasttext test model_cooking.bin cooking.valid
./fasttext test model_cooking.bin cooking.valid 5
可以得到Recall@5,precision@5
提升精度的办法:
1)预处理,去除符号,将大写变为小写(词汇量降低,同时准确率上升)
2)设定更大的epoch -epoch 25,默认5
3)增加或减少学习率 Good values of the learning rate are in the range 0.1 - 1.0.
4)word n-grams, standard range [1 - 5]
./fasttext supervised -input cooking.train -output model_cooking -lr 1.0 -epoch 25 -wordNgrams 2
bigram:将连续的2个word concat在一起
./fasttext supervised -input cooking.train -output model_cooking -lr 1.0 -epoch 25 -wordNgrams 2 -bucket 200000 -dim 50 -loss hs —层次softmax
多分类:
为每一个标签使用一个独立的分类器,可以使用:loss one-vs-all or -loss ova.
./fasttext supervised -input cooking.train -output model_cooking -lr 0.5 -epoch 25 -wordNgrams 2 -bucket 200000 -dim 50 -loss one-vs-all
预测:
使用-1保留尽可能多的预测结果
使用0.5表示只保留0.5以上的结果
单条输入:./fasttext predict-prob model_cooking.bin - -1 0.5
test输入:./fasttext test model_cooking.bin cooking.valid -1 0.5
二.词汇表示(向量)
训练:
./fasttext skipgram -input data/fil9 -output result/fil9
提供skipgram和cbow两种模型来训练
bin:模型文件,之后可以被加载
vec:训练出来的词向量,首行是词数和每个词的向量维度,接下来是按照词汇频率显示词以及对应的词向量
skipgram:学习用一个词的临近词来预测这个词,
cbow:学习用一个词的上下文来预测这个词,上下文是这个词附近固定窗口大小的词汇对应的一袋子词汇
实践表明,skipgram在subword上的表现比cbow好
1.调参:
1)词汇维度,默认100,100-300都比较常用
2)subword:通过minn,maxn控制subword长度,3-6个
./fasttext skipgram -input data/fil9 -output result/fil9 -minn 2 -maxn 5 -dim 300
3)epoch,迭代次数
4)学习率,lr,默认0.05,0.01-1都可以,学习率越大,学的越快,但是容易过拟合
./fasttext skipgram -input data/fil9 -output result/fil9 -epoch 1 -lr 0.5
5)使用线程
./fasttext skipgram -input data/fil9 -output result/fil9 -thread 4
2.打印词向量
$ echo "asparagus pidgey yellow" | ./fasttext print-word-vectors result/fil9.bin
asparagus 0.46826 -0.20187 -0.29122 -0.17918 0.31289 -0.31679 0.17828 -0.04418 ...
pidgey -0.16065 -0.45867 0.10565 0.036952 -0.11482 0.030053 0.12115 0.39725 ...
yellow -0.39965 -0.41068 0.067086 -0.034611 0.15246 -0.12208 -0.040719 -0.30155 ...
3.寻找最近query
./fasttext nn result/fil9.bin
4.词语类比
输入的是一个三元组(例如Germany Berlin France)
./fasttext analogies result/fil9.bin
Pre-computing word vectors...
done
.
Query triplet (A - B + C)? berlin germany france
paris 0.896462
bourges 0.768954
5.字符n-grams的重要性
可以获取未知词汇的向量