余弦相似度= 1.0,即使源/输入字符串具有在语料库中看不到的额外标记?

问题描述 投票:0回答:1

我正在使用scikit-learn中的TfidfVectorizer和cosine_similarity。当我有一个新的字符串并且尝试在原始训练语料库中找到与该字符串的余弦相似度时,我注意到即使该字符串与该新字符串中的精确匹配plus其他新颖标记完全相同,余弦相似度仍为1.0字符串,无论有多少这样的附加标记。

例如,如果x,y和z根本不在原始语料库中,则形式为“ a b x y z”的新字符串与原始字符串“ a b”的余弦相似度为1.0。

我了解这是怎么发生的,因为根据训练语料库建立的功能对新字符串进行矢量化处理时,会忽略新标记,但是我希望能够检测到“ abxyz”并不是真正的“完美”匹配项“ ab”。

关于如何将某些东西纳入对这种类型的差异(新颖代币的存在)敏感的匹配的任何想法?

scikit-learn cosine-similarity tfidfvectorizer
1个回答
0
投票

我无法复制您的描述。试试这个:

    documents = (
    "The sky is blue",
    "The sky is blue you know",
    "The sun is bright",
    "The sun in the sky is bright",
    "We can see the shining sun, the bright sun"
    )

    from sklearn.feature_extraction.text import TfidfVectorizer
    tfidf_vectorizer = TfidfVectorizer()
    tfidf_matrix = tfidf_vectorizer.fit_transform(documents)
    print(tfidf_matrix.shape)

    from sklearn.metrics.pairwise import cosine_similarity
    cosine_similarity(tfidf_matrix[0:1], tfidf_matrix)

您的输出将是

    array([[1.        , 0.67166626, 0.35369001, 0.50353381, 0.13245011]])

这表明第一句和第二句之间的相似度是0.67,而不是1.0

© www.soinside.com 2019 - 2024. All rights reserved.