как рассчитать расстояние между двумя моделями node2vec

У меня есть 2 модели node2vec с разными отметками времени. Я хочу рассчитать расстояние между двумя моделями. Две модели имеют одинаковый словарь, и мы обновляем модели.

Мои модели такие

model1:
"1":0.1,0.5,...
"2":0.3,-0.4,...
"3":0.2,0.5,...
.
.
.    
model2:
    "1":0.15,0.54,...
    "2":0.24,-0.35,...
    "3":0.24,0.47,...
    .
    .
    .

1 ответ

Решение

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

(Из-за некоторой присущей алгоритму случайности или из-за многопоточной обработки обучающего ввода даже запуск двух обучающих сеансов с одними и теми же данными приведет к созданию разных моделей. Каждая из них должна быть примерно такой же полезной для последующих приложений, но индивидуальна токены могут находиться в произвольно разных позициях.)

Тем не менее, вы можете попытаться синтезировать некоторые меры того, насколько две модели отличаются. Например, вы можете:

  • Выберите набор случайных (или значимых для домена) пар слов. Проверьте сходство между каждой парой в каждой модели отдельно, затем сравните эти значения между моделями. (То есть сравнитьmodel1.similarity(token_a, token_b) с model2.similarity(token_a, token_b).) Рассматривайте различие между моделями как некоторую взвешенную комбинацию всех протестированных различий подобия.

  • Для некоторого значительного набора релевантных токенов соберите N самых похожих токенов в каждой модели. Сравните эти списки с помощью какой-то меры ранговой корреляции, чтобы увидеть, насколько одна модель изменила "окрестности" каждого токена.

Для каждого из них я бы предложил проверить их работу по сравнению с базовым случаем точно таких же обучающих данных, которые были перемешаны и / или обучены с другим начальным случайным образом. seed. Показывают ли они такие модели как "почти эквивалентные"? В противном случае вам нужно будет настроить параметры обучения или синтетическую меру до тех пор, пока не будет получен ожидаемый результат - модели на основе одних и тех же данных будут оцениваться как одинаковые, даже если токены имеют очень разные координаты.

Другой вариант - обучить одну гигантскую комбинированную модель из синтетического корпуса, где:

  • все исходные неизмененные "тексты" обеих эпох появляются один раз
  • тексты из каждой отдельной эпохи появляются снова, но с некоторой случайной долей их жетонов, измененной с помощью модификатора эпохи. (Например, 'foo'иногда становится 'foo_1' когда в текстах первой эры, а иногда становится 'foo_2'в текстах второй эпохи. (Вы не хотите преобразовывать все токены в каком-либо одном тексте в токены определенной эпохи, потому что только токены, которые появляются вместе друг с другом, влияют друг на друга, и, следовательно, вы хотите, чтобы токены любой эпохи иногда появлялись с общими / общими вариантами, но также часто появляются с вариантами для конкретных эпох.)

В конце концов, оригинальный токен 'foo' получим три вектора: 'foo', 'foo_1', а также 'foo_2'. Все они должны быть очень похожи, но варианты, относящиеся к конкретным эпохам, будут относительно более подвержены влиянию контекстов конкретных эпох. Таким образом, различия между этими тремя (и относительное движение в теперь едином пространстве координат) будут показывать величину и виды изменений, которые произошли между данными двух эпох.

Другие вопросы по тегам