Tf-Idf vectorizer 分析来自行而不是单词的向量

Posted

技术标签:

【中文标题】Tf-Idf vectorizer 分析来自行而不是单词的向量【英文标题】:Tf-Idf vectorizer analyze vectors from lines instead of words 【发布时间】:2016-12-01 14:09:17 【问题描述】:

我正在尝试分析由行给出的文本,我希望在 python 中使用 sckit-learn 包的 TF-IDF-vectorization 对行进行矢量化。 问题是向量化可以通过单词或 n-gram 来完成,但我希望它们针对行来完成,并且我已经排除了将每一行向量化为单个单词的工作(因为这样的话并且它们的含义不会被考虑)。

查看文档我没有找到如何做到这一点,那么有没有这样的选择?

【问题讨论】:

【参考方案1】:

您似乎误解了 TF-IDF 矢量化的作用。对于每个单词(或 N-gram),它为单词分配一个权重,该权重是该词的频率 (TF) 和文档中其他词的逆频率 (IDF) 的函数。将它用于单词(例如,知道“pizza”这个词出现的频率)或 N-gram(例如,“Cheese Pizza” 表示 2-gram)是有意义的

现在,如果您在线进行,会发生什么?除非你碰巧有一个语料库中的行完全重复(例如“我在 Python 中需要帮助”),否则你的 TF-IDF 转换将是垃圾,因为每个句子在文档中只会出现一次。如果您的句子确实总是与标点符号相似,那么出于所有意图和目的,它们不是您语料库中的句子,而是单词。这就是为什么没有选择用句子做 TF-IDF 的原因:它的实际意义或理论意义为零。

【讨论】:

是的,我明白这一点,这正是我想做的。我的台词几乎完全重复。 这就是重点:如果它们几乎完全重复,那么它们在 Scikit 眼中将完全不同,就像对单词的 TF-IDF 转换将处理 "Word" 和 "工作”作为完全不同的词。如果您想要从相同单词的重复中分析它们的相似性,那么您需要对它们的单词(或 N-gram)内容进行向量化,然后将向量或一个句子与另一个向量进行比较。如果要将完整文档与另一个文档进行比较,则需要比较文档之间句子的平均余弦差。 我想做 n-gram 分析之类的事情,问题是我的行长度不同。 那么简单的单词或二元分析就可以了。自己尝试一下:在 TF-IDF 向量空间中转换你的完整句子语料库(使用单个词作为分析单位),并比较两个句子的余弦相似度,它们仅因一个非常频繁的词而异(例如“The ”),两个句子因一个极不常见的词(“鸭嘴兽”)而异,还有两个完全不同的句子。您会看到余弦相似度从第一次比较到最后一次比较减少。 我试试看。你能解释一下我如何通过这种方法找到两个句子的相似之处吗?变换到向量空间后

以上是关于Tf-Idf vectorizer 分析来自行而不是单词的向量的主要内容,如果未能解决你的问题,请参考以下文章

UITableView 删除行而不滚动

显示所有textarea行而不滚动[重复]

删除重复行而不排序[重复]

组合多个 mySQL 行而不重复

从页面中删除行而不刷新页面

添加行而不覆盖(Python)[重复]