我正在尝试为文本挖掘问题构建一个矢量化器。使用的词汇表应该从给定的文件中拟合。但是,构建字典vocabulary_
的文件数量相对较大(比如10 ^ 5)。是否有一种简单的方法来并行化?
更新:正如我发现的,有一个"手册"方式......不幸的是,它仅适用于min_df=1
让我举例说明我为两个核心所做的事情:
将您的输入拆分为两个块。训练矢量化器(比如vec1和vec2),每个都在一个核心和一个数据块上(我使用multiprocessing.Pool
)。然后,
# Use sets to dedupe token
vocab = set(vec1.vocabulary_) | set(vec2.vocabulary_)
# Create final vectorizer with given vocabulary
final_vec = CountVectorizer(vocabulary=vocab)
# Create the dictionary final_vec.vocabulary_
final_vec._validate_vocabulary()
将完成这项工作。
答案 0 :(得分:0)
您可以使用mllib
,apache-spark
中包含的机器学习库将处理跨节点的分发。
这是一个关于如何使用它进行特征提取的教程。
您还可以查看 如何优化速度 here的sklearn文档,以获得灵感。