fasttext的基本使用 java 、python为例子

今天早上在地铁上看到知乎上看到有人使用fasttext进行文本分类,到公司试了下情况在GitHub上找了下,最开始是c++版本的实现,不过有JavaPython版本的实现了,正好拿下来试试手,

python情况:

python版本参考,作者提供了详细的实现,并且提供了中文分词之后的数据,正好拿下来用用,感谢作者,代码提供的数据作者都提供了,点后链接在上面有百度盘,可下载,java接口用到的数据也一样:

  1. http://blog.csdn.net/lxg0807/article/details/52960072
  1. import logging
  2. import fasttext
  3. logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)
  4. #classifier = fasttext.supervised("fasttext/news_fasttext_train.txt","fasttext/news_fasttext.model",label_prefix="__label__")
  5. #load训练好的模型
  6. classifier = fasttext.load_model('fasttext/news_fasttext.model.bin', label_prefix='__label__')
  7. result = classifier.test("fasttext/news_fasttext_test.txt")
  8. print(result.precision)
  9. print(result.recall)
  10. labels_right = []
  11. texts = []
  12. with open("fasttext/news_fasttext_test.txt") as fr:
  13. lines = fr.readlines()
  14. for line in lines:
  15. labels_right.append(line.split("\t")[1].rstrip().replace("__label__",""))
  16. texts.append(line.split("\t")[0])
  17. #     print labels
  18. #     print texts
  19. #     break
  20. labels_predict = [e[0] for e in classifier.predict(texts)] #预测输出结果为二维形式
  21. # print labels_predict
  22. text_labels = list(set(labels_right))
  23. text_predict_labels = list(set(labels_predict))
  24. print(text_predict_labels)
  25. print(text_labels)
  26. A = dict.fromkeys(text_labels,0)  #预测正确的各个类的数目
  27. B = dict.fromkeys(text_labels,0)   #测试数据集中各个类的数目
  28. C = dict.fromkeys(text_predict_labels,0) #预测结果中各个类的数目
  29. for i in range(0,len(labels_right)):
  30. B[labels_right[i]] += 1
  31. C[labels_predict[i]] += 1
  32. if labels_right[i] == labels_predict[i]:
  33. A[labels_right[i]] += 1
  34. print(A )
  35. print(B)
  36. print( C)
  37. #计算准确率,召回率,F值
  38. for key in B:
  39. p = float(A[key]) / float(B[key])
  40. r = float(A[key]) / float(C[key])
  41. f = p * r * 2 / (p + r)
  42. print ("%s:\tp:%f\t%fr:\t%f" % (key,p,r,f))

java版本情况:

githup上下载地址:
  1. https://github.com/ivanhk/fastText_java
看了下sh脚本的使用方法,自己简单些了个text的方法,正好用用,后面会拿xgboost进行对比,看看效果,效果可以的写成service进行上线:
  1. package test;
  2. import java.util.List;
  3. import fasttext.FastText;
  4. import fasttext.Main;
  5. import fasttext.Pair;
  6. public class Test {
  7. public static void main(String[] args) throws Exception {
  8. String[] text = {
  9. "supervised",
  10. "-input",
  11. "/Users/shuubiasahi/Documents/python/fasttext/news_fasttext_train.txt",
  12. "-output", "/Users/shuubiasahi/Documents/faste.model", "-dim",
  13. "10", "-lr", "0.1", "-wordNgrams", "2", "-minCount", "1",
  14. "-bucket", "10000000", "-epoch", "5", "-thread", "4" };
  15. Main op = new Main();
  16. op.train(text);
  17. FastText fasttext = new FastText();
  18. String[] test = { "就读", "科技", "学生" ,"学生","学生"};
  19. fasttext.loadModel("/Users/shuubiasahi/Documents/faste.model.bin");
  20. List<Pair<Float, String>> list = fasttext.predict(test, 6);  //得到最大可能的六个预测概率
  21. for (Pair<Float, String> parir : list) {
  22. System.out.println("key is:" + parir.getKey() + "   value is:"
  23. + parir.getValue());
  24. }
  25. System.out.println(Math.exp(list.get(0).getKey()));  //得到最大预测概率
  26. }
  27. }
这里设置bucket不适用设置过大,过大会产生OOM,而且模型保存太大,上面的设置模型保存就有1个g,-wordNgrams可以设置为2比设置为1能提高模型分类的准确性,
 
结果情况:

key is:0.0   value is:__label__edu

key is:-17.75125   value is:__label__affairs

key is:-17.75125   value is:__label__economic

key is:-17.75125   value is:__label__ent

key is:-17.75125   value is:__label__fashion

key is:-17.75125   value is:__label__game

1.0

注意fasttext对输入格式有要求,label标签使用  “__label__”+实际标签的形式,   over

有问题联系我

2016年5月26   我的模型已经上线了    效果还不错

fasttext的基本使用 java 、python为例子的更多相关文章

  1. 梯度迭代树(GBDT)算法原理及Spark MLlib调用实例(Scala/Java/python)

    梯度迭代树(GBDT)算法原理及Spark MLlib调用实例(Scala/Java/python) http://blog.csdn.net/liulingyuan6/article/details ...

  2. 编程开发(C/C++&Java&Python&JavaScript&Go&PHP&Ruby&Perl&R&Erlang)

    使用Docker快速部署主流编程语言的开发.编译环境及其常用框架,包括C.C++.Java.Python.JavaScript.Go.PHP.Ruby.Perl.R.Erlang等. 在今后采用编程语 ...

  3. (八)map,filter,flatMap算子-Java&Python版Spark

    map,filter,flatMap算子 视频教程: 1.优酷 2.YouTube 1.map map是将源JavaRDD的一个一个元素的传入call方法,并经过算法后一个一个的返回从而生成一个新的J ...

  4. 芒果TV招聘研发工程师(JAVA PYTHON),地点长沙

    长沙芒果TV招聘高级 JAVA Python 工程师,工作地点:湖南广电   有兴趣的邮件0xmalloc@gmail.com; zealotyin@qq.com 公司有一大批从北京上海一线互联网企业 ...

  5. paip.提高效率---集合的存取括号方式 uapi java python php js 的实现比较

    paip.提高效率---集合的存取括号方式 uapi java python php js 的实现比较 ##java ----------- 在JDK1.7中,摒弃了Java集合接口的实现类,如:Ar ...

  6. paip.复制文件 文件操作 api的设计uapi java python php 最佳实践

    paip.复制文件 文件操作 api的设计uapi java python php 最佳实践 =====uapi   copy() =====java的无,要自己写... ====php   copy ...

  7. paip.获取文件名从路径uapi java python php总结...

    paip.获取文件名从路径uapi java python php总结... =====uapi basename_noext($fname); =============java  自己写.. St ...

  8. paip.日期时间操作以及时间戳uapi php java python 总结

    paip.日期时间操作以及时间戳uapi php java python 总结 ///uapi Date 函数 | Day 函数 | Hour 函数 | Minute 函数 | Month 函数 | ...

  9. paip.文件读写api php java python总结.txt

    paip.文件读写api php java python总结.txt 一.多种方式读文件内容.    1.按字节读取文件内容   以字节为单位读取文件,常用于读二进制文件,如图片.声音.影像等文件. ...

随机推荐

  1. cf期望概率专题

    cf1009E:求到第i段期望和的比较困难,但是单独求每段的期望是比较容易的,所以单独对每段求和,然后累计总和 E[i]=1/2*a1+1/4*a2+...+1/2^(i-1)*ai-1+1/2^(i ...

  2. Linux中网卡配置/etc/sysconfig/network-script/ifcfg-eth0

    网络接口配置文件 [root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 TYPE=Ethernet #网卡类型 DEVIC ...

  3. Delphi 异常处理

    Delphi错误:Stack overflow的解决方法 在编译Delphi程序时,执行一个内存记忆体的时候,提示:Project.exe raised exception class EStackO ...

  4. [NOIP模拟14]题解

    当垃圾已经成为一种常态233333 A.旋转子段 考场上的$n^2$手残少了20分,555  (主要是因为实在打不出来$n^3$的做法所以写不了对拍?ccc为什么考场上没有想起有reverse()这么 ...

  5. elipse手机设备显示Target unknown或者offline解决方法

    参考资料: http://blog.csdn.net/yuanjingjiang/article/details/11297433 http://www.educity.cn/wenda/153487 ...

  6. Golang flag包使用详解(一)

    概述 flag包提供了一系列解析命令行参数的功能接口 命令行语法 命令行语法主要有以下几种形式 -flag //只支持bool类型 -flag=x -flag x //只支持非bool类型 以上语法对 ...

  7. 戏说 .NET GDI+系列学习教程(三、Graphics类的应用_验证码)

    关于Graphics也有了基本了解下面想说的的是学这个东东干什么呢,到底如何应用目前常见应用1.验证码(参照网上的)2.打印排版(会提到关于条形码大小设置)3.自定义控件 一.验证码 class Va ...

  8. Feign 系列(02)Why Feign

    Feign 系列(02)Why Feign [toc] 1. 什么是 Feign Feign 的英文表意为"假装,伪装,变形", 是一个 Http 请求调用的轻量级框架,可以以 J ...

  9. JAVA集合--Iterator接口

        本文首发于cartoon的博客     转载请注明出处:https://cartoonyu.github.io/cartoon-blog     上一篇文章中我在集合元素的遍历中已经有涉及到I ...

  10. 如何用json 与jsonp 的区别去回答你的面试官?

    常常 有面试官这样问我们,虽然用过无数次,但是回答不上岂不是尴尬,那我们浅析一下它们的区别? 1. json JSON是一种基于文本的数据交换格式,用于描述复杂的数据,举个例子: var nax=[ ...