Подтвердить что ты не робот

Медленная производительность маркировки POS. Могу ли я сделать какое-то предварительное прогревание?

Я использую NLTK для POS-тегов в твитах твитов в веб-запросе. Как вы знаете, Django создает экземпляр обработчика запросов для каждого запроса.

Я заметил это: для запроса (~ 200 твитов) для первого твита требуется ~ 18 секунд для тега, а для всех последующих твитов требуется ~ 120 миллисекунд для тега. Что я могу сделать, чтобы ускорить процесс?

Можно ли выполнить "запрос предварительного нагрева", чтобы данные модуля уже загружались для каждого запроса?

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)
4b9b3361

Ответ 1

Эти первые 18 секунд - это теггер POS, который не загружается с диска в оперативную память. Если вы хотите обойти это, загрузите теггер самостоятельно вне функции запроса.

import nltk.data, nltk.tag
tagger = nltk.data.load(nltk.tag._POS_TAGGER)

Затем замените nltk.pos_tag на tagger.tag. Компромисс заключается в том, что запуск приложения теперь займет + 18 секунд.

Ответ 2

Как указывалось ранее, NLTK разбрасывается каждый раз, когда вы используете стандартный метод pos_tag. Для NLTK 3.1, если вы довольны тегом по умолчанию NLTK (PerceptronTagger), для меня работает следующий метод:

Сначала загрузите теггер:

from nltk.tag.perceptron import PerceptronTagger
tagger = PerceptronTagger()

Затем каждый раз вам нужно пометить текст:

tagset = None
tokens = nltk.word_tokenize('the mat sat on the cat')
tags = nltk.tag._pos_tag(tokens, tagset, tagger)

Это в основном обходит основной метод. Ускорьте вещи сто раз для меня. Я предполагаю, что тот же самый метод работает для любого из тегов.

Ответ 3

nltk POS-теггер очень медленный:

Для меня я могу сделать 13739 твитов за 243 секунды:

  • sent_tokenize 1.06190705299
  • word_tokenize 4.86865639687
  • pos_tag 233.487122536
  • chunker 3.05982065201

См. http://honnibal.wordpress.com/2013/09/11/a-good-part-of-speechpos-tagger-in-about-200-lines-of-python/ но для подведения итогов:

Tagger     | Accuracy | Time (130k words)
-----------+----------+------------------
CyGreedyAP |    97.1% | 4s
NLTK       |    94.0% | 3m56s
Pattern    |    93.5% | 26s
PyGreedyAP |    96.8% | 12s