在训练我们的 CNN 进行文本分类时如何微调 word2vec?

Pri*_*sia 5 nlp artificial-intelligence machine-learning deep-learning

我有 3 个关于微调词向量的问题。请帮帮我。我会很感激的!提前谢谢了!

  1. 当我训练自己的 CNN 进行文本分类时,我使用 Word2vec 来初始化单词,然后我只是使用这些预先训练好的向量作为我的输入特征来训练 CNN,所以如果我从来没有嵌入层,它肯定不能做任何事情通过反向传播进行微调。我的问题是如果我想做微调,是否意味着创建一个嵌入层?以及如何创建它?

  2. 当我们训练 Word2vec 时,我们使用的是无监督训练,对吗?就我而言,我使用skip-gram 模型来获取我预先训练好的word2vec;但是当我拥有 vec.bin 并在文本分类模型 (CNN) 中使用它作为我的词初始化器时,如果我可以微调 vec.bin 中的词到向量映射,是否意味着我必须拥有与训练 Word2vec 时完全相同的 CNN 网络结构?微调的东西会改变 vec.bin 还是只是微调计算机内存?

  3. skip-gram 模型和 CBOW 模型是否仅用于无监督 Word2vec 训练?或者他们也可以申请其他一般的文本分类任务?Word2vec 无监督训练和监督微调之间的网络有什么不同?

@Franck Dernoncourt 谢谢你提醒我。我在这里很绿,希望能从强大的社区中学到一些东西。有空的时候请看看我的问题,再次感谢!

Ste*_* Du 2

1)您需要的只是一个使用带有可训练/固定嵌入层的预训练词嵌入的好例子,并在代码中进行以下更改。在 Keras 中,您可以默认更新该层,要将其从训练中排除,您需要将 trainable 设置为 False。

embedding_layer = Embedding(nb_words + 1,
                            EMBEDDING_DIM,
                            weights=[embedding_matrix],
                            input_length=MAX_SEQUENCE_LENGTH,
                            trainable=True)
Run Code Online (Sandbox Code Playgroud)

2)你的w2v只是用于嵌入层初始化,与你将使用什么CNN结构不再有关系。只会更新内存中的权重。