我不熟悉Dask API /限制,但通常:
如果您可以将数据迭代为(单词,标签)元组(甚至忽略
Doc2Vec
/Taggeddocument
步骤),那么Dask端将已经处理,并将这些元组转换为Taggeddocument
实例应该是微不足道的通常,对于大型数据集,您不想(并且可能没有足够的RAM来)将整个数据集实例化为
list
内存中的内容-因此,涉及list()
或的尝试.append()
可能在某种程度上都可以正常工作,但会耗尽本地内存(导致严重的交换)和/或仅未达到数据末尾。
大型数据集的首选方法是创建一个可迭代的对象,该对象每次被要求对数据进行迭代(因为
Doc2Vec训练将需要多次通过)可以依次提供每个项目,但永远不要将整个数据集读入内存中的对象。
关于此模式的一个不错的博客文章是:Python中的数据流:生成器,迭代器,可迭代
给定您显示的代码,我怀疑适合您的方法可能是:
from gensim.utils import simple_preprocessclass MyDataframeCorpus(object): def __init__(self, source_df, text_col, tag_col): self.source_df = source_df self.text_col = text_col self.tag_col = tag_col def __iter__(self): for i, row in self.source_df.iterrows(): yield Taggeddocument(words=simple_preprocess(row[self.text_col]), tags=[row[self.tag_col]])corpus_for_doc2vec = MyDataframeCorpus(df, 'claim_txt', 'claim_no')



