【问题标题】:How to find best match with sklearn pipeline in Python如何在 Python 中找到与 sklearn 管道的最佳匹配
【发布时间】:2015-09-24 04:40:51
【问题描述】:

我有一个使用 TfidfVectorizer 和 TruncatedSVD 的管道设置。我用 sklearn 训练模型并使用余弦相似度计算两个向量之间的距离。这是我的代码:

def create_scikit_corpus(leaf_names=None):

    vectorizer = TfidfVectorizer(
        tokenizer=Tokenizer(),
        stop_words='english',
        use_idf=True,
        smooth_idf=True
    )

    svd_model = TruncatedSVD(n_components=300,
                             algorithm='randomized',
                             n_iterations=10,
                             random_state=42)
    svd_transformer = Pipeline([('tfidf', vectorizer),
                                ('svd', svd_model)])

    svd_matrix = svd_transformer.fit_transform(leaf_names)

    logging.info("Models created")

    test = "This is a test search query."
    query_vector = svd_transformer.transform(test)
    distance_matrix = pairwise_distances(query_vector, svd_matrix, metric='cosine')


    return svd_transformer, svd_matrix

问题是,一旦有了 distance_matrix 变量,我就不确定该怎么做。我想我对那到底是什么有点困惑。

我正在尝试查找与我的查询最匹配的文档。感谢您朝着正确的方向前进!

【问题讨论】:

    标签: python scikit-learn


    【解决方案1】:

    计算完 distance_matrix 后,您可以根据余弦相似度找到最接近的奇异向量...这可能是您感到困惑的原因:这个奇异向量代表什么?

    问题是这个答案并不简单,奇异向量通常不是你语料库中的文档。

    如果您想要的是最佳匹配,如“您的语料库中与此最相似的文档”,则可以做一些更简单的事情:根据余弦选择最接近的文档相似。这种方法不需要 SVD。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-08
      • 2012-04-27
      • 2014-01-29
      • 2021-03-29
      • 1970-01-01
      相关资源
      最近更新 更多