1

所以我正在使用 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 是使用该工具提高性能的方法。

4

1 回答 1

4

您可以对数据使用特征选择。一些好的特征选择可以减少高达 90% 的特征并保持分类性能。在特征选择中,您选择最重要的特征(在Bag Of Word模型中,您选择最有影响力的词),并根据这些词(特征)训练模型。这会减少数据的维度(也可以防止维度诅咒)这是一个很好的调查: 关于特征选择的调查

简单来说:

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

过滤方法几乎是基于信息论的。搜索“Mutual Information”、“chi2”和...以获取此类特征选择

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

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

你可以使用sickit进行特征选择和LSA:

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

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

于 2016-06-26T16:21:16.650 回答