Подтвердить что ты не робот

Получите большинство похожих слов, учитывая вектор слова (а не само слово)

Используя библиотеку gensim.models.Word2Vec, вы можете предоставить модель и "слово", для которых вы хотите найти список наиболее похожих слов:

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

Интересно, есть ли возможность дать системе ввести модель и "вектор" и попросить систему вернуть верхушки похожих слов (их векторы очень близки к данному вектору). Нечто похожее на:

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

Мне нужна эта функциональность для двуязычной настройки, в которой у меня есть 2 модели (английский и немецкий), а также некоторые английские слова, для которых мне нужно найти своих самых похожих немецких кандидатов. Я хочу сделать, чтобы получить вектор английского слова из английской модели:

model_EN = gensim.models.Word2Vec.load_word2vec_format(model_file_EN, binary=True)
vector_w_en=model_EN[WORD_EN]

а затем запросите немецкую модель с этими векторами.

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

Я реализовал это в C, используя исходную функцию расстояния в пакете word2vec. Но теперь мне нужно, чтобы он был в python, чтобы иметь возможность интегрировать его с другими скриптами.

Знаете ли вы, есть ли метод в библиотеке gensim.models.Word2Vec или других подобных библиотеках, который это делает? Нужно ли его реализовать самостоятельно?

4b9b3361

Ответ 1

Метод similar_by_vector возвращает верхние N самых похожих слов вектором:

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

Ответ 2

Я не думаю, что ты пытаешься достичь точного ответа. Просто потому, что две модели обучаются отдельно. И хотя английская и немецкая модели будут иметь одинаковые расстояния между соответствующими им векторами слов. Там нет никакой гарантии, что слово вектор для "Дом" будет иметь то же направление, что и слово "Хаус".

Проще говоря, если вы обучили обе модели с векторным размером = 3. И у "Дома" есть вектор [0.5,0.2,0.9], нет гарантии, что у "Хауса" будет вектор [0.5,0.2,0.9] или даже что-то близкое к этому.

Чтобы решить эту проблему, вы можете сначала перевести английское слово на немецкий, а затем использовать вектор для этого слова, чтобы найти похожие слова в немецкой модели.

TL: DR; Вы не можете просто вставить векторы из одной языковой модели в другую и ожидать точных результатов.