FastText文本分类以及生成词向量

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/supinyu/article/details/81136590

FasttextFacebook开源的文本分类工具。最近工作上用到了这个包,感觉又快又好用,在这里简单的做一下记录,这里使用的Python的相关接口

1、安装

在linux下安装比较方便,直接使用pip进行安装

pip install fasttext

2、文本分类

对于文本分类只要将数据准备好,就可以了

classifier = fasttext.supervised('data.train.txt', 'model', label_prefix='__label__')

这里需要注意的是,训练的数据文件中类别的前缀默认是”__label__”,如果需要修改的话,可以在上面的参数中进行相关的修改。
训练数据的相关格式

__label__1  姚明 喜欢 打 篮球 

类别和句子之间用tab键分开,句子可以是按照词分割开的,也可以是按照字分割开的
产生的模型文件会被保存成model.bin,预测之前需要先加载相关模型
我们可以用于预测文件的准确率和召回率

classifier = fasttext.load_model('model.bin')
result = classifier.test('test.txt')
print 'P@1:', result.precision
print 'R@1:', result.recall

其中text.txt里面每行村放是的测试的句子,具体的格式与训练集合一致
使用模型进行相关的预测

texts = ['example very long text 1', 'example very longtext 2']
labels = classifier.predict(texts)
print labels

# Or with the probability
labels = classifier.predict_proba(texts)
print labels

输出的时候还可以预测的前n个值

labels = classifier.predict(texts, k=3)
print labels

# Or with the probability
labels = classifier.predict_proba(texts, k=3)
print labels

3、生成词向量

生成词向量的时候,我用的是skipgram,这时候数据需要进行处理一下,转换成下面的格式,由于我训练的是基于字的词向量,所以我是按照每个字切分的

姚 明 喜 欢 打 篮 球 __label__1    
model = fasttext.skipgram("cnews.all.train.txt", "model",dim = 50)

这其中还有一些其他的配置参数可以选择,具体的参数可以查看参考文献。
训练完成之后,会产生模型文件bin和词向量文件vec,词向量文件里面第一行是字典的长度和维度,下面是具体的词向量

参考文献
[1] : https://pypi.org/project/fasttext/

展开阅读全文

没有更多推荐了,返回首页