как рассчитать расстояние между двумя моделями 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'
. Все они должны быть очень похожи, но варианты, относящиеся к конкретным эпохам, будут относительно более подвержены влиянию контекстов конкретных эпох. Таким образом, различия между этими тремя (и относительное движение в теперь едином пространстве координат) будут показывать величину и виды изменений, которые произошли между данными двух эпох.