Да wup_similarity
внутренне использует синтаксисы для отдельных токенов для вычисления сходства
Wu-Palmer Similarity: Return a score denoting how similar two word senses are, based on the depth of the two senses in the taxonomy and that of their Least Common Subsumer (most specific ancestor node).
Поскольку узлы-предки для cricket
и football
будут одинаковыми.wup_similarity
вернет 1
.
Если вы хотите исправить эту проблему, использование wup_similarity
не является хорошим выбором.Простейшим способом на основе токенов будет подгонка vectorizer
, а затем вычисление сходства.Например,
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.metrics.pairwise import cosine_similarity
corpus = ["football is good,cricket is bad", "cricket is good,football is bad"]
vectorizer = CountVectorizer(ngram_range=(1, 3))
vectorizer.fit(corpus)
x1 = vectorizer.transform(["football is good,cricket is bad"])
x2 = vectorizer.transform(["cricket is good,football is bad"])
cosine_similarity(x1, x2)
Однако существуют более разумные методы измерения семантического сходства.Одним из них, который можно легко попробовать, является USE Encoder от Google.Посмотрите эту ссылку