Я пробую свои силы в ELMo, просто используя его как часть более крупной модели PyTorch.Базовый пример приведен здесь .
Это подкласс torch.nn.Module, который вычисляет любое количество представлений ELMo и вводит обучаемые скалярные веса для каждого.Например, этот фрагмент кода вычисляет два уровня представлений (как в моделях SNLI и SQuAD из нашей статьи):
from allennlp.modules.elmo import Elmo, batch_to_ids
options_file = "https://s3-us-west-2.amazonaws.com/allennlp/models/elmo/2x4096_512_2048cnn_2xhighway/elmo_2x4096_512_2048cnn_2xhighway_options.json"
weight_file = "https://s3-us-west-2.amazonaws.com/allennlp/models/elmo/2x4096_512_2048cnn_2xhighway/elmo_2x4096_512_2048cnn_2xhighway_weights.hdf5"
# Compute two different representation for each token.
# Each representation is a linear weighted combination for the
# 3 layers in ELMo (i.e., charcnn, the outputs of the two BiLSTM))
elmo = Elmo(options_file, weight_file, 2, dropout=0)
# use batch_to_ids to convert sentences to character ids
sentences = [['First', 'sentence', '.'], ['Another', '.']]
character_ids = batch_to_ids(sentences)
embeddings = elmo(character_ids)
# embeddings['elmo_representations'] is length two list of tensors.
# Each element contains one layer of ELMo representations with shape
# (2, 3, 1024).
# 2 - the batch size
# 3 - the sequence length of the batch
# 1024 - the length of each ELMo vector
Мой вопрос касается «представлений».Можете ли вы сравнить их с обычными выходными слоями word2vec?Вы можете выбрать способ возврата many ELMo (увеличение n-го измерения), но в чем разница между этими сгенерированными представлениями и каково их типичное использование?
Чтобы дать вам представление, для приведенного выше кода embeddings['elmo_representations']
возвращает список из двух элементов (двух уровней представления), но они идентичны.
Короче, как можно определить«представительства» в ELMo?