2016-06-22 3 views
1

Так что я использую библиотеку python textblob, но производительность отсутствует.Эффективность классификации текста

Я уже сериализую его и загружаю перед циклом (используя рассол).

В настоящее время он принимает ~ 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 являются методы, которые принимают инструмент по производительности.

+1

это за секунды? Действительно ли 0,3 секунды замедляется? Как быстро вам это нужно? – syntonym

+0

Идеально было бы 0.02 (это была скорость перед реализацией textblob), но я реалистичен, все около 0,1 будет в порядке! Есть идеи, я могу получить щедрость или даже заплатить за консультацию, если бы вы могли помочь! – IvRRimUm

+0

Можете ли вы показать код и некоторые примеры входных данных, которые воспроизводят вашу проблему? – syntonym

ответ

3

Вы можете использовать функцию выбора для своих данных. некоторый хороший выбор функции может уменьшить функции до 90% и сохранить классификацию производительности. В выборе функции вы выбираете верхнюю функцию (в модели Bag Of Word, вы выбираете верхние слова влияния), и модель поезда, основанная на этих словах (особенностях). это уменьшить размерность данных (также это предотвратить Проклятие Размерности) здесь хороший обзор: Survey on feature selection

Вкратце:

Два подхода выбора функции доступен: Фильтрация и Обертывание

Фильтрации подход почти основан на теории информации. поиск «Взаимная информация», «chi2» и ... для выбора этого типа функций

Подход к обходу использует алгоритм классификации для оценки наиболее важных функций в библиотеке. например, вы выбираете несколько слов и оцениваете эффективность классификации (отзыв, точность).

Также некоторые другие могут быть полезными. 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

Смежные вопросы