gensim paling_sama dengan positif dan negatif, bagaimana cara kerjanya?

Nov 29 2020

Saya membaca jawaban yang mengatakan tentang Gensim ini most_similar:

ia melakukan aritmatika vektor: menjumlahkan vektor positif, mengurangkan negatif, lalu dari posisi yang dihasilkan, mendaftar vektor-vektor yang diketahui terdekat dengan sudut itu.

Tetapi ketika saya mengujinya, bukan itu masalahnya. Saya melatih Word2Vec dengan kumpulan "text8"data Gensim dan menguji keduanya:

model.most_similar(positive=['woman', 'king'], negative=['man'])

>>> [('queen', 0.7131118178367615), ('prince', 0.6359186768531799),...]

model.wv.most_similar([model["king"] + model["woman"] - model["man"]])

>>> [('king', 0.84305739402771), ('queen', 0.7326322793960571),...]

Mereka jelas tidak sama. bahkan skor ratu di yang pertama adalah 0.713dan yang kedua 0.732yang tidak sama.

Jadi saya bertanya lagi, Bagaimana cara most_similarkerja Gensim ? mengapa hasil kedua di atas berbeda?

Jawaban

1 gojomo Nov 29 2020 at 20:55

Penambahan dan pengurangan tidak hanya itu; untuk deskripsi yang tepat, Anda harus melihat kode sumbernya:

https://github.com/RaRe-Technologies/gensim/blob/develop/gensim/models/keyedvectors.py#LC690:~:text=def%20most_similar,self%2C

Anda akan melihat di sana bahwa penjumlahan dan pengurangan berada pada versi bernorma unit dari setiap vektor, melalui get_vector(key, use_norm=True)pengakses.

Jika Anda mengubah penggunaan model[key]menjadi model.get_vector(key, use_norm=True), Anda akan melihat perhitungan di luar metode dari vektor target memberikan hasil yang sama seperti membiarkan metode menggabungkan vektor positivedan negative.