fasttext的基本使用 java 、python为例子
来源:互联网 发布:域名dns查询 java 编辑:程序博客网 时间:2024/06/07 20:59
今天早上在地铁上看到知乎上看到有人使用fasttext进行文本分类,到公司试了下情况在GitHub上找了下,最开始是c++版本的实现,不过有java、python版本的实现了,正好拿下来试试手,
python情况:
python版本参考,作者提供了详细的实现,并且提供了中文分词之后的数据,正好拿下来用用,感谢作者,代码提供的数据作者都提供了,点后链接在上面有百度盘,可下载,java接口用到的数据也一样:
http://blog.csdn.net/lxg0807/article/details/52960072
import loggingimport fasttextlogging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)#classifier = fasttext.supervised("fasttext/news_fasttext_train.txt","fasttext/news_fasttext.model",label_prefix="__label__")#load训练好的模型classifier = fasttext.load_model('fasttext/news_fasttext.model.bin', label_prefix='__label__')result = classifier.test("fasttext/news_fasttext_test.txt")print(result.precision)print(result.recall)labels_right = []texts = []with open("fasttext/news_fasttext_test.txt") as fr: lines = fr.readlines()for line in lines: labels_right.append(line.split("\t")[1].rstrip().replace("__label__","")) texts.append(line.split("\t")[0])# print labels# print texts# breaklabels_predict = [e[0] for e in classifier.predict(texts)] #预测输出结果为二维形式# print labels_predicttext_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]] += 1print(A )print(B)print( C)#计算准确率,召回率,F值for key in B: p = float(A[key]) / float(B[key]) r = float(A[key]) / float(C[key]) f = p * r * 2 / (p + r) print ("%s:\tp:%f\t%fr:\t%f" % (key,p,r,f))
java版本情况:
githup上下载地址:
https://github.com/ivanhk/fastText_java
看了下sh脚本的使用方法,自己简单些了个text的方法,正好用用,后面会拿xgboost进行对比,看看效果,效果可以的写成service进行上线:
package test;import java.util.List;import fasttext.FastText;import fasttext.Main;import fasttext.Pair;public class Test {public static void main(String[] args) throws Exception {String[] text = {"supervised","-input","/Users/shuubiasahi/Documents/python/fasttext/news_fasttext_train.txt","-output", "/Users/shuubiasahi/Documents/faste.model", "-dim","10", "-lr", "0.1", "-wordNgrams", "2", "-minCount", "1","-bucket", "10000000", "-epoch", "5", "-thread", "4" };Main op = new Main();op.train(text);FastText fasttext = new FastText();String[] test = { "就读", "科技", "学生" ,"学生","学生"};fasttext.loadModel("/Users/shuubiasahi/Documents/faste.model.bin");List<Pair<Float, String>> list = fasttext.predict(test, 6); //得到最大可能的六个预测概率for (Pair<Float, String> parir : list) {System.out.println("key is:" + parir.getKey() + " value is:"+ parir.getValue());}System.out.println(Math.exp(list.get(0).getKey())); //得到最大预测概率}}
这里设置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 我的模型已经上线了 效果还不错
阅读全文
1 0
- fasttext的基本使用 java 、python为例子
- libffm的基本使用--mac为例子
- fasttext使用笔记
- fasttext初步使用
- jstree的基本使用例子
- jstree的基本使用例子
- fasttext的简单介绍
- fasttext
- FastText
- Python的基本使用
- Python HTMLParser的使用例子
- python使用sqlite3的例子
- 使用Clion调试fastText源代码
- 使用fastText进行文本分类
- raphael一些基本例子的使用
- FastText的词向量表征
- fastText Ngram 的处理过程
- java基本控制语句的小例子
- 四元素与欧拉角之间的转换
- Find them, Catch them POJ
- ssm中mybatis处理数据库(mysql)与pojo属性中类型不一致(string转date)
- Open JDK源码下载地址
- 每周荐书:SQL优化、深度学习、数据科学家(评论送书)
- fasttext的基本使用 java 、python为例子
- 删除Eclipse已有的SVN资源库位置
- spring boot注解及启动过程
- easyui的datagrid在使用分页条的时候,乱码
- [PHP学习]Js判断跳转PC还是Wap端网站方法
- c3p0 不断的输出debug信息 Log4j 指定项目的 输出级别
- 负载均衡算法小结
- 是使用Net Configuration Assistant,配置监听,或者删除监听的时候,一定要点击”完成“。否则,无效
- C# Async/await