2016-06-22 6 views
1

私はtextblobのpythonライブラリを使用していますが、パフォーマンスが不足しています。テキスト分類のパフォーマンス

私は既にそれをシリアル化し、ループの前にロードします(pickleを使用)。

現在、テストデータは約0.1(小規模なトレーニングデータの場合)〜0.3(テストデータの場合は0.3)が必要です。私はそれをより速くする必要があります、それは可能ですか?

いくつかのコード:

# 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つのテキスト分類チェックがあります。 index_documentで

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

2)(33'000訓練データ):

1)内のフィルタ(非常に小さい訓練データ)

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を取る方法でありますパフォーマンスのツール。

+1

は、この秒か? 0.3秒は本当に遅くなりますか?どのくらい速くそれが必要ですか? – syntonym

+0

パーフェクトは0.02(これはtextblobの実装前のスピード)でしたが、現実的です。0.1付近のすべてが問題ありません!あなたが助けることができる場合、任意のアイデアを持って、私は奨励金を作ったり、相談料を支払うことができます! – IvRRimUm

+0

いくつかのコードと、問題を再現する入力データの例を表示できますか? – syntonym

答えて

3

データに対して機能選択を使用できます。優れたフィーチャを選択すると、フィーチャを最大90%削減し、分類性能を維持することができます。 機能選択では、上部機能(モデルのモデルでは、上位の影響ワードを選択します)を選択し、これらの単語(機能)に基づいてトレインモデルを選択します。簡単に言うと Survey on feature selection

2つの特徴選択アプローチが提供されています:フィルタリングと

フィルタリングをラップこれはあなたのデータ(また、それは次元の呪いを防ぐ) はここで良いの調査での寸法を小さくアプローチはほぼ情報理論に基づいている。このタイプの特徴選択のための "相互情報"、 "chi2"および...の検索

ラッピングアプローチは、ライブラリの最も重要な機能を評価するために分類アルゴリズムを使用します。たとえば、いくつかの単語を選択し、分類パフォーマンス(リコール、精度)を評価します。

また、他のいくつかのapprochが便利です。 LSAとLSIは、分類性能と時間をアウトパフォームすることができます https://en.wikipedia.org/wiki/Latent_semantic_analysis

あなたは、特徴選択とLSAのためsickitを使用することができます。

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

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

関連する問題