需要注意的问题:

1、linux mac 平台

2、标签中的下划线是两个!两个!两个!

环境说明:python2.7、linux

自己打自己脸,目前官方的包只能在linux,mac环境下使用。误导大家了,对不起。

测试facebook开源的基于深度学习的对文本分类的fastText模型

fasttext python包的安装:

1 pip install fasttext

第一步获取分类文本,文本直接用的清华大学的新闻分本,可在文本系列的第三篇找到下载地址。

输出数据格式: 样本 + 样本标签

说明:这一步不是必须的,可以直接从第二步开始,第二步提供了处理好的文本格式。写这一步主要是为了记忆当时是怎么处理原始文本的。

import jieba

import os

basedir = "/home/li/corpus/news/" #这是我的文件地址,需跟据文件夹位置进行更改

dir_list = ['affairs','constellation','economic','edu','ent','fashion','game','home','house','lottery','science','sports','stock']

##生成fastext的训练和测试数据集

ftrain = open("news_fasttext_train.txt","w")

ftest = open("news_fasttext_test.txt","w")

num = -1

for e in dir_list:

num += 1

indir = basedir + e + '/'

files = os.listdir(indir)

count = 0

for fileName in files:

count += 1

filepath = indir + fileName

with open(filepath,'r') as fr:

text = fr.read()

text = text.decode("utf-8").encode("utf-8")

seg_text = jieba.cut(text.replace("\t"," ").replace("\n"," "))

outline = " ".join(seg_text)

outline = outline.encode("utf-8") + "\t__label__" + e + "\n"

# print outline

# break

if count < 10000:

ftrain.write(outline)

ftrain.flush()

continue

elif count < 20000:

ftest.write(outline)

ftest.flush()

continue

else:

break

ftrain.close()

ftest.close()

第二步:利用fasttext进行分类。使用的是fasttext的python包。

整理好的数据:百度网盘下载

news_fasttext_train.txt

news_fasttext_test.txt

# _*_coding:utf-8 _*_

import logging

logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)

import fasttext

#训练模型

classifier = fasttext.supervised("news_fasttext_train.txt","news_fasttext.model",label_prefix="__label__")

#load训练好的模型

#classifier = fasttext.load_model('news_fasttext.model.bin', label_prefix='__label__')

```

测试模型

result = classifier.test("news_fasttext_test.txt")

print result.precision

print result.recall

0.92240420242

0.92240420242

由于fasttext貌似只提供全部结果的p值和r值,想要统计不同分类的结果,就需要自己写代码来实现了。

-- coding: utf-8 --

"""

Created on Wed Oct 18 14:17:27 2017

@author: xiaoguangli

"""

import logging

logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)

import fasttext

classifier = fasttext.load_model('news_fasttext.model.bin', label_prefix='label')

labels_right = []

texts = []

with open("news_fasttext_test.txt") as fr:

for line in fr:

line = line.decode("utf-8").rstrip()

labels_right.append(line.split("\t")[1].replace("label",""))

texts.append(line.split("\t")[0])

# print labels

# print texts

break

labels_predict = [e[0] for e in classifier.predict(texts)] #预测输出结果为二维形式

print labels_predict

text_labels = list(set(labels_right))

text_predict_labels = list(set(labels_predict))

print text_predict_labels

print text_labels

A = dict.fromkeys(text_labels,0) #预测正确的各个类的数目

B = dict.fromkeys(text_labels,0) #测试数据集中各个类的数目

C = dict.fromkeys(text_predict_labels,0) #预测结果中各个类的数目

for i in range(0,len(labels_right)):

B[labels_right[i]] += 1

C[labels_predict[i]] += 1

if labels_right[i] == labels_predict[i]:

A[labels_right[i]] += 1

print A

print B

print C

计算准确率,召回率,F值

for key in B:

try:

r = float(A[key]) / float(B[key])

p = float(A[key]) / float(C[key])

f = p * r * 2 / (p + r)

print "%s:\t p:%f\t r:%f\t f:%f" % (key,p,r,f)

except:

print "error:", key, "right:", A.get(key,0), "real:", B.get(key,0), "predict:",C.get(key,0)

实验数据分类

[u'affairs', u'fashion', u'lottery', u'house', u'science', u'sports', u'game', u'economic', u'ent', u'edu', u'home', u'constellation', u'stock']

['affairs', 'fashion', 'house', 'sports', 'game', 'economic', 'ent', 'edu', 'home', 'stock', 'science']

{'science': 8415, 'affairs': 8257, 'fashion': 3173, 'house': 9491, 'sports': 9739, 'game': 9506, 'economic': 9235, 'ent': 9665, 'edu': 9491, 'home': 9315, 'stock': 9015}

{'science': 10000, 'affairs': 10000, 'fashion': 3369, 'house': 10000, 'sports': 10000, 'game': 10000, 'economic': 10000, 'ent': 10000, 'edu': 10000, 'home': 10000, 'stock': 10000}

{u'affairs': 8562, u'fashion': 3585, u'lottery': 96, u'science': 9088, u'edu': 10068, u'sports': 10099, u'game': 10151, u'economic': 10131, u'ent': 10798, u'house': 10000, u'home': 10103, u'constellation': 432, u'stock': 10256}

#实验结果

science: p:0.841500 r:0.925946r: f:0.881706

affairs: p:0.825700 r:0.964377r: f:0.889667

fashion: p:0.941822 r:0.885077r: f:0.912568

house: p:0.949100 r:0.949100r: f:0.949100

sports: p:0.973900 r:0.964353r: f:0.969103

game: p:0.950600 r:0.936459r: f:0.943477

economic: p:0.923500 r:0.911559r: f:0.917490

ent: p:0.966500 r:0.895073r: f:0.929416

edu: p:0.949100 r:0.942690r: f:0.945884

home: p:0.931500 r:0.922003r: f:0.926727

stock: p:0.901500 r:0.878998r: f:0.890107

从结果上,看出fasttext的分类效果还是不错的,没有进行对fasttext的调参,结果都基本在90以上,不过在预测的时候,不知道怎么多出了一个分类constellation。难道。。。。查找原因中。。。。

2016/11/7更正:从集合B中可以看出训练集的标签中是没有lottery和constellation的数据的,说明在数据准备的时候,每类选取10000篇,导致在测试数据集中lottery和constellation不存在数据了。因此在第一步准备数据的时候可以根据lottery和constellation类的数据进行训练集和测试集的大小划分,或者简单粗暴点,这两类没有达到我们的数量要求,可以直接删除掉

fasttext 安装_fasttext的简单介绍相关推荐

  1. 【网址收藏】podman安装及使用简单介绍

    什么是 Podman ? Podman 是一个开源的容器运行时项目,可在大多数 Linux 平台上使用.Podman 提供与 Docker 非常相似的功能.正如前面提到的那样,它不需要在你的系统上运行 ...

  2. fasttext 安装_fasttext使用笔记

    http://blog.csdn.net/m0_37306360/article/details/72832606 这里记录使用fastText训练word vector笔记 下载到本机: $ git ...

  3. Windows安装PDMan及简单介绍

    文章目录 一.目的 二.安装 2-1 安装 Jdk 2-1-1 安装包 2-1-2 安装 2-1-3 jdk 环境配置 2-2 安装PDMan 2-2-1 安装包 2-2-2 安装 PDMan 2-2 ...

  4. Nessus安装及使用简单介绍

    0x00 简介 Nessus是著名信息安全服务公司tenable推出的一款漏洞扫描与分析软件,号称是"世界上最流行的漏洞扫描程序,全世界超过75,000个组织在使用它".尽管这个扫 ...

  5. 2021年大数据ELK(十八):Beats 简单介绍和FileBeat工作原理

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 Beats 简单介绍和FileBeat工作原理 一.Beats 二.FileB ...

  6. Grub及内核的简单介绍安装

    Grub1.x的具体介绍 Grub识别的硬盘设备命名 所有硬盘都识别为hd,分区表示法(x,y),编号都从0开始 配置文件 /boot/grub/grub.conf或/etc/grub.conf,具体 ...

  7. Linux系统Vi/Vim编辑器的简单介绍、安装/卸载、常用命令

    Linux系统Vi/Vim编辑器的简单介绍.安装/卸载.常用命令 1.介绍 vi(Visual Interface)编辑器是Linux和Unix上最基本的文本编辑器,工作在字符模式下.由于不需要图形界 ...

  8. Ansible简单介绍及安装部署详解

    ansible简单介绍 ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置. ...

  9. openresty开发系列10--openresty的简单介绍及安装

    openresty开发系列10--openresty的简单介绍及安装 一.Nginx优点 十几年前,互联网没有这么火,软件外包开发,信息化建设,帮助企业做无纸化办公,收银系统,工厂erp,c/s架构偏 ...

最新文章

  1. python 图像处理模块pillow
  2. mysql等价语句是_Mysql基本语句(个人笔记)
  3. 12306 背后的技术大牛:我不跟人拼智商,我就跟他们拼狠!
  4. inode客户端连接成功上不了网_wifi连接上但上不了网怎么回事
  5. 自学python找工作难吗-大四应届毕业生,学了两个月Python,找工作感觉好难啊?...
  6. python第三方插件登录网易音乐_python3-使用requests模拟登录网易云音乐
  7. 从上往下打印出二叉树的每个节点,同层节点从左至右打印。
  8. C++菱形继承产生的问题和解决
  9. 学习ecshop 教程网址
  10. CSS3中的动画效果记录
  11. LeetCode 题 - 20. 有效的括号
  12. 基于 FFMPEG 的音频编解码(一):Hello FFMPEG,安装与编译
  13. Android屏幕解锁和点亮
  14. hdu 6397 Character Encoding
  15. 关于【CDQ分治】的学习
  16. html ui 下拉列表,html - 如何给样式Material-ui选择字段下拉菜单?
  17. 爱创课堂每日一题第四天8/28日XML和JSON的区别?
  18. 计算机专业中的量词,什么是量词?说明量词的分类和语法特征.
  19. C博客作业02--循环结构
  20. WPS(word)批量给所有表格添加题注(标题)

热门文章

  1. Java泛型失效的两种情况
  2. c# mvc5 view 多层_MVC5+EF6 入门完整教程13 -- 动态生成多级菜单
  3. python重命名异常_python异常处理
  4. 学计算机有哪些大学专业,计算机专业:最好的7所大学!也是全中国“最难考”的大学!...
  5. Linux 查看CPU信息,内存等信息
  6. 浅谈Android中的Handler机制
  7. Linux UOS(国产统信)系统下Qt无法打印日志的问题
  8. C语言对p1口取反,单片机c语言编程基础(5页)-原创力文档
  9. php过滤第一个逗号和最后一个逗号,PHP字符过滤函数去除字符串最后一个逗号(rtrim)...
  10. pythonyield详解_Python yield生成器详解