首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >POS标记的性能较慢。我可以做一些预热吗?

POS标记的性能较慢。我可以做一些预热吗?
EN

Stack Overflow用户
提问于 2012-07-23 17:45:36
回答 3查看 6K关注 0票数 14

我正在使用NLTK来对web请求中的推文进行POS标记。如您所知,Django为每个请求实例化一个请求处理程序。

我注意到这一点:对于一个请求(大约200条tweet ),第一条tweet需要大约18秒来标记,而所有后续tweet需要大约120毫秒来标记。我可以做些什么来加速这个过程?

我是否可以执行“预热请求”,以便已经为每个请求加载了模块数据?

代码语言:javascript
复制
class MyRequestHandler(BaseHandler):
    def read(self, request): #this runs for a GET request
        #...in a loop:
            tokens = nltk.word_tokenize( tweet)
            tagged = nltk.pos_tag( tokens)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-24 08:55:06

前18秒是POS标记器从磁盘解压到RAM中。如果你想解决这个问题,可以在请求函数之外自己加载标记器。

代码语言:javascript
复制
import nltk.data, nltk.tag
tagger = nltk.data.load(nltk.tag._POS_TAGGER)

然后用tagger.tag替换nltk.pos_tag。权衡的是,应用程序启动现在将花费+18秒。

票数 22
EN

Stack Overflow用户

发布于 2015-11-13 19:47:20

如前所述,每次使用标准的pos_tag方法时,NLTK都会解压。对于NLTK3.1,假设你对NLTK3.1的默认标记器(PerceptronTagger)感到满意,那么下面的方法适用于我:

首先加载标记器:

代码语言:javascript
复制
from nltk.tag.perceptron import PerceptronTagger
tagger = PerceptronTagger()

然后,每次您需要标记一些文本时:

代码语言:javascript
复制
tagset = None
tokens = nltk.word_tokenize('the mat sat on the cat')
tags = nltk.tag._pos_tag(tokens, tagset, tagger)

这基本上绕过了main方法。为我提速了上百倍。我假设同样的方法也适用于任何标记器。

票数 19
EN

Stack Overflow用户

发布于 2014-07-12 04:30:52

nltk的POS标记器非常慢:

对我来说,我可以在243秒内完成13739条推文:

  1. sent_tokenize sent_tokenize

3.05982065201

请参阅http://honnibal.wordpress.com/2013/09/11/a-good-part-of-speechpos-tagger-in-about-200-lines-of-python/,但总结如下:

代码语言:javascript
复制
Tagger     | Accuracy | Time (130k words)
-----------+----------+------------------
CyGreedyAP |    97.1% | 4s
NLTK       |    94.0% | 3m56s
Pattern    |    93.5% | 26s
PyGreedyAP |    96.8% | 12s
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11610076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档