使用 sklearn 计算两个不同列的单独 tfidf 分数

2023-12-24

我正在尝试计算一组查询和每个查询的一组结果之间的相似性。我想使用 tfidf 分数和余弦相似度来做到这一点。我遇到的问题是我无法弄清楚如何使用两列(在 pandas 数据框中)生成 tfidf 矩阵。我已经连接了两列,它工作得很好,但使用起来很尴尬,因为它需要跟踪哪个查询属于哪个结果。我将如何同时计算两列的 tfidf 矩阵?我正在使用 pandas 和 sklearn。

这是相关代码:

tf = TfidfVectorizer(analyzer='word', min_df = 0)
tfidf_matrix = tf.fit_transform(df_all['search_term'] + df_all['product_title']) # This line is the issue
feature_names = tf.get_feature_names() 

我试图将 df_all['search_term'] 和 df_all['product_title'] 作为参数传递到 tf.fit_transform 中。这显然不起作用,因为它只是将字符串连接在一起,这不允许我将 search_term 与 Product_title 进行比较。另外,是否有更好的方法来解决这个问题?


通过将所有单词组合在一起,您已经有了一个良好的开端;通常,像这样的简单管道就足以产生良好的结果。您可以使用构建更复杂的特征处理管道pipeline and preprocessing。以下是它对您的数据的作用:

import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.preprocessing import FunctionTransformer
from sklearn.pipeline import FeatureUnion, Pipeline

df_all = pd.DataFrame({'search_term':['hat','cat'], 
                       'product_title':['hat stand','cat in hat']})

transformer = FeatureUnion([
                ('search_term_tfidf', 
                  Pipeline([('extract_field',
                              FunctionTransformer(lambda x: x['search_term'], 
                                                  validate=False)),
                            ('tfidf', 
                              TfidfVectorizer())])),
                ('product_title_tfidf', 
                  Pipeline([('extract_field', 
                              FunctionTransformer(lambda x: x['product_title'], 
                                                  validate=False)),
                            ('tfidf', 
                              TfidfVectorizer())]))]) 

transformer.fit(df_all)

search_vocab = transformer.transformer_list[0][1].steps[1][1].get_feature_names() 
product_vocab = transformer.transformer_list[1][1].steps[1][1].get_feature_names()
vocab = search_vocab + product_vocab

print(vocab)
print(transformer.transform(df_all).toarray())

['cat', 'hat', 'cat', 'hat', 'in', 'stand']

[[ 0.          1.          0.          0.57973867  0.          0.81480247]
 [ 1.          0.          0.6316672   0.44943642  0.6316672   0.        ]]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 sklearn 计算两个不同列的单独 tfidf 分数 的相关文章

随机推荐