Word2Ve c сравнивает векторы разных моделей с разными размерами - PullRequest
3 голосов
/ 19 февраля 2020

Я обучил несколько моделей word2ve c с использованием gensim для разных языков, но size отличается для каждого из них.

векторы получаются так:

vec_sp = word_vectors_sp.get_vector("uno")

Как использовать vec_sp в качестве входных данных для другой модели с различным размером вектора:

word_vectors_en.most_similar(positive=[vec_sp], topn=1)

для получения соответствующего слова во второй модели

Ответы [ 2 ]

2 голосов
/ 20 февраля 2020

Если бы модели обучались отдельно, даже если бы они имели одинаковое количество измерений, векторы не были бы значимо сопоставимыми.

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

Например, даже если обе модели предназначены для одного и того же языка и содержат много похожих текстовых примеров, слово «яблоко» в одном и слово «яблоко» в другом могут оказаться в произвольно различном конечном позиции - благодаря как случайной инициализации, так и большому количеству случайного использования во время работы алгоритма. Расстояние / направление между этими положениями по существу не имеет смысла. Единственное соответствие, которое следует ожидать, состоит в том, что из учебных материалов примерно одинакового качества / достаточности соседи слова должны быть очень похожими.

Если две модели содержат много одинаковых слов, Существует возможность отдельно изучить «перевод» между двумя пространствами в отдельном процессе оптимизации. Он берет большое количество общих ключевых слов, изучает математическое преобразование, которое выполняет хорошую работу по перемещению слов из одного координатного пространства в другое, и затем это же преобразование может быть применено к словам, которых нет в обеих моделях.

Этот метод имел некоторый успех, предлагая похожие слова на другом языке в машинном переводе, и есть некоторый пример реализации кода в TranslationMatrix классе библиотеки gensim:

https://radimrehurek.com/gensim/models/translation_matrix.html

(Обычно используется между моделями одинаковой размерности, но может работать более широко.)

1 голос
/ 19 февраля 2020

Систематический c подход к проблеме возможности сравнения между n различными встроенными векторными пространствами с различными измерениями d_1, ... d_n заключается в уменьшении размерности векторы в каждом пространстве имеют значение m , где m

Есть много способов сделать это. По лемме Джонсона Линденштраусса вы можете сделать это, применив случайных проекций в каждом пространстве отдельно, т. Е. Выбрать случайную матрицу проекций Ri размером mx d_i для каждого набор векторов Xi_ {d_i} x N (при условии, что в каждом пространстве есть N векторов), а затем вычислить

Xi '_ {mx N} = Ri _ {mx d_i} x Xi _ { d_i x N} (размеры матрицы показаны рядом).

После применения этого преобразования для каждого пробела вы получите i таких пробелов ... размерность каждого из них будет m , что означает, что вы сможете вычислять точечные продукты между ими.

Еще один подход к уменьшению размерности заключается в использовании PCA . Sklearn Python предоставляет реализации для случайных проекций и PCA .

В конкретном примере, если у вас есть два векторных пространства 100 и 200 размеры, каждый из которых содержит 100 000 векторов, затем уменьшают каждое до 20 (произвольно выбираемых) с помощью PCA или случайной проекции. После этого вы сможете сравнить эти 20-мерные векторы путем вычисления расстояний или внутренних произведений.

...