文本分类性能

我正在使用textblob Python库,但性能不够理想。

我已经在循环之前将其序列化并加载(使用pickle)。

目前处理小型训练数据需要大约0.1秒,而处理33,000条测试数据需要大约0.3秒。我需要让它运行得更快,这是否可能?

部分代码:

# 在循环之前传递训练数据,以便大幅提升性能
trained_text_classifiers = load_serialized_classifier_trainings(config["ALL_CLASSIFICATORS"])
# 指定哪些分类器用于哪些类别
filter_classifiers = get_classifiers_by_resource_names(trained_text_classifiers, config["FILTER_CLASSIFICATORS"])
signal_classifiers = get_classifiers_by_resource_names(trained_text_classifiers, config["SIGNAL_CLASSIFICATORS"])
for (url, headers, body) in iter_warc_records(warc_file, **warc_filters):
    start_time = time.time()
    body_text = strip_html(body);
    # 检查URL内容是否通过过滤器,如果通过则索引,否则忽略
    if Filter.is_valid(body_text, filter_classifiers):
        print "Indexing", url.url
        resp = indexer.index_document(body, body_text, signal_classifiers, url=url, headers=headers, links=bool(args.save_linkgraph_domains))
    else:
        print "\n"
        print "Filtered out", url.url
        print "\n"
        resp = 0

这个循环对WARC文件的每个主体和元数据进行检查。

这里有两个文本分类检查。

1) 在Filter(非常小的训练数据):

if trained_text_classifiers.classify(body_text) == "True":
        return True
    else:
        return False

2) 在index_document(33,000条训练数据):

prob_dist = trained_text_classifier.prob_classify(body)
        prob_dist.max()
        # 返回垃圾邮件的概率
        return round(prob_dist.prob("spam"), 2)

classify和prob_classify是影响性能的两个方法。


回答:

您可以对数据进行特征选择。良好的特征选择可以将特征减少高达90%,并保持分类性能。在特征选择中,您选择顶级特征(在词袋模型中,您选择最有影响力的词),并基于这些词(特征)训练模型。这可以降低数据的维度(同时也防止维度灾难)。这里有一篇很好的调查报告:特征选择调查

简而言之:

有两种特征选择方法:过滤和包装

过滤方法几乎基于信息理论。搜索“互信息”、“卡方”等以了解这种类型的特征选择

包装方法使用分类算法来估计库中最重要的特征。例如,您选择一些词并评估分类性能(召回率、精确度)。

其他一些方法也可能有用。LSA和LSI可以提高分类性能和时间:https://en.wikipedia.org/wiki/Latent_semantic_analysis

您可以使用scikit进行特征选择和LSA:

http://scikit-learn.org/stable/modules/feature_selection.html

http://scikit-learn.org/stable/modules/decomposition.html

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注