fasttext文本分类实践

fasttext Git:https://github.com/facebookresearch/fastText

fasttext官网:https://fasttext.cc/

简介

2016年facebook开源的一款高效词表示和文本分类工具。

原理

 

使用方法

安装需求

  • (gcc-4.6.3 or newer) or (clang-3.3 or newer)
  • python 2.6 or newer
  • numpy & scipy

安装

推荐源码安装,获取最新代码https://github.com/facebookresearch/fastText/releases/tag/v0.2.0

wget https://github.com/facebookresearch/fastText/archive/v0.2.0.zip
unzip v0.2.0.zip
cd fastText-0.2.0
make

python安装

git clone https://github.com/facebookresearch/fastText.git
cd fastText
pip install .  # 或者python setup.py install

查看是否安装成功

import fastText

 

词向量学习

./fasttext skipgram -input data.txt -output model

获取词向量

./fasttext print-word-vectors model.bin < queries.txt

文本分类

训练分类器

./fasttext supervised -input train.txt -output model

完成训练,在测试机上计算准确度

./fasttext test model.bin test.txt 1

获取一篇文本topk个最相似分类

./fasttext predict model.bin test.txt k

获取一篇文本topk个最相似分类以及概率

./fasttext predict-prob model.bin test.txt k

获取句子或段落的词向量

./fasttext print-sentence-vectors model.bin < text.txt

量化

用更小的空间创建.ftz文件

./fasttext quantize -output model

其他命令也可运行在该模式,例如test

./fasttext test model.ftz test.txt

文本分类示例

参考官网:https://fasttext.cc/docs/en/supervised-tutorial.html

获取数据,解压,查看数据格式

>> wget https://dl.fbaipublicfiles.com/fasttext/data/cooking.stackexchange.tar.gz && tar xvzf cooking.stackexchange.tar.gz
>> head cooking.stackexchange.txt

fasttext文本分类实践_第1张图片

一行一条,类标使用__label__打头,看到,一条文本可以有多个类标;英文内容不需要分词,中文需要分词预处理后用空格分隔。

分开训练集和测试集

>> wc cooking.stackexchange.txt 
   15404  169582 1401900 cooking.stackexchange.txt

>> head -n 12404 cooking.stackexchange.txt > cooking.train
>> tail -n 3000 cooking.stackexchange.txt > cooking.valid

 训练分类器

./fasttext supervised -input cooking.train -output model_cooking

直接测试训练好的模型

./fasttext predict model_cooking.bin -

 输入句子,直接出结果

 有些不准,在验证集上运行 

 P@1 表示top1精确率,R@1表示top1召回率。运行top5的测试结果:

输出top5预测结果:

./fasttext predict model_cooking.bin - 5

改进模型

1. 数据预处理

  • 去掉标点符号
  • 全部转换为小写字母

2. 增加迭代次数[5 - 50]

./fasttext supervised -input cooking.train -output model_cooking -epoch 25 

3. 增加学习率[0.1 - 1.0]

./fasttext supervised -input cooking.train -output model_cooking -lr 1.0 
./fasttext supervised -input cooking.train -output model_cooking -lr 1.0 -epoch 25

4. 调整n-grams [1 - 5]

./fasttext supervised -input cooking.train -output model_cooking -lr 1.0 -epoch 25 -wordNgrams 2

更多请查看https://fasttext.cc/docs/en/supervised-tutorial.html

你可能感兴趣的:(文本分类)