使用 tfidf 作为特征
Posted
技术标签:
【中文标题】使用 tfidf 作为特征【英文标题】:Using tfidf as feature 【发布时间】:2021-05-12 03:28:36 【问题描述】:我想使用 n-gram 对两组文档进行分类。一种方法是使用tfidf
提取每个文档的重要单词,然后制作一个如下的csv文件:
document, ngram1, ngram2, ngram3, ..., label
1, 0.0, 0.0, 0.0, ..., 0
2, 0.0, 0.0, 0.0, ..., 1
...
但是由于文件数量的原因,文件会很大而且很稀疏。另一种方法是合并每个组中的所有文档并提取 ngram。之后,我可以计算每个文档中每个 ngram 的出现次数,但我不确定这是不是最好的方法。请提供您建议的解决方案。
【问题讨论】:
【参考方案1】:在提取 ngram 之前连接组中的文档是没有意义的 - 以这种方式生成的任何新 ngram 都不会存在于任何单个文档中。
正如您正确指出的,您使用的任何标记化方法都会产生一个大而稀疏的矩阵。这不一定是个问题 - 无论您打算使用什么库进行分类,都可能带有用于存储稀疏矩阵的有效表示,并且通常用于为您计算 tf-idf 矩阵。
您可能还希望仅使用 ngram 的一个子集作为特征,使用 ngram-frequency 和 ngram-length(给定 ngram 中的“gram”数)的某种组合来选择相关的 ngram。
或者,您可以使用潜在语义分析的原始形式 - 计算 tf-idf 矩阵,然后使用主成分分析(如果 ngram 和文档的数量大到使得计算它们的协方差矩阵空间禁止)。
【讨论】:
【参考方案2】:我建议你使用 sklearn 的 tfidf 矢量化器 (https://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.TfidfVectorizer.html)。它支持 ngrams 并且在内存使用方面非常高效。您可以轻松地将矢量化器传递给任何 sklearn 分类器来构建分类模型。
【讨论】:
以上是关于使用 tfidf 作为特征的主要内容,如果未能解决你的问题,请参考以下文章