【发布时间】:2016-01-03 11:58:32
【问题描述】:
我已经训练了一个分类器,可以通过 pickle 加载。 我的主要疑问是是否有任何东西可以加快分类任务。每个文本(特征提取和分类)大约需要 1 分钟,这正常吗?我应该继续多线程吗?
这里有一些代码片段来看看整体流程:
for item in items:
review = ''.join(item['review_body'])
review_features = getReviewFeatures(review)
normalized_predicted_rating = getPredictedRating(review_features)
item_processed['rating'] = str(round(float(normalized_predicted_rating),1))
def getReviewFeatures(review, verbose=True):
text_tokens = tokenize(review)
polarity = getTextPolarity(review)
subjectivity = getTextSubjectivity(review)
taggs = getTaggs(text_tokens)
bigrams = processBigram(taggs)
freqBigram = countBigramFreq(bigrams)
sort_bi = sortMostCommun(freqBigram)
adjectives = getAdjectives(taggs)
freqAdjectives = countFreqAdjectives(adjectives)
sort_adjectives = sortMostCommun(freqAdjectives)
word_features_adj = list(sort_adjectives)
word_features = list(sort_bi)
features={}
for bigram,freq in word_features:
features['contains(%s)' % unicode(bigram).encode('utf-8')] = True
features["count({})".format(unicode(bigram).encode('utf-8'))] = freq
for word,freq in word_features_adj:
features['contains(%s)' % unicode(word).encode('utf-8')] = True
features["count({})".format(unicode(word).encode('utf-8'))] = freq
features["polarity"] = polarity
features["subjectivity"] = subjectivity
if verbose:
print "Get review features..."
return features
def getPredictedRating(review_features, verbose=True):
start_time = time.time()
classifier = pickle.load(open("LinearSVC5.pickle", "rb" ))
p_rating = classifier.classify(review_features) # in the form of "# star"
predicted_rating = re.findall(r'\d+', p_rating)[0]
predicted_rating = int(predicted_rating)
best_rating = 5
worst_rating = 1
normalized_predicted_rating = 0
normalized_predicted_rating = round(float(predicted_rating)*float(10.0)/((float(best_rating)-float(worst_rating))+float(worst_rating)))
if verbose:
print "Get predicted rating..."
print "ML_RATING: ", normalized_predicted_rating
print("---Took %s seconds to predict rating for the review---" % (time.time() - start_time))
return normalized_predicted_rating
【问题讨论】:
-
您是否曾经分析过您的代码以检查需要很长时间处理的确切位置?根据给定的信息,很难说时间是否正常。
-
我认为问题中提到的
pickle与您的问题无关,如果 [原文如此!] 分类器是缓慢的主要原因。如果腌制经过训练的模型是个好主意,那是另一个问题,imo。 -
review_features的维度是多少? -
它与主题有关,但与您的具体问题无关。因此,请参阅 this question 作为附带信息。
-
8-30 是数组的长度(示例数)还是维度(特征数)?无论如何,它似乎确实很慢。那里有一些问题。
标签: python machine-learning scikit-learn classification text-classification