提高预处理速度

时间:2019-01-08 10:26:55

标签: gensim lemmatization

以下代码用于使用自定义的lemmatizer函数预处理文本:

%%time
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from gensim.utils import simple_preprocess, lemmatize
from gensim.parsing.preprocessing import STOPWORDS
STOPWORDS = list(STOPWORDS)

def preprocessor(s):
    result = []
    for token in lemmatize(s, stopwords=STOPWORDS, min_length=2):
        result.append(token.decode('utf-8').split('/')[0])
    return result

data = pd.read_csv('https://pastebin.com/raw/dqKFZ12m')

%%time
X_train, X_test, y_train, y_test = train_test_split([preprocessor(x) for x in data.text],
                                                    data.label, test_size=0.2, random_state=0)
#10.8 seconds

问题: 可以提高去词素化过程的速度吗?

在大约80,000个文档的大型语料库上,当前大约需要两个小时。 lemmatize()函数似乎是主要瓶颈,因为simple_preprocess之类的gensim函数非常快。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您可能希望重构代码,以便更轻松地分别计时每个部分。 lemmatize()可能是您瓶颈的一部分,但其他可能的重要贡献者还可能是:(1)通过列表{{1}一次一次编写大型文档}; (2)utf-8解码。

gensim .append()分别依赖于lemmatize()库中的parse()函数;您可以尝试其他lemmatization实用程序,例如NLTK或Spacy中的。

最后,由于回原位化可能是一项固有的高成本操作,并且可能是同一源数据在管道中多次处理的情况,因此您可能需要对流程进行工程设计,以便将结果重新写入磁盘,然后在后续运行中重复使用-而不是始终“在线”完成。