【问题标题】:what's the difference between pd.DataFrame and sklearn transformed SparseMatrix? why sklearn transformed SparseMatrix so fast?pd.DataFrame 和 sklearn 转换的 SparseMatrix 有什么区别?为什么 sklearn 转换 SparseMatrix 的速度如此之快?
【发布时间】:2022-01-15 03:34:29
【问题描述】:

我目前正在使用包含 100000 个文档的情绪分析数据集。

通过使用 sklearn 的 TfIdfVector,我将这些文档转换为 (100000, 20000) vecs。它适用于 trains_test_split 和 LogisticRegression,但打印结果确实需要几分钟。

然后我尝试gensim.doc2Vec.Doc2Vec 模型将这些文档训练为 (10000, 20000) vecs。 当doc2vec 生成时,我将这些 vecs 转换为如下数据框:

train_doc2vec = model.dv.vectors[:8000]
test_doc2vec = model.dv.vectors[8000:]

train_df = pd.DataFrame(train_doc2vec)
train_df.head(5)

所有这些都很好。但是当谈到train_test_split 时,它需要几个小时以上,但仍然没有分裂......我已经尝试del train_doc2vec and model 来保存记忆,但都没有成功......

del train_doc2vec
del model

无论如何我可以做些什么来让 gensim 生成的 doc2vec 工作得更快,或者我有什么问题吗??

【问题讨论】:

    标签: python pandas scikit-learn gensim doc2vec


    【解决方案1】:

    您真的是指来自Doc2Vec 的(10000, 20000) 结果吗? (其他 90,000 个文档发生了什么?)

    我将假设您的意思是 (100000, 20000),而不是:您使用 Doc2Vec 为每个文档创建一个向量。

    Doc2Vec 是一种用于创建密集表示的算法:将文档压缩到少得多的维度,其中没有一个是0.0。已发布的Doc2Vec 作品输出的典型维度是 100-1000 维度计数,不是 20000。

    所以这是一个初始错误。 (如果您一直在研究任何建议如此大维度的文档/教程/指南,那么作者不知道他们在做什么,并且您应该丢弃该来源。如果您没有在研究任何文档/教程/guide 演示了正确的 Doc2Vec 用法,你应该这样做!只是从可能的参数的整个范围内即兴发挥,并选择远离默认和通常范围的东西作为 vector_size=20000,将导致大量时间浪费。)

    另外,尽管有这个问题,我不认为train_test_split() 一定会在一个巨大的密集阵列上运行很长时间,但我可以想象其他步骤(如LogisticRegression)需要更长的时间。所以也许这就是你其他未显示的代码步骤的真正延迟。不过,真正的解决方法是在其通常的性能范围内使用Doc2Vec。

    【讨论】:

    • tks 的建议。因为我试图将句子与否定句和正常句区分开来。我尝试使用 tfidf(20000 个特征)+lgb,f1_score 为 79%。当谈到 word2vec(使用 google 的预训练并使用平均 vec of words )+ lightgbm 时,f1_score 太低了,说只有 65%。所以我认为我面临的问题是功能很少。然后我尝试了具有 20000 个功能的 doc2vec,它似乎程序被阻塞了。
    • 我不记得在Doc2Vec 中看到过任何使用 20,000 个维度的项目。甚至在数千万份文档上发表的作品——远远超过你的 100,000 份——我只记得看到使用了多达 1,000 个维度。
    猜你喜欢
    • 1970-01-01
    • 2021-05-11
    • 1970-01-01
    • 2016-11-19
    • 2017-03-14
    • 2014-07-13
    • 2019-07-20
    • 1970-01-01
    • 2021-05-28
    相关资源
    最近更新 更多