如何解决使用 sklearn TF-IDF 矢量化器进行文本转换会生成太大的 csv 文件
我有 1000 个文本,每个文本有 200-1000 个单词。文本 csv 文件的大小约为 10 MB。当我使用此代码对它们进行矢量化时,输出 CSV 的大小非常大(2.5 GB)。我不确定我做错了什么。非常感谢您的帮助。代码:
import numpy as np
import pandas as pd
from copy import deepcopy
import glob
from sklearn.feature_extraction.text import TfidfVectorizer
from numpy import savetxt
df = pd.read_csv('data.csv')
#data has two columns: teks and groups
filtered_df = deepcopy(df)
vectorizer = TfidfVectorizer()
vectorizer.fit(filtered_df["teks"])
vector = vectorizer.transform(filtered_df["teks"])
print(vector.shape) # shape (1000,83000)
savetxt('dataVectorized1.csv',vector.toarray(),delimiter=',')
解决方法
稀疏矩阵(如这里的 vector
)不应该被转换为密集矩阵(就像你对 .toarray()
所做的那样)并保存为 CSV 文件;这样做是没有意义的,并且使稀疏矩阵本身的整个概念无效。鉴于此,大尺寸也就不足为奇了。
您应该认真考虑将稀疏 vector
保存为适当的格式,例如使用 scipy.sparse
:
import scipy.sparse
scipy.sparse.save_npz('dataVectorized1.npz',vector)
另请参阅 Save / load scipy sparse csr_matrix in portable data format 以了解可能的其他选项。
如果出于任何原因,您必须坚持使用 CSV 文件进行存储,您可以尝试通过简单地在文件名中使用 .gz
扩展名来压缩输出文件;来自np.savetxt()
documentation:
如果文件名以 .gz
结尾,文件会自动以压缩的 gzip 格式保存。 loadtxt
透明地理解 gzip 压缩文件。
所以,这应该可以:
np.savetxt('dataVectorized1.csv.gz',vector.toarray(),delimiter=',')
然而,我真的不推荐这个;请记住:
- 除了为教程和介绍性展览提供便利之外,CSV 文件作为 ML 任务的输入并没有真正具有任何“特殊”地位,正如您可能认为的那样。
- 绝对没有为什么不能将效率更高的
.npz
文件用作进一步下游任务(例如分类、可视化和聚类)的输入;相反,在类似情况下使用它是非常合理和推荐的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。