如何解决使用 tfidf 作为功能
我想使用 n-gram 对两组文档进行分类。一种方法是使用tfidf
提取每个文档的重要词,然后制作一个如下所示的csv文件:
document,ngram1,ngram2,ngram3,...,label
1,0.0,0
2,1
...
但是由于文档数量的原因,文件会很大而且很稀疏。另一种方法是合并每组中的所有文档并提取 ngram。之后,我可以计算每个文档中每个 ngram 的出现次数,但我不确定这是最好的方法。请提供您建议的解决方案。
解决方法
在提取 ngram 之前连接组中的文档没有意义 - 以这种方式生成的任何新 ngram 将不存在于任何单个文档中。
正如您正确地注意到的那样,您使用的任何标记化方法都会产生一个大的、稀疏的矩阵。这不一定是问题 - 无论您打算用于分类的任何库都可能带有用于存储稀疏矩阵的有效表示,并且通常用于为您计算 tf-idf 矩阵。
您可能还想仅使用 ngram 的一个子集作为特征,使用 ngram-frequency 和 ngram-length(给定 ngram 中“gram”的数量)的某种组合来选择相关的 ngram。
或者,您可以使用潜在语义分析的原始形式 - 计算 tf-idf 矩阵,然后使用主成分分析(或奇异值分解,如果 ngram 和文档的数量大到使计算它们的协方差矩阵空间禁止)。
,我建议您使用 sklearn 的 tfidf 向量化器 (https://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.TfidfVectorizer.html)。它支持 ngrams 并且在内存使用方面很高效。您可以轻松地将向量化器传递给任何 sklearn 分类器来构建分类模型。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。