FastText使用指南

官方使用指南: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的重要性

可以获取未知词汇的向量

上一篇:Parted:2T以上磁盘分区工具(LINUX挂载2T以上磁盘)


下一篇:csharp基础练习题:水煮蛋【难度:1级】--景越C#经典编程题库,不同难度C#练习题,适合自学C#的新手进阶训练