如何合并 TF-IDF 分数相当于连接两个字符串

How to combine TF-IDF scores to be the equivalent of concatenating two strings

我有一个包含 5000 个书名的语料库,我正在尝试对这些书名执行一些聚类。我正在使用 sklearn TfidfVectorizer 库为每个标题生成 TF-IDF 矩阵。

但是,我现在合并了两个标题(所以 "Book A" 和 "Book B" 变成了 "Book A Book B"),我想知道是否有办法获得 TF-IDF 矩阵 "Book A Book B" 通过组合 "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 计算的那么好和相关。所以我给你最好的建议确实如你所说

recalculating the TF-IDF score again

对于 5000 个标题(如果合并了 idk,则为 10000 个)它仍然不会超过一些合理的时间(取决于你的机器,在我的机器上大约 5-10 分钟)然后保存这个矩阵不超过再次计算会对你有很大的帮助。