К сожалению TranslationMatrix class isn't well-factored to let you just project vectors (the 1st step in its
.translate () `), а не продолжать делать полные переводы.
Вы захотите выполнить лишь небольшое подмножество всех операций, выполненных его фактическим .translate()
методом, исходный код которого можно просмотреть по адресу:
https://github.com/RaRe-Technologies/gensim/blob/ec222e8e3e72608a59805040eadcf5c734a2b96c/gensim/models/translation_matrix.py#L279
Более или менее, вы хотите скопировать то, что делает этот метод, но просто вернуть mapped_source_space
(в строке 345). Он должен содержать только введенные вами («исходные») слова и их новые координаты. (Вы можете игнорировать все ветви, имеющие отношение к опции gc=1
или другим наворотам.)
Не проверяя этот код , я думаю, что внешний для перевода- Метод вспомогательной матрицы, который делает правильные вещи, будет примерно:
def project_words_vectors(translation_matrix, source_words):
source_space = Space.build(translation_matrix.source_lang_vec, source_words)
source_space.normalize()
mapped_source_space = translation_matrix.apply_transmat(source_space)
return mapped_source_space
(Возвращенный объект Space
немного похож на минимальный KeyedVectors
- и его список .index2word
и .word2index
dict , служат ориентирами для определения того, какие строки в его свойстве .mat
являются какими векторами. Для получения дополнительной информации см. тот же исходный файл, указанный выше.)
Дайте мне знать, работает ли этот быстрый и грязный фрагмент в ваших целях , или требуются небольшие исправления, прежде чем его можно будет использовать.
(Отдельно, просмотрев исходный код, я не уверен, что .normalize()
в этой функции или в исходном методе .translate()
, или даже в исходном методе класса .train()
строго необходим для получения хороших результатов. Если бы я полагался на этот код, я бы проверил, действительно ли такая нормализация времени поезда или перевода действительно улучшает конечные результаты для моей цели. oses of not.)