У меня возникла проблема с spaCy 2.1, из-за которой у меня ушло очень много времени на предварительную обработку некоторых текстов на английском и немецком языках, чтобы я мог использовать их в проекте, связанном с машинным переводом. После краткой очистки с помощью регулярных выражений я использую функцию spaCy nlp.pipe (), чтобы выполнить несколько процессов (лемматизация, пометка каждого слова частями речи и разбиение составных слов на немецком языке [который я разработал сам]), но проблема в том, что это занимает много времени, и мне интересно, есть ли лучший подход, который бы ускорил процесс.
Набор данных, который я использую, очень большой: он состоит из электронных книг Project Gutenberg на английском и немецком языках, а также подборки новостных статей на обоих языках и всей базы данных Википедии для обоих языков. Я выполняю этот код в сетке HPC моего колледжа, где я могу выделить до 40 процессорных ядер и 250 ГБ ОЗУ для каждой работы или выбор графических процессоров NVIDIA вплоть до RTX 2080 Ti. Независимо от того, какую комбинацию я пробую, кажется, что требуется несколько дней, чтобы пройти даже стадию лемматизации для каждого текста.
Я пытался использовать joblib, чтобы ускорить процесс, пытаясь использовать больше ядер, а также использовать многопроцессорность, чтобы сделать то же самое. Ни один из них, похоже, не имеет такого большого эффекта. Я также попытался изменить размер партии безрезультатно.
clean_en_texts_step1 = [cleaning(doc) for doc in NLP_EN.pipe(en_texts, batch_size=100)]
clean_en_texts = [tag_pos(doc) for doc in NLP_EN.pipe(clean_en_texts_step1, batch_size=100)]
clean_de_texts_step1 = [cleaning(doc) for doc in NLP_DE.pipe(de_texts, batch_size=100)]
compound_split = [split_compound_pipe(doc) for doc in NLP_DE.pipe(clean_de_texts_step1, batch_size=100)]
clean_de_texts = [tag_pos(doc) for doc in NLP_DE.pipe(compound_split, batch_size=100)]
Я бы ожидал, что трубы будут гораздо быстрее, чем они есть (вместо того, чтобы потратить несколько дней только на выполнение первого шага.