spaCy: 优化分词

我目前正在尝试对一个文本文件进行分词,每行都是一条推文的主体文本:

"根据向FINRA报告的数据,$SALT的短期交易量百分比在12-29-17达到了39.19% http://www.volumebot.com/?s=SALT""@Good2go @krueb 我发布的图表确实支持ng会进一步下降。 Gobstopper' 2.12,可能甚至是保守的。""@Crypt0Fortune 它的抛售情况没有以前那么糟糕了。""$XVG.X 哈哈。有人刚刚触发了一连串的止损订单,并抢购了傻瓜的币。这是股票交易者手册中最古老的伎俩。"

该文件有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("分词所需时间:",timedelta(seconds=end_time - start_time))    return store

虽然代码中提到文件,但目前它只在循环处理一个文件。

需要注意的是,我只需要对内容进行分词;我不需要任何额外的标记等。


回答:

听起来你还没有优化管道。你可以通过禁用不需要的管道组件来显著提高速度,像这样:

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

仅此一项应该就能将时间缩短到大约两分钟,或更短。

如果你需要进一步加速,可以考虑使用nlp.pipe进行多线程处理。多线程的文档在这里:https://spacy.io/usage/processing-pipelines#section-multithreading

Related Posts

在使用k近邻算法时,有没有办法获取被使用的“邻居”?

我想找到一种方法来确定在我的knn算法中实际使用了哪些…

Theano在Google Colab上无法启用GPU支持

我在尝试使用Theano库训练一个模型。由于我的电脑内…

准确性评分似乎有误

这里是代码: from sklearn.metrics…

Keras Functional API: “错误检查输入时:期望input_1具有4个维度,但得到形状为(X, Y)的数组”

我在尝试使用Keras的fit_generator来训…

如何使用sklearn.datasets.make_classification在指定范围内生成合成数据?

我想为分类问题创建合成数据。我使用了sklearn.d…

如何处理预测时不在训练集中的标签

已关闭。 此问题与编程或软件开发无关。目前不接受回答。…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注