gensim paling_sama dengan positif dan negatif, bagaimana cara kerjanya?
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.713
dan yang kedua 0.732
yang tidak sama.
Jadi saya bertanya lagi, Bagaimana cara most_similar
kerja Gensim ? mengapa hasil kedua di atas berbeda?
Jawaban
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 positive
dan negative
.