如何加快缓慢的 POS 标记?

How to speed up slow POS tagging?

在你将我重定向到另一个 Whosebug 页面之前,因为我知道有几个关于加速 POS 标记的问题,我已经浏览并根据此处的建议加速了我的代码:Slow performance of POS tagging. Can I do some kind of pre-warming?

我正在使用 Python 3.6。我有包含约 100,000 个单词的列表,这些单词已使用 nltk 标记化。这些是非常庞大的列表,所以我知道标记所有这些词本身会花费一些时间。我已经在外面加载了标注器,如下:

def tag_wordList(tokenizedWordList):       
    from nltk.tag.perceptron import PerceptronTagger
    tagger=PerceptronTagger() # load outside

    for words in tokenizedWordList:
         taggedList = tagger.tag(tokenizedWordList) # add POS to words

    return taggedList

采取这一步大大加快了速度,但要完成 100,000 多个单词,仍需要 1.5 多个小时(而且仍然是 运行)。该代码适用于较小的数据集。我相信我曾经尝试过将列表转换为一组,但没有太大改进,尽管我将再次尝试以取得良好的效果。谁有其他提高效率的技巧?

如果这确实是您的标记代码,那么在转到下一个句子之前,您将对每个十个单词的句子标记十次。在抱怨工具太慢之前先了解它们的工作原理。

您可以通过在单词标记化句子的完整列表上调用 pos_tag_sents() 来进一步加快速度,而不是为每个句子单独启动它(即使只启动一次)。

tagged_sents = nltk.pos_tag_sents(tokenized_sentences)