Это, кажется, ошибка в Spacy.
Какое-то время vector_norm
.
import spacy
import numpy as np
nlp = spacy.load("en")
# using u"apples" just as an example
apples = nlp.vocab[u"apples"]
print apples.vector_norm
# prints 1.4142135381698608, or sqrt(2)
print np.sqrt(np.dot(apples.vector, apples.vector))
# prints 1.0
Затем vector_norm
используется в similarity
, которая всегда возвращает значение, которое всегда половина правильного значения.
def similarity(self, other):
if self.vector_norm == 0 or other.vector_norm == 0:
return 0.0
return numpy.dot(self.vector, other.vector)/(self.vector_norm * other.vector_norm)
Если вы оцениваете оценки подобия для синонимов, возможно, это будет нормально. Но если вам нужна правильная оценка подобия косинуса, результат неверен.
Я представил вопрос here. Надеюсь, скоро он будет исправлен.
Можете ли вы хотя бы ссылаться на этот пример? – Eric