web-dev-qa-db-de.com

Erhalten Sie die meisten ähnlichen Wörter, wenn Sie den Vektor des Wortes (nicht das Wort selbst) angeben.

Mit der gensim.models.Word2Vec-Bibliothek haben Sie die Möglichkeit, ein Modell und ein "Wort" anzugeben, für das Sie die Liste der ähnlichsten Wörter finden möchten:

model = gensim.models.Word2Vec.load_Word2vec_format(model_file, binary=True)
model.most_similar(positive=[Word], topn=N)

Ich frage mich, ob es eine Möglichkeit gibt, dem System das Modell und einen "Vektor" als Eingabe zu geben, und das System bitten, die obersten ähnlichen Wörter zurückzugeben (deren Vektoren sehr nahe am gegebenen Vektor liegen). Etwas ähnlich wie:

model.most_similar(positive=[VECTOR], topn=N)

Ich brauche diese Funktionalität für eine zweisprachige Einstellung, in der ich zwei Modelle (Englisch und Deutsch) habe, sowie einige englische Wörter, für die ich die ähnlichsten deutschen Kandidaten finden muss .. Was ich tun möchte, ist zu bekommen der Vektor jedes englischen Wortes aus dem englischen Modell:

model_EN = gensim.models.Word2Vec.load_Word2vec_format(model_file_EN, binary=True)
vector_w_en=model_EN[Word_EN]

und fragen Sie dann das deutsche Modell mit diesen Vektoren ab.

model_DE = gensim.models.Word2Vec.load_Word2vec_format(model_file_DE, binary=True)
model_DE.most_similar(positive=[vector_w_en], topn=N)

Ich habe dies in C implementiert, indem die ursprüngliche Distanzfunktion im Word2vec-Paket verwendet wurde. Aber jetzt brauche ich es in Python, um es in meine anderen Skripte integrieren zu können.

Wissen Sie, ob es bereits eine Methode in der gensim.models.Word2Vec-Bibliothek oder ähnlichen Bibliotheken gibt, die dies tut? Muss ich es selbst umsetzen?

14
amin

Die Methode similar_by_vector gibt die obersten-N ähnlichsten Wörter nach Vektor zurück

similar_by_vector(vector, topn=10, restrict_vocab=None)
14
user48135

Ich glaube nicht, dass das, was Sie erreichen wollen, jemals eine genaue Antwort geben könnte. Einfach, weil die beiden Modelle separat trainiert werden. Und obwohl sowohl das englische als auch das deutsche Modell ähnliche Abstände zwischen ihren jeweiligen Word-Vektoren haben wird. Es gibt keine Garantie dafür, dass der Wortvektor für 'Haus' dieselbe Richtung hat wie der Wortvektor für 'Haus'.

Einfach ausgedrückt, wenn Sie beide Modelle mit der Vektorgröße = 3 ... trainiert haben. Und "House" hat einen Vektor [0.5,0.2,0.9], es gibt keine Garantie, dass "Haus" den Vektor [0.5,0.2,0.9] oder sogar etwas in der Nähe. 

Um dies zu lösen, können Sie zuerst das englische Wort in Deutsch übersetzen und dann den Vektor für dieses Wort verwenden, um nach ähnlichen Wörtern im deutschen Modell zu suchen.

TL: DR; Sie können nicht einfach Vektoren von einem Sprachmodell in ein anderes einbinden und erwarten genaue Ergebnisse.

0
Dachrimar