在发送到RNN之前,令牌<pad>,<unknown>,<go>,<EOS>的单词vector应该是什么?

Wen*_* Li 6 nlp word2vec deep-learning word-embedding

在字嵌入中,start_tokens _PAD,_UNKNOWN,_GO,_EOS应该是一个很好的矢量表示?

Tre*_*ury 6

如果您也在更新词嵌入向量,则 Spettekaka 的答案有效。

但是,有时您会想要使用无法更新的预训练词向量。在这种情况下,您可以为要添加的每个标记的词向量添加一个新维度,并将每个标记的向量在新维度中设置为 1,在其他维度中设置为 0。这样,您就不会遇到例如“EOS”更接近“开始”的向量嵌入而不是“结束”的向量嵌入的情况。

澄清示例:

# assume_vector embeddings is a dictionary and word embeddings are 3-d before adding tokens
# e.g. vector_embedding['NLP'] = np.array([0.2, 0.3, 0.4]) 

vector_embedding['<EOS>'] = np.array([0,0,0,1])
vector_embedding['<PAD>'] = np.array([0,0,0,0,1])
new_vector_length = vector_embedding['<pad>'].shape[0] # length of longest vector
for key, word_vector in vector_embedding.items():
    zero_append_length = new_vector_length - word_vector.shape[0]
    vector_embedding[key] = np.append(word_vector, np.zeros(zero_append_length))
Run Code Online (Sandbox Code Playgroud)

现在,您的词嵌入词典包含 2 个新的标记维度,并且您的所有单词都已更新。


spe*_*aka 2

据我了解,您可以用任何向量表示这些标记。

原因如下:

将单词序列输入到模型中,首先将每个单词转换为 ID,然后在嵌入矩阵中查找与该 ID 对应的向量。使用该向量,您可以训练模型。但是嵌入矩阵还包含可训练的权重,这些权重将在训练期间进行调整。来自预训练向量的向量表示只是开始产生良好结果的一个好点。

因此,一开始用什么表示特殊标记并不重要,因为它们的表示在训练过程中会发生变化。