我有一个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分钟),然后保存此矩阵以免再次进行计算将对您有所帮助太好了