gpt4 book ai didi

python - 如何使用 spaCy (nlp.pipe) 进行预处理来解决大型数据集性能缓慢的问题

转载 作者:太空宇宙 更新时间:2023-11-03 20:41:40 26 4
gpt4 key购买 nike

我在使用 spaCy 2.1 时遇到问题,需要花费很长时间来预处理一些英语和德语文本,以便我可以在机器翻译相关项目中使用它们。使用正则表达式进行简短的清理后,我使用 spaCy 的 nlp.pipe() 函数来执行一些过程(词形还原、用词性标记每个单词以及拆分德语中的复合词[我自己开发的]),但是问题是它需要很长时间,我想知道是否有更好的方法可以加快速度。

我使用的数据集非常大:包含英语和德语的古腾堡计划电子书,以及两种语言的精选新闻文章以及两种语言的整个维基百科数据库。我在大学的 HPC 网格上运行此代码,在这里我可以为每个作业分配最多 40 个 CPU 核心和 250GB RAM,或者选择高达 RTX 2080 Ti 的 NVIDIA GPU。无论我尝试哪种组合,似乎都需要几天时间才能完成每个文本的词形还原阶段。

我尝试使用 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)]

我希望管道比现在快得多(而不是花费几天时间来完成第一步。

最佳答案

我建议在 nlp.pipe 顶部使用多处理正如这里所介绍的 https://spacy.io/usage/examples#multi-processing 。不幸的是,由于 python 的 GIL 和多线程问题,nlp.pipe(n_threads=xxx) n_threads 已弃用 ( https://spacy.io/api/language#pipe )。

关于python - 如何使用 spaCy (nlp.pipe) 进行预处理来解决大型数据集性能缓慢的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56826789/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com