ear*_*Lon 8 multithreading nlp multiprocessing stanford-nlp
截至2.0版本(02.03.2012),斯坦福分析师现在是"线程安全的" .我目前正在运行命令行工具,无法通过线程化程序来弄清楚如何利用我的多核.
在过去,这个问题已得到回答,"斯坦福分析师不是线程安全的",正如常见问题解答仍然说的那样.我希望找到一个成功穿越最新版本的人.
我已经尝试使用-t标志(-t10和-tLLP),因为这是我在搜索中找到的所有内容,但两者都抛出错误.
我发出的命令的一个例子是:
java -cp stanford-parser.jar edu.stanford.nlp.parser.lexparser.LexicalizedParser \
-outputFormat "oneline" ./grammar/englishPCFG.ser.gz ./corpus > corpus.lex
Run Code Online (Sandbox Code Playgroud)
Chr*_*ing 16
从版本2.0.5开始,您现在可以使用该选项轻松使用多个线程-nthreads k.例如,您的命令可以是这样的:
java -mx6g edu.stanford.nlp.parser.lexparser.LexicalizedParser -nthreads 4 edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz file.txt > file.stp
Run Code Online (Sandbox Code Playgroud)
(2013年之前版本2的发布无法从命令行启用多线程,但仅限于使用API时.)
在内部,您可以根据需要在一个JVM进程中同时运行尽可能多的解析线程.您可以通过获取和使用多个LexicalizedParserQuery对象(通过parserQuery()方法)或通过调用apply(...)或parseTree(...)关闭一个LexicalizedParser来执行此操作.该-nthreads k选项通过使用Executor框架将连续句子发送到不同的解析器来为您执行此操作.您还可以同时创建多个LexicalizedParser,例如,用于解析不同的语言.
多个LexicalizedparserQuery对象共享相同的语法(LexicalizedParser),但节省的内存空间并不大,因为大多数内存都转到图表解析中使用的瞬态结构.因此,如果您同时运行大量解析线程,则需要为JVM提供大量内存,如上例所示.
ps对不起,是的,一些文档仍然需要更新.但是-tLPP是用于指定特定于语言的资源的一个标志.斯坦福分析师没有-t标志.