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

但是,我现在合并了两个标题(因此“ Book A”和“ Book B”成为“ Book A Book B”),我想知道是否有一种方法可以获取“ Book A Book B”的TF-IDF矩阵通过组合“图书A”的矩阵和“图书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分钟),然后保存此矩阵以免再次进行计算将对您有所帮助太好了

07-24 09:38
查看更多