文本分类性能

Text classification performance

所以我正在使用 textblob python 库,但性能不足。

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

目前需要 ~ 0.1(对于小训练数据)和 ~ 0.3 33'000 测试数据。我需要让它更快,有可能吗?

一些代码:

# Pass trainings before loop, so we can make performance a lot better
trained_text_classifiers = load_serialized_classifier_trainings(config["ALL_CLASSIFICATORS"])

# Specify witch classifiers are used by witch classes
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);

    # Check if url body passess filters, if yes, index, if no, ignore
    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 文件的主体和元数据执行检查。

此处有 2 个文本分类检查。

1) 在过滤器中(非常小的训练数据):

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 the propability of spam
        return round(prob_dist.prob("spam"), 2)

分类和 prob_classify 是使用该工具提高性能的方法。

您可以为您的数据使用特征 selection。一些好的特征 selection 可以减少高达 90% 的特征并保持分类性能。 在特征 selection 你 select top feature(在 Bag Of Word 模型中,你 select top influence words),并基于这些训练模型词(特征)。这减少了数据的维度(也防止了维度诅咒) 这是一个很好的调查: Survey on feature selection

简述:

两种功能 selection 方法可用:过滤和包装

过滤方法几乎是基于信息论。搜索 "Mutual Information"、"chi2" 和...此类功能 selection

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

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

您可以将 sickit 用于特征 selection 和 LSA:

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

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