2017-09-21 1 views
1

Anfänger NLP Frage hier:Wie wird die Ähnlichkeit von SpaCy berechnet?

Wie funktioniert die .Automatisierungsmethode?

Wow SpaCy ist großartig! Sein tfidf-Modell könnte leichter vorverarbeitet werden, aber w2v mit nur einer Codezeile (token.vector) ?! - Genial!

In seinem 10 line tutorial on spaCy andrazhribernik zeigen wir die .similarity-Methode, die auf Token, sent, Wort Chunks und Docs ausgeführt werden kann.

Nach nlp = spacy.load('en') und doc = nlp(raw_text) können wir. Ähnlichkeit Abfragen zwischen Token und Chunks. Aber was wird hinter den Kulissen in dieser .similarity Methode berechnet?

Spacy hat bereits den unglaublich einfach .vector, die den W2V Vektor berechnet, wie aus dem Glove-Modell trainiert (wie cool wäre eine .tfidf oder .fasttext Methode sein?).

Ist das Modellähnlichkeitsmodell einfach die Kosinusähnlichkeit zwischen diesen beiden w2v-GloVe-Vektoren zu berechnen oder etwas anderes zu tun? Die Einzelheiten sind in der documentation nicht klar; Jede Hilfe wird geschätzt!

Antwort

3

Angenommen, dass die Methode, auf die Sie sich beziehen, die Token-Ähnlichkeit ist, finden Sie die Funktion im Quellcode here. Wie Sie sehen können, berechnet er die Kosinusähnlichkeit zwischen den Vektoren.

Wie heißt es im Tutorial:

Ein Wort Einbetten einer Darstellung eines Wortes ist, und durch Erweiterung eine ganze Sprachkorpus, in einem Vektor oder einer anderen Form von numerischen Mapping. Dies ermöglicht es, Wörter numerisch mit einer Wortähnlichkeit zu behandeln, die als räumliche Differenz in den Dimensionen der Worteinbettungs-Abbildung dargestellt ist.

So kann die Vektorentfernung auf die Wortähnlichkeit bezogen werden.

+0

Ja, das ist was ich meine - danke! Meine Frage ist mehr: Wie werden diese Vektoren berechnet? Verwendet es nur das gleiche Word2vec-Modell, das token.vector verwendet? Ich denke, die Antwort ist ja, weil ich keine andere Vektorisierungsmethode für die Worteinbettung (z. B. Beutel mit Wörtern oder tfidf) finden kann. – whs2k

+1

Standardmäßig werden also Vektoren für eine Million englische Wörter geladen, die mit dem GloVe-Algorithmus berechnet wurden. Sie könnten Ihre eigenen Vektordarstellungen für ein Wörterbuch von Wörtern berechnen und sie mit vocab.load_vectors() laden. – blackplant

1

die Antwort gefunden, kurz gesagt, es ist ja:

Link to Souce Code

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

Das ist wie seine Formel sieht cosine similarity zur Berechnung und die Vektoren scheinen mit Spacy der .vector erstellt werden, die Dokumentation sagt trainiert von GloVes W2V-Modell.

Verwandte Themen