Wie berechnet sich die .similarity-Methode in SpaCy?

13

Nicht sicher, ob dies die richtige Stack-Site ist, aber es geht los.

Wie funktioniert die .similiarity-Methode?

Wow spaCy ist großartig! Das tfidf-Modell könnte einfacher sein, aber w2v mit nur einer Codezeile ?!

In seinem 10-zeiligen Tutorial zu spaCy andrazhribernik zeigen wir die .similarity-Methode, die für Token, Sents, Word Chunks und Docs ausgeführt werden kann.

Nach nlp = spacy.load('en')und doc = nlp(raw_text) wir können .similarity Abfragen zwischen Token und Brocken tun. Was wird bei dieser .similarityMethode jedoch hinter den Kulissen berechnet?

SpaCy hat bereits die unglaublich einfache Methode .vector, die den vom GloVe-Modell trainierten w2v-Vektor berechnet (wie cool wäre eine .tfidfoder eine .fasttextMethode?).

Berechnet das Modell einfach die Kosinusähnlichkeit zwischen diesen beiden Vektoren w2v, .vector oder vergleicht es eine andere Matrix? Die Einzelheiten sind in der Dokumentation nicht klar ; Jede Hilfe dankbar!

whs2k
quelle
1
"Wie cool wäre eine .tfidf oder .fasttext Methode?" Die Dokumentation enthält ein Beispiel für das Ersetzen der GloVe-Vektoren durch FastText. Es ist vielleicht nicht dasselbe, als wenn man sie zusammen hat. Github
Carl G

Antworten:

12

Fand die Antwort, kurz, es ist ja:

Link zum Quellcode

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

Das sieht aus wie seine Formel zur Berechnung Kosinusähnlichkeit und die Vektoren scheinen mit Spacy des zu erstellenden .vectorder Dokumentation sagt von Handschuh W2V Modell trainiert wird.

whs2k
quelle
6

Standardmäßig handelt es sich um eine Kosinusähnlichkeit, wobei Vektoren für fehlende Wörter über das Dokument gemittelt werden.

Sie können dies auch anpassen, indem Sie einen Haken auf setzen doc.user_hooks['similarity'] . Diese Pipeline-Komponente umfasst Ähnlichkeitsfunktionen, mit denen die Ähnlichkeit einfach angepasst werden kann:

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

Syllogismus_
quelle
Technisch gesehen scheinen Sie mit der SentenceSegmenterStrategie verbunden zu sein.
Carl G