Python 文本分类性能

Python 文本分类性能,python,performance,machine-learning,textblob,Python,Performance,Machine Learning,Textblob,所以我使用的是textblob python库,但性能不足 我已经序列化它并在循环之前加载它(使用pickle) 目前需要~0.1(对于较小的训练数据)和~0.3(对于33000个测试数据)。我需要加快速度,这可能吗 一些代码: 这是对每个warc文件的正文和元数据执行检查的循环 这里有两个文本分类检查 1) 在过滤器中(非常小的训练数据): 2) 在索引_文件中(33000个培训数据): “分类”和“概率分类”是利用工具提高性能的方法。您可以对数据使用特征选择。一些好的特征选择可以将特征减少9

所以我使用的是textblob python库,但性能不足

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

目前需要~0.1(对于较小的训练数据)和~0.3(对于33000个测试数据)。我需要加快速度,这可能吗

一些代码: 这是对每个warc文件的正文和元数据执行检查的循环

这里有两个文本分类检查

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

2) 在索引_文件中(33000个培训数据):


“分类”和“概率分类”是利用工具提高性能的方法。

您可以对数据使用特征选择。一些好的特征选择可以将特征减少90%并保持分类性能。 在特征选择中,您选择顶部特征(在单词包中,您选择顶部影响单词),并基于这些单词(特征)训练模型。这减少了数据的维度(也防止了维度诅咒) 以下是一个很好的调查:

简言之:

有两种特征选择方法可用:过滤和换行

过滤方法几乎是基于信息论的。搜索“相互信息”、“chi2”和。。。对于这种类型的特征选择

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

还有一些其他的方法也很有用。LSA和LSI可以超越分类性能和时间:

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


您可以对数据使用功能选择。一些好的特征选择可以将特征减少90%并保持分类性能。 在特征选择中,您选择顶部特征(在单词包中,您选择顶部影响单词),并基于这些单词(特征)训练模型。这减少了数据的维度(也防止了维度诅咒) 以下是一个很好的调查:

简言之:

有两种特征选择方法可用:过滤和换行

过滤方法几乎是基于信息论的。搜索“相互信息”、“chi2”和。。。对于这种类型的特征选择

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

还有一些其他的方法也很有用。LSA和LSI可以超越分类性能和时间:

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


这是秒吗?0.3秒真的会变慢吗?你需要多快?完美应该是0.02(这是textblob实现之前的速度),但我很现实,接近0.1的一切都可以!如果你有任何想法,如果你能帮忙,我可以悬赏甚至支付咨询费!你能展示一些代码和一些示例输入数据来重现你的问题吗?我在这里更新了post.U?这是占位符文本,所以我可以发表评论。这是秒吗?0.3秒真的会变慢吗?你需要多快?完美应该是0.02(这是textblob实现之前的速度),但我很现实,接近0.1的一切都可以!如果你有任何想法,如果你能帮忙,我可以悬赏甚至支付咨询费!你能展示一些代码和一些示例输入数据来重现你的问题吗?我在这里更新了post.U?这是一个占位符文本,所以我可以发表评论。
# 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
if trained_text_classifiers.classify(body_text) == "True":
        return True
    else:
        return False
prob_dist = trained_text_classifier.prob_classify(body)
        prob_dist.max()

        # Return the propability of spam
        return round(prob_dist.prob("spam"), 2)