[英]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”),我想知道是否有一种方法可以获取“ 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分钟),然后保存该矩阵以免再次遍历计算就可以了太好了
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.