基于浅层神经网络方法(如word2vec和fasttext)的有监督学习模型集合

ShallowLearn的Python项目详细描述


基于浅层神经网络方法的监督学习模型集合(如word2vec和fasttext) 有一些额外的独家功能。 用python编写,与scikit-learn完全兼容。

用户和开发人员讨论组https://groups.google.com/d/forum/shallowlearn

https://travis-ci.org/giacbrd/ShallowLearn.svg?branch=masterhttps://badge.fury.io/py/shallowlearn.svg

开始

安装最新版本:

pip install cython
pip install shallowlearn

shallowlearn.models导入模型,它们在scikit learn中实现了监督学习的标准方法, 例如,fit(X, y)predict(X)predict_proba(X)等。

数据是原始文本,iterableX中的每个示例都是一个标记列表(文档的单词)。 而iterabley中的每个元素(对应于X中的元素)可以是单个标签或列表,以防 多标签训练集。显然,y的大小必须与X相同。

型号

gensimfasttext

如果您的目标是使用fasttext进行分类,请选择此模型!(这将是最稳定和丰富的功能)

基于fasttext算法[1]的监督学习模型。 代码大部分是从Gensim中获取并重写的, 它利用了它的优化(例如cython)和支持。

<> P>可以选择SOFTMax损失函数(默认值)或其两个“近似值”之一: 分层软最大和负采样。

参数bucket配置特性哈希空间,即[1]中描述的哈希技巧。 将散列技巧与partial_fit(X, y)一起使用会产生一个强大的联机文本分类器(请参见Online learning)。

可以在初始化时加载预先训练的词向量, 传递gensimWord2Vec或shallowlearnLabeledWord2Vec实例(后者可从 GensimFastText按属性classifier建模。 使用方法fit_embeddings(X)可以使用模型的当前参数值预先训练字向量。

构造函数参数名是gensim和fasttext的混合(请参见class docstring)。

>>>fromshallowlearn.modelsimportGensimFastText>>>clf=GensimFastText(size=100,min_count=0,loss='hs',iter=3,seed=66)>>>clf.fit([('i','am','tall'),('you','are','fat')],['yes','no'])>>>clf.predict([('tall','am','i')])['yes']

快速文本

fastText.py中实现的fasttext的监督算法, 它公开了原始C++代码上的接口。 与GensimFastText相比,这个类当前的优势是实现了子单词n-gram特性。 通过hashing技巧。 构造函数参数等同于原始的supervised model,除了input_fileoutputlabel_prefix

警告:在fasttext.py中加载数据集的唯一方法是通过文件系统(从0.8.2版开始)。 因此,传递给fit(X, y)的数据将写入磁盘上的临时文件中。

>>>fromshallowlearn.modelsimportFastText>>>clf=FastText(dim=100,min_count=0,loss='hs',epoch=3,bucket=5,word_ngrams=2)>>>clf.fit([('i','am','tall'),('you','are','fat')],['yes','no'])>>>clf.predict([('tall','am','i')])['yes']

深度平均网络

todo:基于https://github.com/miyyer/dan

独家功能

下一个很酷的功能将在github中作为问题列出,现在:

持久性

任何模型都可以用saveload两个方法进行序列化和反序列化。 它们重载了gensim的SaveLoad接口, 因此,可以控制模型的磁盘使用成本,而不是简单地pickling对象。 原始接口还允许对序列化输出使用压缩。

save可以创建多个文件,文件名的前缀是给定给序列化模型的名称。

>>>fromshallowlearn.modelsimportGensimFastText>>>clf=GensimFastText(size=100,min_count=0,loss='hs',iter=3,seed=66)>>>clf.save('./model')>>>loaded=GensimFastText.load('./model')# it also creates ./model.CLF

基准

文本分类

脚本scripts/document_classification_20newsgroups.py引用了 scikit-learn example 在参考数据集上比较文本分类器; 我们在比较中加入了我们的模型。 当前的结果,即使仍然是初步的,也可以与其他结果相比较 方法,在速度上获得最佳性能

发布时的结果0.0.5, 将chi2_select选项设置为80%。 《纽约时报》考虑了tf idf在“经典”分类器中的矢量化,以及 fasttext.py的培训。 评估度量值是macro f1

Text classifiers comparison

在线学习

脚本scripts/plot_out_of_core_classification.py计算一些scikit learn分类器的基准,这些分类器能够 逐步学习, 一次一批的例子。 这些分类器可以使用scikit learn方法partial_fit(X, y)在线学习。 那original example 描述通过特征散列(我们使用参数bucket设置)的方法。

结果不错,但仍有改进的余地。 我们使用iter=1, size=100, alpha=0.1, sample=0, min_count=0配置分类器,以便保持模型的快速性和 很小,而且不能从我们仅有的几个样品中断字。

Online learning

参考文献

[1](1, 2)
  1. Joulin, E. Grave, P. Bojanowski, T. Mikolov, Bag of Tricks for Efficient Text Classification

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何在安卓 studio中使用调用jaxws web服务的jar文件   java双时间模拟时钟不打印两个不同的时间   java Jackson反序列化处理不带字段的生成值   多线程在java同步中读锁的目的是什么   为什么java中有这么多获取日期时间的方法?   java从listview中的TextView获取数据   java是否可以定义如何对枚举进行(反)序列化以在枚举内持久化?   Java:异常处理我的catch()有问题   VMWare java SDK:可用的PerfMetricID何时不报告数据?   exec在Java中执行命令而不重定向输出   java使用SpringXML配置实现观察者模式?   java在竹笔平板电脑中使用JPen