繁体   English   中英

如何将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”),我想知道是否有一种方法可以获取“ 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM