spaCy: оптимизация токенизации - PullRequest
0 голосов
/ 19 октября 2018

В настоящее время я пытаюсь токенизировать текстовый файл, где каждая строка представляет собой основной текст твита:

"According to data reported to FINRA, short volume percent for $SALT clocked in at 39.19% on 12-29-17 http://www.volumebot.com/?s=SALT"
"@Good2go @krueb The chart I posted definitely supports ng going lower.  Gobstopper' 2.12, might even be conservative."
"@Crypt0Fortune Its not dumping as bad as it used to...."
"$XVG.X LOL. Someone just triggered a cascade of stop-loss orders and scooped up morons' coins. Oldest trick in the stock trader's book."

Файл имеет длину 59 397 строк (данные за день), и яиспользование spaCy для предварительной обработки / токенизации.В настоящее время это занимает у меня около 8,5 минут, и мне было интересно, есть ли способ оптимизировать следующий код для ускорения, так как 8,5 минут кажется ужасно долгим для этого процесса:

def token_loop(path):
    store = []
    files = [f for f in listdir(path) if isfile(join(path, f))]

    start_time = time.monotonic()
    for filename in files:
        with open("./data/"+filename) as f:
            for line in f:
                tokens = nlp(line.lower())
                tokens = [token.lemma_ for token in tokens if not token.orth_.isspace() and token.is_alpha and not token.is_stop and len(token.orth_) != 1]
                store.append(tokens)

    end_time = time.monotonic()
    print("Time taken to tokenize:",timedelta(seconds=end_time - start_time))

    return store

Хотя он говорит о файлах, он в настоящее времятолько зацикливание на 1 файл.

Просто чтобы заметить, мне нужно только это для токенизации содержимого;Мне не нужно никаких дополнительных тегов и т. Д.

1 Ответ

0 голосов
/ 19 октября 2018

Похоже, вы еще не оптимизировали конвейер.Вы значительно увеличите скорость, отключив ненужные компоненты конвейера, например:

nlp = spacy.load('en', disable=['parser', 'tagger', 'ner'])    

Это должно привести к снижению до двухминутной отметки, или даже лучше, само по себе..

Если вам нужна дополнительная скорость, вы можете посмотреть на многопоточность, используя nlp.pipe.Документы для многопоточности здесь: https://spacy.io/usage/processing-pipelines#section-multithreading

...