如何在Python中找到与sklearn管道的最佳匹配

时间:2015-07-06 21:26:41

标签: python scikit-learn

我使用TfidfVectorizer和TruncatedSVD进行了Pipeline设置。我使用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变量,我不知道该怎么做。我想我对这究竟是什么感到困惑。

我正在尝试查找哪个文档与我的查询最匹配。谢谢你推动正确的方向!

1 个答案:

答案 0 :(得分:1)

一旦你计算了distance_matrix,就可以根据余弦相似性找到最接近的奇异向量......这可能是你被混淆的原因:这个奇异向量代表什么?

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

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