Я программирую код BOW для набора данных из 30000 строк. У меня есть X_train, который (21000, 2). Эти 2 строки: заголовок и описание. Итак, у меня есть следующий код:
def text_to_bow(text: str) -> np.array:
text = text.split()
res = np.zeros(len(bow_vocabulary)) #bow_vocabulary includes 10000 most popular tokens
for word in text:
for i in range(len(bow_vocabulary)):
if word == bow_vocabulary[i]:
res[i] += 1
return res
def items_to_bow(items: np.array) -> np.array:
desc_index = 1
res = np.empty((0,k), dtype='uint8')
for i in range(len(items)):
description = items[i][desc_index]
temp = text_to_bow(description)
res = np.append(res, [temp], axis=0)
return np.array(res)
Мой код, кажется, работает правильно, так как в моей задаче есть несколько утверждений.
Итак, когда я запускаю:
X_train_bow = items_to_bow(X_train)
Я получаю сообщение об ошибке:
MemoryError: Unable to allocate 12.1 MiB for an array with shape (158,
10000) and data type float64
Я уже установил значение overcommit_memory в 1 в Ubuntu, но это не помогло. Я также не хочу использовать 64-битную python, потому что могут быть проблемы с модулями.
Я также попробовал другую функцию (с обычными массивами):
def items_to_bow(items: np.array) -> np.array:
desc_index = 1
res = []
for i in range(len(items)):
description = items[i][desc_index]
temp = text_to_bow(description)
res.append(temp)
if len(res)//1000 > 0:
print(len(res))
return np.array(res)
Но кажется, работает час или около того, что не удобно.
Есть ли способы решить проблему? Был бы признателен за любую возможную помощь.