Как ускорить лемматизацию с помощью spacy.pipe на текст? - PullRequest
1 голос
/ 04 марта 2020

Как я могу ускорить лемматизацию в наборе текста, используя простую трубу? В настоящее время я использую вот так:

nlp = spacy.load('en_core_web_lg')
df['text'].apply(lambda x: len(nlp(x).ents)) # returns number of named entities

Как я могу использовать извлечение количества именованных сущностей, используя nlp.pipe с batch_size, threads et c .. и использовать преимущества многопроцессорности?

spacy_nlp.pipe(df['text'], n_threads=6, batch_size=10)

1 Ответ

0 голосов
/ 04 марта 2020

Я не думаю, что pipe имеет параметр n_threads, но SpaCy 2.2.2 предоставляет параметры n_process, которые указывают "... Число используемых процессоров". Таким образом, вы можете распределить нагрузку на ваши процессоры как минимум.

Я, честно говоря, не уверен, насколько вы сможете распараллелить обработку одного текста. SpaCy уже чертовски быстр.

Если у вас есть куча текстов или очень большие тексты, которые можно разбить на разделы, то вы можете извлечь выгоду из распределения нагрузки, используя что-то вроде ProcessPoolExecutor , который распределяет обработку по числу процессов.

К сожалению, из-за пресловутого Pythons Global Interpreter Lock вам придется изо всех сил пытаться выжать производительность посредством распараллеливания потоков, если обработка не происходит в библиотеке c позади сцены (например, Numpy и TensorFlow).

...