python - 如何将 TF-IDF 分数组合成相当于连接两个字符串
问题描述
我有一个包含 5000 个书名的语料库,我正在尝试对这些书名进行一些聚类。我正在使用 sklearn TfidfVectorizer 库为每个标题生成 TF-IDF 矩阵。
但是,我现在结合了两个标题(所以“Book A”和“Book B”变成了“Book A Book B”),我想知道是否有办法获取“Book A Book B”的 TF-IDF 矩阵” 通过组合“Book A”的矩阵和“Book B”的矩阵。
我已经尝试再次重新计算 TF-IDF 分数,但这可能需要很长时间,如果有更快的方法,我更愿意这样做,因为我实际上需要为不同的标题组合执行数千次。
下面的代码显示了我现在正在做的事情。
import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
tf = TfidfVectorizer(analyzer='word', ngram_range=(1, 3), min_df=0, stop_words='english')
titles = list_of_strings
tfidf_matrix = tf.fit_transform(titles)
# This gives a matrix roughly (5000, 20000)
new_title = titles[0] + ' ' + titles[1]
# Get the tfidf_matrix for the new_title
如果有类似的东西,我会很棒:
matrix_for_book_a + matrix_for_book_b
这给出了“Book A Book B”的矩阵,但我不确定这是否可能。
感谢您的任何帮助或建议。
解决方案
您可以添加 tf-idf 矩阵,它仍然有些相关,但是,向量之后不会被归一化,并且它们的归一化本身并不比向量化容易。对于基于相似度得分(可以用 tfidf 计算)的聚类数据,强烈建议使用归一化向量。另外,请记住,如果您真的想通过加法将这两者合二为一,则它们的词汇表必须相同,否则将毫无意义(甚至尺寸会有所不同)。此外,问题在于 tf-idf 的性质,如果某个术语出现在一个数据集中的许多文档中,而在其他几个文档中,他添加的 tf-idf 分数可能不会像从 skratch 计算的那样好和相关。所以我对你最好的建议确实如你所说
再次重新计算 TF-IDF 分数
对于 5000 个标题(如果合并 idk 则为 10000 个),它仍然不会花费超过一些合理的时间(取决于您的机器,在我的机器上大约 5-10 分钟),然后保存此矩阵以不再进行计算就可以了一个很大的帮助。
推荐阅读
- linux - linux:如何以递归方式批量重命名文件和目录?
- c - 从c中的不兼容类型'const void'错误分配给'uint64_t'(又名'unsigned long long')
- regex - 如何计算一组字符的出现次数?
- ibm-cloud-infrastructure - 尝试在 VSI 创建上传递用户元数据时收到错误请求
- ios - 相机无法在 iOS 上运行,getUserMedia 出错
- python - 包装来自外部包的所有类方法
- c# - C# TeamCity:多个 SDK 版本问题
- android - 如何在 FragmentDialog 中设置标题和文本?
- javascript - 如何检查动态命名父级的子属性是否存在?
- jdbc - Hive LLAP 守护程序无法通过 ODBC/JDBC 使用