Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Perl中使用Spacy和Inline::Python将多MB的原始文本元素化。为什么这么慢?_Python_Performance_Perl_Nlp_Spacy - Fatal编程技术网

在Perl中使用Spacy和Inline::Python将多MB的原始文本元素化。为什么这么慢?

在Perl中使用Spacy和Inline::Python将多MB的原始文本元素化。为什么这么慢?,python,performance,perl,nlp,spacy,Python,Performance,Perl,Nlp,Spacy,我在一个NLP上工作,需要将大量的令牌从10MB到300MB的原始输入文本文件进行逻辑化,我决定使用Inline::Python和spacy来完成这项任务。问题是速度很慢。在这之后,我创建了一袋单词,放入一个余弦相似性模块,对过去几年的文本进行分类。有没有一种处理速度更快、多处理、多线程的方法,或者是Python的管道速度较慢?我有i9,64GB RAM,RTX 2080TI和SSD通过nvme连接 下面是一段用法语对一些文本内容进行语法化并过滤停止词的代码: 使用内联Python=>您可以尝试

我在一个NLP上工作,需要将大量的令牌从10MB到300MB的原始输入文本文件进行逻辑化,我决定使用
Inline::Python
spacy
来完成这项任务。问题是速度很慢。在这之后,我创建了一袋单词,放入一个余弦相似性模块,对过去几年的文本进行分类。有没有一种处理速度更快、多处理、多线程的方法,或者是Python的管道速度较慢?我有i9,64GB RAM,RTX 2080TI和SSD通过nvme连接

下面是一段用法语对一些文本内容进行语法化并过滤停止词的代码:


使用内联Python=>您可以尝试一些速度改进:

  • 使用
    产生
    (实际上)而不是在返回列表之前在内存中构造列表。另外,我认为您不需要根据
    map
    的结果创建列表:
  • 使用集合而不是列表进行包含检查:

  • 这些应该有助于减少处理时间和内存压力。

    向I/O绑定任务添加并行性只会使其速度变慢,除非您有带有单独数据总线的并行磁盘。我对
    Inline::Python
    了解不够,无法确定是否有简单的方法来解决此问题,但是显式地构建一个引理的
    列表会导致所有东西都存储在内存中。你能把它重构成一个生成器,一次生成一个令牌,然后释放内存吗?这是一个好主意,但很愚蠢的问题,当我有一个python函数过滤器的生成器时,如何取回我的柠檬化单词?用Perl?这是我第一次将Python与Perl混合使用。老实说,这很难理解。我知道perl中有生成器。我应该使用它们吗?你们有多少实际文本,以文字或MB表示?在450到500兆之间,你们这些家伙,我会用收益率尝试你们的解决方案,然后返回给你们。但是在任何情况下,多线程或多处理都是解决方案?请首先尝试单线程性能,以了解您是否与多线程绑定(那么性能将不会随着内核数的增加而线性增加。另外,如果你喜欢这个答案,请接受。我做到了。如何将生成器对象转换为字符串?我是否也应该使用perl生成器?为什么会出现这个问题?你可能想参考一些类似问题的答案,比如
    
    def lemmatizer(words):
        doc = nlp(words)
        yield from filter(lambda x: x not in list(fr_stop), map(lambda token: token.lemma_, doc))
    
    fr_stop = set(fr_stop)
    def lemmatizer(words):
        doc = nlp(words)
        yield from filter(lambda x: x not in fr_stop, map(lambda token: token.lemma_ , doc))