文本分类性能

我正在使用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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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