Я выполняю следующий код для обработки списка документов, в основном это всего два цикла for.
from nltk.tokenize import TreebankWordTokenizer
from gensim.models import KeyedVectors
from nlpia.loaders import get_data
word_vectors = get_data('w2v', limit=200000)
def tokenize_and_vectorize(dataset):
tokenizer = TreebankWordTokenizer()
vectorized_data = []
expected = []
for sample in dataset:
tokens = tokenizer.tokenize(sample[1])
sample_vecs = []
for token in tokens:
try:
sample_vecs.append(word_vectors[token])
except KeyError:
pass
vectorized_data.append(sample_vecs)
#print(1)
return vectorized_data
, затем я вызываю функцию для обработки 25k верхних элементов
vectorized_data=tokenize_and_vectorize(dataset[0:25000])
Однако этот код работает вечно, так как знак * никогда не исчезает. (Примечание: я попытался запустить только 50 выборок, и результаты вернулись довольно быстро)
Чтобы увидеть, где он застрял, я наивно добавил print(1)
перед return vectorized_data
, поэтому для каждого цикла l oop возвращает мне 1. Через 1мин36с c я получил все результаты.
Боковое наблюдение за использованием памяти компьютера. В случае, не добавляя print (1), я заметил, что использование памяти было высоким в начале и вернулось к нормальному уровню через пару минут, но не уверен, что это означает, что процесс завершен, хотя знак * все еще показывает.
Чем вызвана эта проблема и как ее исправить?