我正在尝试使用 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 输出层进行比较吗?您可以选择返回多少个 ELMo(增加第 n 个维度),但是这些生成的表示之间有什么区别,它们的典型用途是什么?
给你一个想法,对于上面的代码,embeddings['elmo_representations']
返回两个项目(两个表示层)的列表,但它们是相同的。
简而言之,如何定义 ELMo 中的“表示”?