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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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