Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.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
Python 斯坦福德和芹菜-如何提高性能?_Python_Python 2.7_Celery_Nltk_Stanford Nlp - Fatal编程技术网

Python 斯坦福德和芹菜-如何提高性能?

Python 斯坦福德和芹菜-如何提高性能?,python,python-2.7,celery,nltk,stanford-nlp,Python,Python 2.7,Celery,Nltk,Stanford Nlp,我有一个用Python 2.7编写的软件,它大量使用芹菜。现在,我使用Stanforder添加了NER支持,我想知道如何在标记多个文档时提高性能;每个标记任务都在一个新辅助进程上运行 我这样实现了斯坦福德纳: from nltk.tag import StanfordNERTagger class NETagger(object): def __init__(self, path): model = '/opt/Projects/nlp/stanford-ner-2015

我有一个用Python 2.7编写的软件,它大量使用芹菜。现在,我使用Stanforder添加了NER支持,我想知道如何在标记多个文档时提高性能;每个标记任务都在一个新辅助进程上运行

我这样实现了斯坦福德纳:

from nltk.tag import StanfordNERTagger
class NETagger(object):
    def __init__(self, path):
        model = '/opt/Projects/nlp/stanford-ner-2015-04-20/classifiers/german/german.hgc_175m_600.crf.ser.gz'
        jar = '/opt/Projects/nlp/stanford-ner-2015-04-20/stanford-ner.jar'
        self.tagger = StanfordNERTagger(model, jar, encoding='utf-8', java_options='-mx8000m')

    def assign_tags(self, file):
        with open(file, 'r') as f:
            tokens = f.readlines()
            ne_result = self.tagger.tag(tokens)

        [... write ne_result to file ...]
芹菜就是这样。我有一个任务,将要通过NER的每个文件的一个子任务排队:

nertask = ExperimentalDataminingNER()
tagger = NETagger('path/to/files')

for file in 'path/to/files':
    [... create the task context ...]
    nertask.apply_async((context,), queue='default', task_id=id)
子任务只做这个(我剥离的行对NER没有影响):

基本上,我拥有的每一份文档都被标记在一个工人身上。我让他们排队,工人们做他们的工作,做得很好

我的问题是:如果我不使用芹菜,只是开箱即用的斯坦福德,在我的机器上处理一个文件需要4-7秒。当同时运行四个NER任务时(我有四个工人),每个任务都需要12到18秒。虽然我使用芹菜的速度总体上还是更快,但我想知道我是否可能在某处引入了某种人工瓶颈?还是因为资源太多而无法解决

顺便说一下,我正在使用
ntlk

编辑

我试着在芹菜之外运行四个并行的Stanforder实例,结果是一样的,我注意到每个文件所需的时间急剧增加


我还注意到,对于标准实现,我的测量是关闭的,实际上是4-7秒(现在编辑),这对芹菜实现有点不好。

您是否尝试在芹菜外手动运行4个并行NER处理?不,现在将执行,并让您知道需要多长时间。不熟悉工具箱,但是:如果Stanforder已经在一个文档中并行实现,那么让4个工人启动不同的实例只会使他们彼此阻塞一个实例,这可能是你看不到更大加速的原因。编辑我的问题。对不起,我对斯坦福德纳的了解还不够,无法回答你关于并行处理的问题。如果在芹菜之外,并行处理比单进程需要更多的时间,这意味着,斯坦福德纳可能是一项消耗RAM/CPU的任务。不幸的是,我不知道这个工具,但您可以尝试在运行计算时测量您的pc性能。
class ExperimentalDataminingNER():
    [...]
    tagger.assign_tags(input_file_file)