Bagaimana metode .similaritas dalam SpaCy dihitung?

13

Tidak yakin apakah ini situs tumpukan yang tepat, tetapi begini saja.

Bagaimana cara kerja metode .similiarity?

Wah spanya bagus! Model tfidf-nya bisa lebih mudah, tetapi w2v dengan hanya satu baris kode ?!

Dalam 10 baris tutorialnya di spaCy andrazhribernik, tunjukkan pada kami metode .similaritas yang dapat dijalankan pada token, sents, word chunks, dan docs.

Setelah nlp = spacy.load('en')dan doc = nlp(raw_text) kita bisa melakukan .similaritas kueri antara token dan potongan. Namun, apa yang sedang dihitung di balik layar dalam .similaritymetode ini ?

Spacy sudah memiliki sangat sederhana .vector, yang menghitung vektor w2v sebagai dilatih dari model sarung tangan (bagaimana keren akan sebuah .tfidfatau .fasttextmetode menjadi?).

Apakah model hanya menghitung kesamaan cosinus antara dua w2v, vektor, atau membandingkan beberapa matriks lain? Spesifikasinya tidak jelas dalam dokumentasi ; bantuan dihargai!

whs2k
sumber
1
"Betapa kerennya metode .tfidf atau .fasttext?" yang docs memberikan contoh mengganti vektor sarung tangan dengan FastText. Mungkin tidak persis sama dengan memiliki mereka bersama. Github
Carl G

Jawaban:

12

Singkatnya, jawabannya adalah:

Tautan ke Kode Souce

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

Ini terlihat seperti rumus untuk menghitung persamaan cosinus dan vektor-vektor tampaknya dibuat dengan SpaCy's .vectoryang menurut dokumentasi dilatih dari model w2v GloVe.

whs2k
sumber
6

Secara default itu adalah cosine similarity, dengan vektor dirata-rata di atas dokumen untuk kata-kata yang hilang.

Anda juga dapat menyesuaikan ini, dengan mengatur kait ke doc.user_hooks['similarity']. Komponen pipa ini membungkus fungsi kesamaan, sehingga mudah untuk menyesuaikan kesamaan:

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

silogisme_
sumber
Secara teknis, Anda tampaknya telah dikaitkan dengan SentenceSegmenterstrategi.
Carl G