【问题标题】:word embedding of a lstm sequencelstm序列的词嵌入
【发布时间】:2019-06-02 21:11:50
【问题描述】:

假设,我有一个 Seq2Seq 模型。我想在这个模型中有嵌入层。

根据我的研究,我可以通过三种方式做到这一点:

  1. 在我的数据集上单独训练词嵌入或下载预训练的词嵌入,然后使用这些嵌入的权重作为我数据集中词的权重。所以这里我根本不需要嵌入层,我只是将已经训练好的单词的权重加载到我的数据集中的单词中。

  2. 我创建了一个嵌入层并将可训练设置为 true,因此我不仅有一个嵌入,而且该嵌入将根据我的任务进行训练

  3. 我创建了一个嵌入层,加载已训练的权重,并设置可训练的 False。在这种情况下,权重不会更新。

(如果我错了,请纠正我)。

我使用了first approach。我想知道这段代码输出的解释是什么:

model_wv = Word2Vec.load("word2vec_50d_7w")
embeddings = np.zeros((len(model_wv.wv.vocab), emb_dim))
for i in range(len(model_wv.wv.vocab)):
    # print(i)
    embedding_vector = model_wv.wv[model_wv.wv.index2word[i]]
    if embedding_vector is not None:
        embeddings[i] = embedding_vector

print(embeddings[[1,2,3],[3,4,1]])

这是输出:

[-0.01566689 -1.36469996  0.59684211]

将此[1,2,3],[3,4,1] 视为与length=3 的两个序列。

我在想我们在 lstm 中使用词嵌入将序列中的每个词转换为嵌入。我希望在每个向量中看到two vectorsthree items

嵌入是gensim中的word2vec,

如果有人在我迷路的地方阐明它,我会感激它吗?

谢谢~

【问题讨论】:

    标签: tensorflow keras lstm gensim word-embedding


    【解决方案1】:

    您对设置嵌入层的三种变体的解释与我的理解完全正确。

    有两种主要的迁移学习技术。

    1. 使用预学习模型作为特征向量。在您的情况下,word2vec 模型将用作查找服务,以将令牌预处理/转换为 id,然后嵌入向量。当您训练自己的模型时,这些嵌入向量将成为实际特征。 (这是你的 #1)

    2. 使用微调方法。在这里,您可以选择继续训练预学习模型(设置 trainable=True)或修复预学习模型(设置 trainable=False)。这两种方法都可能有好处。 (这是你的 #2 和 #3)

    (#1 和 #3) 根据我的经验,在质量方面产生了类似的结果。 如果您拥有大量的训练数据,那么根据我的经验,使用 trainable=True (#2) 进行微调将是最好的方法。

    这里的问题是一个 numpy 问题。你可能应该说,

    print(embeddings[[1,2,3]], embeddings[[3,4,1]])
    

    否则indexing 将无法按预期工作。

    embeddings[[1,2,3],[3,4,1]]
    

    这实际上查找索引为 1、2、3 的行并分别获取索引为 3、4、1 的列。换句话说,它拿起了

    column 3 for row 1
    column 4 for row 2
    column 1 for row 3
    

    【讨论】:

    • 非常感谢您确认解释,并澄清 numpy 切片问题。您知道我们通常何时使用每种方法吗?特殊情况 1 和 3 让我有点困惑。
    • 当然。在您的情况下,您总是希望获得整个嵌入维度。您不需要对列维度(嵌入维度)进行任何切片。因此,在建立索引时,提供行索引(这是您的令牌 ID)就足以用于查找目的。
    • 训练方面呢?
    • 那是另一回事。在查找整个嵌入向量之后,使用子范围操作绝对可以。但是抬头看,你仍然不需要任何切片。随意在序列维度和/或嵌入维度上选择任何卷积操作(尽管在 NLP 问题上不是很常见)。
    • 啊,我误解了你的问题。我将对我的答案进行一些修改。
    猜你喜欢
    • 2019-06-04
    • 2016-10-20
    • 1970-01-01
    • 2019-03-02
    • 2018-10-24
    • 1970-01-01
    • 2018-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多