Programımı iyice belirledikten sonra, vektörleştirici tarafından yavaşlatıldığını saptadım.sklearn: Bir vektörleştirici nasıl hızlandırılır (örn. Tfidfvectorizer)
Metin verileri üzerinde çalışıyorum ve iki satırlık basit tfidf unigram vektörü, kodun yürütülmesi için gereken toplam sürenin% 99.2'sini alıyor. İşte
katedilebilen bir örnektir (bu, sizin diske bir 3mb eğitim dosyasını indirip kendi örnek üzerinde çalıştırmak için urllib parçaları ihmal edecek):#####################################
# Loading Data
#####################################
import urllib
from sklearn.feature_extraction.text import TfidfVectorizer
import nltk.stem
raw = urllib.urlopen("https://s3.amazonaws.com/hr-testcases/597/assets/trainingdata.txt").read()
file = open("to_delete.txt","w").write(raw)
###
def extract_training():
f = open("to_delete.txt")
N = int(f.readline())
X = []
y = []
for i in xrange(N):
line = f.readline()
label,text = int(line[0]), line[2:]
X.append(text)
y.append(label)
return X,y
X_train, y_train = extract_training()
#############################################
# Extending Tfidf to have only stemmed features
#############################################
english_stemmer = nltk.stem.SnowballStemmer('english')
class StemmedTfidfVectorizer(TfidfVectorizer):
def build_analyzer(self):
analyzer = super(TfidfVectorizer, self).build_analyzer()
return lambda doc: (english_stemmer.stem(w) for w in analyzer(doc))
tfidf = StemmedTfidfVectorizer(min_df=1, stop_words='english', analyzer='word', ngram_range=(1,1))
#############################################
# Line below takes 6-7 seconds on my machine
#############################################
Xv = tfidf.fit_transform(X_train)
Bir np içine listesini X_train
dönüştürme çalıştı. dizi ama performansta bir fark yoktu.
Bunu http://codereview.stackexchange.com/ adresinde deneyebilirsiniz. – matsjoyce