Jak obliczana jest metoda .similarity w SpaCy?

13

Nie jestem pewien, czy to jest odpowiednia strona stosu, ale proszę bardzo.

Jak działa metoda .similiarity?

Wow spaCy jest świetne! Jego model tfidf może być łatwiejszy, ale w2v z tylko jedną linią kodu ?!

W swoim 10-liniowym samouczku na temat spaCy andrazhribernik pokazuje nam metodę .similarity, którą można uruchamiać na tokenach, wysyłkach, fragmentach słów i dokumentach.

Po nlp = spacy.load('en')i doc = nlp(raw_text) możemy wykonać .podobne zapytania między tokenami a fragmentami. Co jednak oblicza się za kulisami w tej .similaritymetodzie?

SpaCy ma już niewiarygodnie prostą funkcję .vector, która oblicza wektor w2v zgodnie z treningiem z modelu GloVe (jak fajnie byłoby zastosować metodę .tfidflub .fasttextmetodę?).

Czy model po prostu oblicza podobieństwo cosinus między tymi dwoma w2v, .vector, wektorami lub porównuje jakąś inną macierz? Szczegóły nie są jasne w dokumentacji ; jakakolwiek pomoc doceniona!

whs2k
źródło
1
„jak fajna byłaby metoda .tfidf lub .fasttext?” z Dokumenty stanowią przykład zastąpienie wektory rękawicy z Fasttekst. Być może nie jest to dokładnie to samo, co ich połączenie. Github
Carl G

Odpowiedzi:

12

Znalazłem odpowiedź, krótko mówiąc: tak:

Link do kodu Souce

return numpy.dot(self.vector, other.vector) / (self.vector_norm * other.vector_norm)

Wygląda na to, że jest to wzór na obliczanie podobieństwa cosinusowego, a wektory wydają się być tworzone za pomocą SpaCy, .vectorktórego dokumentacja mówi, że jest wyuczona z modelu w2v GloVe.

whs2k
źródło
6

Domyślnie jest to podobieństwo kosinusowe, z wektorami uśrednionymi w dokumencie dla brakujących słów.

Możesz to również dostosować, ustawiając hak na doc.user_hooks['similarity']. Ten komponent potoku otacza funkcje podobieństwa, ułatwiając dostosowanie podobieństwa:

https://github.com/explosion/spaCy/blob/develop/spacy/pipeline.pyx#L50

sylogizm_
źródło
Wygląda na to, że masz związek ze SentenceSegmenterstrategią.
Carl G