У меня есть обученные модели word2vec в geinsim с 300 измерениями, и я хотел бы сократить размеры до 100 (просто удалить последние 200 измерений). Каков самый простой и эффективный способ использования python?
Модель Gensim Word2Vec: размеры выреза
Ответы (2)
Вы можете сохранить выходную модель в формате word2vec а>. Обязательно сохраните его как текстовый файл (.txt). Формат word2vec выглядит следующим образом
Первая строка <vocabulary_size> <embedding_size>
. В вашем случае <embedding_size>
будет 300
. Остальные строки будут <word><TAB><300 floating point numbers space separated>
. Теперь вы можете легко разобрать этот файл на питоне и отбросить последние 200 с плавающей запятой из каждой из строк. Обязательно обновите <embedding_size>
в первой строке. Сохраните это как новый файл (необязательно). Теперь вы можете загрузить этот новый файл как новую модель word2vec, используя load_word2vec_format().
Вы должны иметь возможность обрезать размеры внутри экземпляра KeyedVectors
, а затем сохранить его, поэтому вам не нужно делать ничего особенного с форматом на диске. Например:
kv = w2v_model.wv
kv.vectors = kv.vectors[:,0:100] # keeps just 1st 100 dims
kv.vector_size = 100
Теперь kv
можно сохранить (либо как родной .save()
gensim
, либо как формат обмена .save_word2vec_format()
) или просто использовать как подмножество исходных измерений.
(Хотя любые 100 измерений более крупного вложения, скорее всего, будут такими же хорошими, как и любые другие, вы потеряете часть выразительности 300 измерений произвольным образом. Повторное обучение со 100 измерениями для начала может быть лучше. , или используя какой-то алгоритм уменьшения размерности, который, по сути, наверняка оставит вас с «наиболее выразительными» 100 измерениями.)