Оказывается, есть относительно простой способ сделать это без изменения исходного кода Torchtext. Вдохновение от этой Github-темы .
1. Создать тензорное слово-вектор
Вам нужно загрузить свое вложение, чтобы получить массивный массив с размерами (number_of_words, word_vector_length):
my_vecs_array [word_index] должен возвращать ваш соответствующий вектор слов.
ВАЖНО. Этот массив ДОЛЖЕН быть собран с использованием словарного словаря Torchtext (field.vocab.stoi). В противном случае Torchtext будет указывать на неправильные векторы!
Не забудьте преобразовать в тензор:
my_vecs_tensor = torch.from_numpy(my_vecs_array)
2. Загрузить массив в Torchtext
Я не думаю, что этот шаг действительно необходим из-за следующего, но он позволяет иметь поле Torchtext со словарем и векторами в одном месте.
my_field.vocab.set_vectors(my_field.vocab.stoi, my_vecs_tensor, word_vectors_length)
3. Передача веса на модель
В вашей модели вы объявите встраивание следующим образом:
my_embedding = toch.nn.Embedding(vocab_len, word_vect_len)
Затем вы можете загрузить свои веса, используя:
my_embedding.weight = torch.nn.Parameter(my_field.vocab.vectors, requires_grad=False)
Используйте require_grad = True, если вы хотите обучить встраивание, используйте False, если вы хотите заморозить его.
РЕДАКТИРОВАТЬ: Похоже, есть другой способ , который выглядит немного проще! Улучшение в том, что вы, очевидно, можете передавать предварительно обученные векторы слов непосредственно на этапе формирования словарного запаса, так что здесь выполняются шаги 1-2.